Je lis actuellement sur des robots à équilibrage automatique qui utilisent un IMU (gyroscopes + accéléromètres) pour estimer leur angle d'inclinaison actuel.
La plupart des documents que j'ai trouvés disent la même chose:
- Vous ne pouvez pas simplement prendre l'arc tangente des données des accéléromètres pour trouver la direction de la gravité car elles sont affectées par des "bruits inertiels".
- Vous ne pouvez pas simplement intégrer la sortie du gyroscope au fil du temps car il dérive.
- Il existe deux solutions généralement acceptées pour fusionner ces données:
- Un filtre de Kalman estimant l'inclinaison actuelle avec le biais du gyroscope actuel .
- Un filtre complémentaire appliquant un filtre passe-bas sur les données de l'accéléromètre (on peut leur faire confiance à long terme) et un filtre passe-haut sur les données du gyroscope (on peut faire confiance à court terme).
Toutes les sources que j'ai trouvées semblent utiliser les données brutes des accéléromètres de ces filtres, sans tenir compte du fait que, dans un robot auto-équilibré, nous pouvons avoir une très bonne estimation du "bruit inertiel" mentionné ci-dessus.
Voici mon bien
Modélisons notre robot avec un pendule inversé avec un point d'appui mobile et utilisons ce pauvre dessin comme référence.
Les forces d'inertie ressenties par les accéléromètres à C peuvent être dérivées de (si je n'ai fait aucune erreur)
En admettant que
- Notre robot roule sans glisser
- Nous pouvons mesurer x (soit en utilisant des moteurs pas à pas ou des moteurs à courant continu avec codeurs)
Ensuite, nous pouvons avoir une bonne estimation de toutes ces variables:
- : différences finies sur nos mesures actuelles et précédentes de
- : La lecture actuelle du gyroscope
- : estimation précédente de plus l'intégration de et sur un
- : différences finies sur et
Une fois que nous avons cela, nous pouvons annuler l'effet des forces d'inertie dans les accéléromètres, ne laissant qu'une bien meilleure mesure de la gravité.
C'est probablement toujours une bonne idée de l'utiliser comme entrée du filtre Kalman habituel comme dans 1. ci-dessus.
Peut-être que nous pouvons même construire un filtre de Kalman qui pourrait estimer toutes ces variables à la fois? Je vais essayer ça.
Qu'est-ce que tu penses? Est-ce que j'ai râté quelque chose?
Je pense que le robot auto-équilibrant pourrait être une bonne étiquette, mais je ne peux pas le créer