Construire un robot d'équilibrage avec entraînement différentiel

8

J'ai déjà construit un robot d'équilibrage à deux roues utilisant des servos à rotation continue et un accéléromètre / gyroscope. J'ai mis à niveau les servos vers certains moteurs CC à engrenages avec des encodeurs 8 bits dans le but de faire tourner le robot tout en équilibrant.

Je suis un peu coincé sur la façon de le programmer pour qu'il se déplace tout en restant en équilibre. Je pense qu'une façon serait de simplement avoir l'entrée de commande pour les moteurs agir un peu comme la pousser. Le robot serait donc momentanément déséquilibré dans la direction dans laquelle je veux qu'il se déplace. Cela me semble cependant un peu maladroit. Il doit y avoir une meilleure façon de faire? Je pense que je dois combiner le modèle dynamique de l'équilibreur avec l'entraînement différentiel, mais cela dépasse un peu la théorie du contrôle que je connais.

Mise à jour D'après la réponse d'Anorton, j'ai maintenant une belle matrice d'état.

Maintenant sur le placement des pôles: La matrice A devra être 4x4 basée sur le nouveau vecteur d'état. Et B devra alors être une matrice 4x2 car je ne peux contrôler que le couple roue gauche / droite (u = vecteur 2x1).

Je devrais peut-être en savoir plus à ce sujet, mais existe-t-il un moyen systématique de déterminer la matrice A par placement des pôles? Il me semble que pour cet exemple et des exemples encore plus compliqués, déterminer A par deviner et vérifier serait très difficile.

Mise à jour # 2 Après un peu de lecture, je pense que je le comprends maintenant. J'ai toujours besoin de la dynamique du robot pour déterminer la matrice A. Une fois que je l'ai, je peux faire le placement des pôles en utilisant matlab ou octave.

JDD
la source
1
Quel type d'approche utilisez-vous / quelle théorie du contrôle connaissez-vous? Je peux rédiger une approche, mais elle pourrait être super basique ou super avancée, selon votre expérience ... :)
apnorton
Merci! pour l'ancienne conception avec les servos, je calculais l'angle d'inclinaison en utilisant les données du gyroscope / accéléromètre. Envoi de cela à un filtre de Kalman, puis à un PID pour la position du servo. Je suis bon avec les équations différentielles et d'accord avec l'algèbre linéaire. Je suis encore assez nouveau pour les contrôles, alors peut-être celui de base? Ou les deux si vous le souhaitez. Je suis toujours intéressé à en savoir plus :)
JDD
1
Je n'ai qu'une seule approche, donc mon commentaire précédent disait vraiment qu'il pouvait être pris dans les deux sens (soit super avancé si vous débutiez avec des robots, ou super basique si vous avez une certaine connaissance des commandes) ... Sur la base de vos antécédents commentaire, j'ai le sentiment d'être surclassé. :) Ma connaissance des commandes est très mince, mais je vais y mettre ma valeur de 0,02 $ ...
apnorton
Bienvenue dans Robotics JDD, il est préférable de modifier des informations supplémentaires dans votre question plutôt que de les ajouter en tant que commentaire, de cette façon les commentaires peuvent être rangés (supprimés) plus tard et ils cesseront de distraire les lecteurs de la question elle-même.
Mark Booth

Réponses:

8

Avis de non-responsabilité: je ne l'ai jamais fait moi-même, mais je n'en ai vu qu'une description via le "Contrôle de la robotique mobile" de Georgia Tech sur Coursera. Ma connaissance des commandes est également inégale. Ainsi ... prenez ceci avec un grain de sel.:)

Pour garder le robot droit (et immobile), vous essayez de vous stabiliser (envoyer à 0) l'état x, où:

x=[leftVelocityrightVelocityangle from vertical]

Cependant, lorsque ce système est stable, les vitesses des roues gauche et droite seront 0. Donc, nous voulons un décalage pour la vitesse cible:

xnew=[leftVelocityδLrightVelocityδRangle from vertical]
δ est la vitesse cible de chaque côté.

Lorsque ce système est stabilisé, le robot sera en position verticale et fera tourner chaque roue à la vitesse souhaitée.

Il s'agit de l'approche / du plan de base. Je vais éditer cela avec plus de détails demain (et les mathématiques réelles, etc.), mais je voulais au moins publier l'idée générale maintenant. (Il est tard dans mon fuseau horaire et j'ai un cours tôt pour y arriver.)

EDITÉ: Oh mon Dieu. Donc, je viens de revenir sur les diapositives à ce sujet dans le cours Coursera (Section 4, diapositive 29). Vous voudrez peut-être aller vous inscrire à ce cours juste pour télécharger ce jeu de diapositives ...:)

La partie difficile est de calculer la A et Bmatrices (c'est un gros gâchis de linéarisation). Quoi qu'il en soit, vous voulez créer votre matrice d'état comme suit (pas comme ci-dessus - ma mémoire n'était pas tout à fait correcte):

x=[vωϕϕ˙]

v est la vitesse du segway, ω est la vitesse de rotation (à quelle vitesse le robot pivote) et ϕ est l'angle par rapport à la verticale.

Nous voulons avoir une vitesse souhaitée, définissons donc un nouveau vecteur d'état:

x~=x[vdωd00]=xδ

δ est la vitesse et la quantité de rotation souhaitées (comme indiqué ci-dessus).

Différencier:

x~˙=x˙δ˙=δ is constantx˙

Ainsi, nous avons

x~˙=Ax+Bu

A est la matrice de coefficients standard B est la matrice d'entrée, et uest le vecteur de contrôle. On peut alors dire:

x~˙=A(xδ)+Bu+Aδ
Mais, basé sur la solution pour A (de Coursera), Aδ=0. Donc:
x~˙=Ax~+Bu

Vous pouvez maintenant utiliser le placement des pôles pour déterminer les valeurs propres correctes, etc.

apnorton
la source
Super merci! J'ai fait ce même cours Coursera aussi, nous ne sommes probablement pas trop loin dans la connaissance des contrôles. Cela s'avère être un projet beaucoup plus difficile que je ne le pensais. J'aime bien ta matrice d'état jusqu'à présent.
JDD
Eek! Il semble que je ne réponds pas à cette question ce soir! J'étais en vacances de printemps la semaine dernière, et j'ai oublié quelque chose qui était dû, donc cela m'a occupé aujourd'hui. Je l'
éditerai
Aucun problème. J'ai fait exploser mon dernier pont en H hier en essayant de le remonter, donc je vais devoir attendre un remplacement.
JDD
Merci beaucoup Anorton pour l'aide. Je pense que je comprends comment faire beaucoup plus maintenant. J'ai mis à jour ma question d'origine. Comment déterminer les matrices A et B me dérange toujours.
JDD