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.
:)
Ma connaissance des commandes est très mince, mais je vais y mettre ma valeur de 0,02 $ ...Réponses:
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ù:
Cependant, lorsque ce système est stable, les vitesses des roues gauche et droite seront0 . Donc, nous voulons un décalage pour la vitesse cible:
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 laUNE et B matrices (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):
Où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:
Oùδ est la vitesse et la quantité de rotation souhaitées (comme indiqué ci-dessus).
Différencier:
Ainsi, nous avons
OùUNE est la matrice de coefficients standard B est la matrice d'entrée, et u est le vecteur de contrôle. On peut alors dire:
Vous pouvez maintenant utiliser le placement des pôles pour déterminer les valeurs propres correctes, etc.
la source