Quel algorithme dois-je utiliser pour équilibrer un robot à deux roues à l'aide d'un gyroscope?

25

Existe-t-il un bon algorithme populaire et fiable que je peux utiliser en prenant les données d'un gyroscope et en l'utilisant pour contrôler deux roues indépendantes afin de maintenir un robot aussi équilibré en position verticale? Je suis à la recherche d'un algorithme qui me permettra de l'utiliser pour conduire un robot et de le garder debout lorsqu'il est à l'arrêt. La capacité de faire face aux pentes et aux personnes la poussant serait également un bonus, mais pas indispensable.

berry120
la source
Je vais également y travailler. Vous devez utiliser un filtre kalman pour filtrer vos données brutes. Et utilisez un algorithme PID pour le régler.
Huzo

Réponses:

16

Le contrôleur le plus simple est un contrôleur de rétroaction d'état linéaire. Il y a essentiellement 4 états différents pour lesquels vous avez besoin d'un gain. Ce sont l'angle d'inclinaison, le taux d'inclinaison, la vitesse et la position.


Le LQR (régulateur quadratique linéaire) est une méthode pour concevoir ces gains (après avoir obtenu une représentation espace-état linéarisée de votre système). Si vous n'avez pas de représentation d'espace d'état (vous n'en avez probablement pas), vous pouvez obtenir des équations de mouvement et mesurer les paramètres. Si vous n'avez pas de représentation d'espace d'état, vous devez simplement régler les gains manuellement (sans LQR ou d'autres méthodes telles que le placement des pôles ).


Réglage manuel des gains:

En supposant que l'angle d'inclinaison, la position / vitesse et les couples de roue sont tous dirigés vers l'avant (s'ils sont positifs), vous voulez un gain positif sur votre angle d'inclinaison et votre taux d'inclinaison, ainsi qu'un gain positif sur la position et la vitesse.

Commencez avec un gain sur l'angle d'inclinaison et le taux d'inclinaison. Cela lui permettra d'équilibrer initialement. Une fois qu'il reste équilibré, vous pouvez contrôler la position et la vitesse en leur ajoutant un gain. S'il est instable, augmentez le gain sur le taux d'inclinaison (ce qui contribue à amortir le système).

Le contrôle de position / vitesse contrôlera les deux états à zéro. Pour contrôler une autre valeur, vous avez juste besoin d'un contrôleur de suivi de référence, en remplaçant les états par leurs erreurs avant de l'introduire dans votre contrôleur (par exemple, vitesse actuelle - référence de vitesse).

Le contrôle de lacet peut être effectué indépendamment (avec les différences de couple de roue ajoutées au contrôleur principal d'équilibre / vitesse / position).

ronalchn
la source
9

Je crois que la solution la plus populaire à ce problème est un contrôleur LQR . Le problème que vous essayez de résoudre est le problème du pendule inversé . À l'aide de ces mots clés, vous devriez être en mesure de rechercher le code open source de quelqu'un. Le prochain problème sera de cartographier la plupart des grandeurs physiques pertinentes à votre application (poids, couple moteur, etc ...)

Chris Mansley
la source
5

Comme je ne connais pas vos compétences en ingénierie / théorie du contrôle, je vous recommande de commencer avec un contrôleur PID . Il s'agit d'un simple contrôleur et vous en trouverez de nombreuses implémentations de code. L'inconvénient du PID est que vous finirez probablement par passer du temps à régler les paramètres à la main.

Il y a quelques années, je l'ai utilisé pour contrôler un robot Lego Mindstorm à deux roues en fonction de son odométrie et cela fonctionnait assez bien. Pour le faire bouger, vous devrez jouer avec les points de consigne.

Bien sûr, plus tard, vous pouvez améliorer la qualité de votre contrôleur (stabilité, robustesse, etc.) en utilisant des lois de contrôle plus avancées comme le LQR mentionné précédemment.

Bonne chance!

pirate
la source