Accéléromètres dans un robot auto-équilibré, ne pouvons-nous pas faire mieux?

9

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:
    1. Un filtre de Kalman estimant l'inclinaison actuelle avec le biais du gyroscope actuel .
    2. 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.

entrez la description de l'image ici

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)

(cr¨cΘ¨)=(-X¨péché(Θ)-RΘ˙2-X¨cos(Θ)+RΘ¨)

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:

  • X¨^k : différences finies sur nos mesures actuelles et précédentes deX
  • Θ˙^k : La lecture actuelle du gyroscope
  • Θ^k : estimation précédente de plus l'intégration de et sur unΘΘ˙^kΘ˙^k-1Δt
  • Θ¨^k : différences finies sur etΘ˙^kΘ˙^k-1

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

Julien
la source
Un télémètre laser serait incroyablement utile.
holmeski

Réponses:

1

Si vous construisez correctement un filtre Kalman avec une entrée «x», alors oui, ce sera mieux. Notamment, le capteur inertiel ne peut en aucun cas vous donner une valeur absolue pour x, car vous essayez (essentiellement) de double-intégrer un signal d'accéléromètre dans une position, et qui est extrêmement sensible au bruit dans la sortie de l'accéléromètre.

Certaines choses que vous voudrez peut-être considérer lors de vos voyages:

  1. Un filtre de Kalman à part entière est intense en termes de calcul, mais un Kalman à l'état stationnaire est essentiellement un filtre complémentaire avec des fréquences d'atténuation sélectionnées par construction plutôt que b'guess et b'gosh.
  2. En parlant de b'guess et b'gosh, si vous voulez qu'un Kalman fonctionne bien (et, parfois, pas du tout), vous devez rendre compte de façon très précise de tout ce qui entre dans vos écarts. Kalmans est connu pour ne pas bien répondre aux décalages entre votre modèle et la réalité. Si vous êtes prêt à faire le calcul, examinez H-infinity et d'autres techniques d'estimation d'état robustes.
  3. Si vous descendez la route H-infinity, vous pouvez également trouver le filtre H-infinity en régime permanent et obtenir le même avantage de calcul (et, en fait, la structure de filtre réelle dans votre code incorporé sera la même; il '' ll aura juste des valeurs différentes dans les coefficients).
TimWescott
la source
Je pense que vous surestimez le coût de calcul d'un filtre kalman complet. Julien aura probablement moins de 6 états, ce qui ne serait pas un problème sur la plupart des planches.
holmeski
1

Bien que ce ne soit pas une réponse complète à votre question, je veux laisser certaines de mes réflexions. Je pense que vous avez manqué:

  1. La gravité elle-même, qui pointe vers le bas et est généralement d'environ 9,81 m / s² mais peut être différente en fonction de votre emplacement (vous ne mesurez 0 gravité que lorsque le robot est en chute libre)
  2. Les capteurs ne sont généralement pas alignés à 100% sur votre axe x / y / z (la puce n'est pas totalement horizontale sur le PCB ... le PCB n'est pas monté totalement horizontal / verticalement dans votre robot et ainsi de suite); vous devez compenser cela
  3. Les accéléromètres-capteurs ont une valeur de décalage et de gain que vous devez compenser. Ils sont affectés par exemple par la température et les tolérances de fabrication. Il existe des algorithmes d'étalonnage en ligne pour cela; mais vous pouvez aussi mettre ces variables inconnues dans un filtre de Kalman.
  4. Les gyroscopes ont une dérive, qui dépend également de la température. Ce n'est pas une constante mais pourrait changer avec le temps. Cette dérive peut être légèrement compensée à l'aide d'un magnétomètre.
  5. Les magnétomètres ou capteurs Compass en 3D peuvent être utilisés pour compenser la dérive des gyroscopes. Cependant, ils sont parfois affectés par des champs électromagnétiques (moteurs, aimants, acier dans les murs, etc.). On ne peut donc pas leur faire totalement confiance.

Un modèle de filtre de Kalman est une bonne approche. Plus vous en saurez sur le modèle de mouvement que vous mettez dans le modèle, mieux cela fonctionnera. Vous devez également connaître les (co-) variances de toutes les variables ... Dans quelle mesure pensez-vous que les mesures de chaque capteur sont.

SDwarfs
la source
Bons points sur des problèmes du monde réel comme l'étalonnage, la dérive, la température, etc.
Ben