Stylo intelligent : Suivi temps réel de l'écriture et du mouvement avec Raspberry Pi et IMU
Introduction
À l'ère numérique, la capture de l'écriture manuscrite nécessite généralement des écrans tactiles capacitifs ou des stylets. Bien que précis, ces solutions sont limitées par les exigences de surface et manquent de vraie liberté spatiale. Notre Stylo Intelligent élimine ces contraintes en combinant un Raspberry Pi avec une unité de mesure inertielle (IMU) pour suivre le mouvement et reconstruire les trajectoires instantanément. Le système repose uniquement sur le gyroscope et l'accéléromètre de l'IMU, transmettant les données sans fil au Pi. Des algorithmes personnalisés récupèrent alors l'orientation et la position du dispositif, stockent les données et les affichent en temps réel sur l'écran TFT du Pi via pygame. Un simple bouton-poussoir démarre et arrête l'enregistrement, permettant une utilisation flexible sur stylos, robots ou applications portables. Cette approche offre une solution polyvalente, indépendante de toute surface, pour la capture d'écriture, l'analyse de mouvement et bien plus.
Objectif
Le but principal est de développer un module de suivi modulaire pouvant être fixé sur des stylos, des robots, voire des membres humains. Lorsque l'hôte bouge, le module enregistre sa trajectoire et la projette sur un repère horizontal à l'écran. Contrairement aux systèmes de stylet conventionnels, notre conception fonctionne indépendamment de tout plan prédéfini, permettant le suivi dans l'air libre ou sur des surfaces irrégulières. La performance insensible à l'orientation du module garantit des résultats constants quel que soit l'inclinaison ou le placement.
Calibration de l'IMU
Les tolérances de fabrication désalignent souvent les axes de l'accéléromètre et du gyroscope de l'IMU, entraînant des écarts dans les angles d'Euler calculés. Nous utilisons une routine de calibration à six positions pour quantifier et corriger ces décalages. Un gabarit de calibration personnalisé (Figure XX) maintient l'IMU dans chaque orientation, enregistrant les lectures brutes des capteurs. La matrice de calibration dérivée de ces six échantillons est ensuite appliquée à chaque mesure de l'accéléromètre :
\[\mathbf{A}_{\text{cal}} = \begin{bmatrix}A_x\\A_y\\A_z\end{bmatrix}, \quad \mathbf{a}_{\text{raw}} = \begin{bmatrix}a_x\\a_y\\a_z\end{bmatrix}\]
Après calibration, le vecteur d'accélération corrigé \(\mathbf{A}_{\text{cal}}\) remplace les données brutes pour le traitement ultérieur.
Fusion de capteurs pour les données brutes
Pour obtenir une estimation robuste de l'orientation, nous fusionnons les sorties du gyroscope et de l'accéléromètre à l'aide des mathématiques des quaternions. Les quaternions offrent une représentation de rotation sans singularité et simplifient les transformations vectorielles. La conversion entre le quaternion \(q\) et les angles d'Euler \((\alpha,\beta,\gamma)\) est donnée par :
\[\displaystyle q = \cos\frac{\theta}{2} + \sin\frac{\theta}{2}\bigl(\cos\alpha\,\mathbf{i} + \cos\beta\,\mathbf{j} + \cos\gamma\,\mathbf{k}\bigr)\]
Pour un vecteur fixe \(\mathbf{V} = V_x\mathbf{i} + V_y\mathbf{j} + V_z\mathbf{k}\), la rotation par quaternion s'effectue comme \(\mathbf{V}' = q \circ \mathbf{V} \circ q^{-1}\).
Comme le gyroscope seul dérive avec le temps, nous corrigeons continuellement son biais en comparant le vecteur gravité mesuré par l'accéléromètre avec l'estimation gravité dérivée du gyroscope. La routine UpdateIMU s'exécute 2000 itérations pendant que le capteur est immobile, construisant une boucle de rétroaction proportionnelle-intégrale (PI) qui minimise l'erreur angulaire. Le cœur de l'algorithme est présenté ci-dessous :
def UpdateIMU(self, Gyr, Acc): if np.linalg.norm(Acc) == 0: warnings.warn("Accelerometer magnitude is zero. Algorithm update aborted.") return Acc = np.array(Acc / np.linalg.norm(Acc)) v = np.array([[2*(self.q[1]*self.q[3] - self.q[0]*self.q[2])], [2*(self.q[0]*self.q[1] + self.q[2]*self.q[3])], [self.q[0]**2 - self.q[1]**2 - self.q[2]**2 + self.q[3]**2]]) error = np.cross(v, np.transpose([Acc]), axis=0) self.IntError += error Ref = Gyr - np.transpose(self.Kp*error + self.Ki*self.IntError) pDot = 0.5 * self.quaternProd_single(self.q, [0, Ref[0,0], Ref[0,1], Ref[0,2]]) self.q += pDot * self.SamplePeriod self.q /= np.linalg.norm(self.q) self.Quaternion = self.quaternConj(self.q) Les données du gyroscope corrigées (Ref) alimentent la mise à jour du quaternion, produisant une estimation d'orientation stable qui alimente la reconstruction de trajectoire affichée sur le Pi.
En savoir plus : Stylo intelligent - Projet final ECE5725
Processus de fabrication
- Idées de projets basés capteurs pour étudiants ingénieurs dernière année
- Fabrication Intelligente 2021 : 10 Tendances Émergentes Redéfinissant la Production
- Éclairage intelligent : la pierre angulaire d'une ville véritablement connectée
- Journal du projet FirePick Delta : Construire une MicroFactory open-source avec OpenPnP
- Health Band : Bracelet intelligent fiable d'assistance pour personnes âgées
- Meilleures mises à jour maison connectée pour moderniser votre espace de vie
- Maximiser le ROI dans la fabrication intelligente : Retour sur investissement et succès piloté par les données
- Capteur ultra-fin révolutionnaire améliore la fonctionnalité des lentilles de contact intelligentes
- Choisir le bon projet d'automatisation : un guide stratégique