VertiBot : projet de robot type pendule inversé

Note : cet article est une traduction de l'article VertiBOT de Miguel Angel de Frutos. C'est donc lui qui s'exprime dans les propos de cet article jusqu'a la ligne qui en indique la fin.

Le vertibot

Même si Vertibot n'est pas un robot à part entière, les pratiques décrites ici peuvent être utiles à certaines applications robotiques. Il s'agit ici de piloter des moteurs électriques en réaction à des signaux de positionnement acquis par le système.

VertiBOT est surtout un projet personnel éducatif réalisé dans le but d'avoir une expérience pratique dans l'utilisation et la manipulation des filtres de Kalman et des paramètres d'un régulateur PID.

Brève introduction et analyse du problème

Cette construction est un "pendule inversé" ; c'est à dire un pendule dont le centre de gravité est au-dessus de son axe de rotation ou de pivotement.
Ce genre de système est intrinsèquement instable et doit être constamment équilibré par une action externe pour rester dans une position d'équilibre.

Ce résultat est obtenu en appliquant un couple à son axe de pivotement (système à un seul degré de liberté) dans le cadre d'une rétroaction mesuré par le système lui même. Le couple appliqué sur l'axe du pendule est lui même à l'origine de la perturbation du système.
L'exemple classique pour comprendre l'aspect physique de ce problème est d'essayer de maintenir en équilibre un manche à balai renversé sur le bout de votre doigt.

Le pendule inversé est aussi l'un des problèmes classiques de la dynamique ; il y a de nombreuses références sur les principes du contrôle / commande qui donnent de multiples pistes pour le résoudre (automatismes, régulation et régulateurs PID).

L'équation du mouvement d'un pendule simple inversé est très similaire à celle d'un pendule classique dans les conditions suivantes :

  • Ne pas tenir compte des restrictions de frottement ou de mouvement,
  • supposer que le corps de notre pendule est l'équivalent d'une tige rigide idéale avec la masse concentrée à sa fin,
  • considérer son axe de rotation comme étant fixe dans l'espace.

Note de traduction : pour facliter l'écriture le "thêta tréma" est remplacé par le Ö dans les textes qui suivent.

L'équation de ce pendule indique que : l'accélération angulaire Ö = (g/l)*sinus θ .
Ö = (g / l ) multiplié par sinus thêta

Où Ö est l'accélération angulaire du pendule, g est l'accélération de la pesanteur, l est la longueur du pendule et thêta est l'angle mesuré à partir de la position d'équilibre.

Il est facile de vérifier que le pendule accélère plus rapidement s'il est plus éloigné de sa position d'équilibre et que l'accélération est inversement proportionnelle à la longueur du pendule. On en déduit une importante spécification constructive : un pendule d'une grande hauteur (ce qui correspond à un "l" grand) tombe plus lentement que d'une faible.

Cette équation, bien que très utile dans une première approximation, ne nous donne pas assez d'informations pour tenter de modéliser la dynamique du contrôle de notre pendule.
Pour un développement plus complet du problème, il est nécessaire de passer à une modélisation de Lagrange. Le développement de ces équations peut être trouvé dans un livre ou une publication sur les systèmes modernes de contrôle, sous le titre "Advanced Control of Wheeled Inverted Pendulum Systems" [livre 1].

Profil du vertibot en équilibre vertical
Photographie du vertibot en position d'équilibre vertical.

Les actionneurs du VertiBOT sont deux moteurs à courant continu pilotés par une commande électronique. Ces moteurs génèrent le couple nécessaire aux roues, pour maintenir la structure d'un déplacement angulaire proche de θ degré, ce qui est notre mot d'ordre ou signal de référence (θref = 90°).

Si vous souhaitez maintenir un équilibre précaire il est très important de connaître l'inclinaison réelle de la structure d'une manière rapide et avec une bonne précision (signal de retour).

L'erreur (ε) est la différence entre le signal de référence (consigne) et le signal de retour (mesure = signal de retour).
Elle sert à calculer la valeur de commande qui aura pour conséquence de "corriger ou de s'opposer" à la perturbation.

Les valeurs physiques nécessaires sont donc mesurées par un ensemble gyroscope et accéléromètre.

Le gyroscope fournit une mesure de la vitesse angulaire (thêta tréma). En intégrant cette mesure, nous pouvons obtenir la valeur de l'angle de pivotement. Toutefois, cette opération va intégrer le bruit du système lui-même, accumulant en quelques itérations, une grande dérive.

L'accéléromètre mesure les accélérations à la fois statique et dynamique.
Afin de séparer les deux composantes, nous sommes obligés d'utiliser un filtre passe-bas (ramène la composante statique : gravité) et un filtre passe-haut (accélération dynamique).

Une fois séparées, une opération trigonométrique simple, nous permet de calculer la pente. Cependant, le passage à travers les filtres de ce type (valeurs moyennes) engendre un retard important dans la réponse rendant le système instable.

Nous avons donc un gyroscope avec une dérive de plus en plus importante dans le temps et un accéléromètre lent et bruyant comme intrants dans notre système. La solution est de "fusionner" (filtre) les deux lectures. Cela ouvre aussi un champ intéressant d'étude et d'expérimentation sur les différentes stratégies choisies à cet effet : méthode unique de capteur, filtre de Kalman, filtre complémentaire…

Une fois que nous connaissons le signal d'erreur, nous devons concevoir un contrôleur qui agit sur les actionneurs de telle sorte que, après quelques itérations, l'erreur soit minimisée. Une consultation rapide de la théorie du contrôle nous aide à trouver une variété de contrôleurs hautement sophistiquées. Dans cette première approche, nous avons choisi le célèbre régulateur PID.

Un régulateur PID de base a une entrée et une sortie. L'entrée est notre signal d'erreur généré comme évoqué dans le paragraphe précédent ; la sortie donnera le nombre de rotation par minute du moteur pour compenser la perturbation. Le nouvelle état du système est donné par l'ensemble des capteurs.

La sortie du régulateur PID est composée par la somme de trois composantes : une réponse proportionnelle à l'erreur, l'action intégrale qui tend à annuler l'erreur statique et l'action dérivée qui anticipe la réaction de notre système.

Le "calcul" des constantes appropriées Kp, Ki et Kd, peut être effectué par une méthode heuristique, dans laquelle une série d'approximations successives doit tendre à une solution stable pour le système. Cela a été une tâche difficile et fastidieuse avec laquelle je ne suis toujours pas entièrement satisfait. Pour faciliter le travail, j'ai ajouté trois potentiomètres qui permettent de modifier rapidement les valeurs des constantes de fonctionnement.

Le matériel

VertiBOT est un printbot ; sa structure a été construite en utilisant une imprimante 3D. Comme toujours, vous pouvez trouver les fichiers des pièces sur le site Thingiverse.
Détail des circuits électroniques du pendule

La structure est divisée en deux parties réunies par des vis. Ceci permet la configuration dans différentes hauteurs du pendule et d'observer les différentes réponses du système. La batterie est située dans la partie supérieure du corps. La partie inférieure contient les moteur-réducteur (MICROMETAL Pololu 50:1) et sert aussi de support pour l'électronique embarquée. Cette dernière doit être installée, avec les capteurs, aussi près que possible de l'axe de rotation du pendule.
L'électronique se compose du matériel listé en fin d'article.

Le schéma d'interconnexion

Schéma d'Interconnexion des modules électroniques du Vertibot

Logiciel de visualisation

Afin d'avoir un affichage graphique des différents signaux et les réponses de cette plate-forme il a été prévue une interface graphique ; la communication sans fil, nous permet de visualiser en temps réel les valeurs actuelles des deux constantes du pilote, les lectures des capteurs, le signal de référence et la sortie du système.
Copie d'écran de l'affichage graphique des données du PID
Cette application est basée sur un travail de Brett Beauregard.

Une petite vidéo montrant la plateforme VertiBOT essayant de rester en équilibre.

Conclusions et perspectives d'avenir

Les moteurs décrits ici n'ont pas une réponse assez rapide pour rendre la plate-forme stable après une perturbation trop importante. Elle semble être en mesure de rester proche de son point d'équilibre pour les petites oscillations.

Il a été utilisé deux ensembles de valeurs du PID : un lorsque nous sommes près du point de référence et un plus agressifs quand nous sommes loin du point d'équilibre. Quand vous maintenez le robot en position horizontale, la régulation est inefficace sur les moteurs. Cette position est aussi utilisée lors des essais et de la mise au point.

Pour le moment nous travaillons sur une version incorporant des moteurs plus rapides avec des codeurs sur les roues. De cette façon, nous complétons le signal de retour donné par les capteurs pour gagner en précisions.

Note de l'auteur : cette rubrique ne prétend pas être un tutoriel : elle est seulement un résumé d'activité de projet de construction. Vous pouvez réaliser ce montage avec d'autres éléments. N'hésitez pas à essayer de nouveaux composants, des différents codes ou algorithmes.

Une possible liste du matériel :

Composants et modules électroniques

  • 16MHz ATmega328 microcontrôleur (Arduino Nano),
  • 6DDL IMU: accéléromètre et gyroscope. ADXL345 / ITG3200 communication I2C (ou tout autre IMU),
  • un driver de puissance pour moteurs Pololu série Qik2sv1,
  • un modem Bluetooth pour la communication sans fil en temps réel,
  • trois potentiomètres pour le réglage PID,
  • deux boutons pour les différentes t âches de changement de l'algorithme et des compensations d'étalonnage,
  • un régulateur de tension (MCP1700 ou similaire),
  • un convertisseur de niveau logique (Sparkfun BOB-11978).

Eléments mécaniques

  • Pololu MICROMETAL Motors (50:1) (ou similaire),
  • roues 90 fois 10 mm de chez Pololu (ou similaire),
  • corps (cadre en bois ou des pièces 3D ou carte de circuit imprimé…),

Auteur : Miguel Angel de Frutos

Source : Le Vertibot de madebyfrutos

[ Fin de l'article publié par madebyfrutos ]

Discussions

La description des étapes du projet donne le cheminement utilisé par Miguel Angel pour aller vers une mise au point électronique, logiciel et mécanique de son Vertibot.
Il est intéressant maintenant de reprendre tous ces points et d'y apporter des précisions et suggestions.
je vous donne donc dans les lignes suivantes, des ressources techniques pour votre propre construction de ce robot équilibriste.

Un bref historique

Robot pendulaire inversé de Kazuo Yamafuji1986 : l'image ci-contre montre le premier robot pendulaire inversé sur deux-roues construit par Kazuo Yamafuji, professeur à l'Université de Electra-Communications de Tokyo, selon un article paru dans le Japan Times. Le robot peut simuler le comportement d'un pendule inversé. Il s'agit notamment d'une conception avec un essieu (muni de deux roues) et d'un chariot contenant le dispositif de stabilisation qui l'empêche de basculer.


Joe le pendule est un Robot pendulaire sur deux roues25 janvier 2000 : Le robot miniature Joe-le-Pendule accomplissait ses premières évolutions . Il est né d'une idée germée en 1996 au laboratoire d'Electronique Industrielle de l'EPFL. Pour parvenir à son équilibre, un régulateur électronique stabilise la plate-forme en exerçant un couple de redressement opposé au sens de basculement.
Vertibot est largement inspiré de cette technologie.


Robot pendulaire rezero monté sur une bouleAvril 2010 : Le robot Rezero fait son apparition public. Il est monté sur une grosse boule et se tient en équilibre en mesurant constament son inclinaison avec un détecteur (160 fois par seconde). Ensuite il se contrebalance et évite de basculer en agissant sur ses moteurs. Si quelque chose ne marche pas dans le processus, Rezero tombe immédiatement par-terre.
Pour se déplacer et se tenir en équilibre, Rezero doit faire tourner sa boule. La boule est entraînée par trois roues spéciales qui permettent à Rezero de se déplacer dans n'importe quelle direction et se déplace également sur son axe en même temps. A cause de son instabillité, Rezero est toujours en mouvement ; et c'est précisement cette instabilité qui permet au robot de se déplacer de manière très dynamique.

Le Vertibot se situe donc dans la mouvance des projets de robots pendulaires. Nous pouvons maintenant regarder de plus près la réalisation de Miguel Angel de Frutos.

A propos des modules électroniques

Composants de la régulation 3,3 VoltsL'alimentation se fait en 5 Volts ; un régulateur de tension intégré permet d'obtenir les 3,3 Volts nécessaires pour alimenter le circuit de l'IMU. Comme il n'alimente que ce module, une version en cms (composant de surface) est aussi possible.
Remarque : la carte IMU consomme un peu plus que 6,5 mA. Elle pourrai être alimentée directement par le 3,3 Volts de l'Aduino.

La source principale d'énergie est une batterie [ LIPO 2S 0,8 A ]. Elle est fixée au sommet du pendule avec une carte de régulation UBEC qui convertit le 7,4 V de la batterie vers du 5 V ou 6 V (selectionnable). Cet esemble constitue la masse du pendule.


Circuit de l'IMUL'IMU est un module qui embarque un gyroscope et un accéléromètre à la fois. Avec cette carte, vous obtenez six degrés de liberté. Les capteurs communiquent par un Bus I2C et une broche de sortie INT (Interruption) est disponible sur chaque capteur. Elle permettent de selectionner le capteur dont nous désirons connaître la dernière grandeur physique mesurée. L'alimentation se fait en 3,3 Volts, d'ou la nécessité d'avoir un convertisseur de niveau.


Une autre remarque concernant l'IMU. Cette carte est une association de deux capteurs. Nous obtenons les valeurs physiques les une après les autes, mais pas en même temps.
Une autre méthode pour obtenir une centrale inertielle rapide, serai d'avoir également la partie traitement embarquée sur le module (filtre de Kalman). Ainsi, l'Arduino disposerai des valeurs physiques prête à l'emplois pour la commande du PID et gagnerai en temps de réponse du système en général.

Circuit du convertisseur de niveau logiqueLe convertisseur de niveaux logiques (LLC) est un module dont seul les canaux tx sont utilisés. Nous pouvons aussi les c âbler nous même pour gagner de la place et du poids.Voir le schéma ci-dessous.
Schéma du convertisseur de niveau logique

Pour les puristes, nous pouvons utiliser un convertisseur de niveau de bus I2C du type TCA9517A ; il est moins encombrant et spécialisé pour l'I2C.
Brochage du circuit intégré TCA9517A

Le modem Bluetooth est un cicuit électronique disposant de quatre broches ; il est optionnel pour le fonctionnement et sert pour la supervision des donnée du PID en temps réel pendant la phase de calibrage. La réception des données se fait sur votre ordinateur avec une clée USB bluetooth.
Voir pour informations : http://www.mitchellpage.com.au/research/?p=263. Sparkfun ne distribue plus les modules mais les garde en catalogue pour archives.

Circuit de commande des moteursLa carte de commande qui gère les moteurs est déjà très compacte ; il sera donc difficile de faire mieux sauf en trouvant un modèle plus petit pour les mêmes courants. Le modèle présenté est une Pololu (avec contrôleur), mais Sparkfun propose aussi une version avec le même driver (TB6612FNG de Toshiba) ; la carte est de dimensions inférieures mais il faut faire plus de programmation au niveau des données échangées avec l'Arduino. Quelque soit la carte employée, elle à besoin de deux alimentions. Une dite de puissance (de 4,5 V à 13,5 V max) pour alimenter l'étage de puissance intégré qui véhicule le courant des sorties moteurs et une alimentation pour la logique. Cette dernière peut être comprise entre 2,7 V et 5 V.


Les pièces mécaniques

Les moteurs-réducteurs sont des modèles miniatures qui mesurent 24 mm de longueur et 12 mm de côté maximum, avec un axe de sortie de 9 mm (en plus de la longueur) ; ils consomment 360 mA en charge à une tension d'alimentation de 6 Volts (260 tours/min et 0.07 Nm de couple). Plusieurs marques distribuent ce genre d'actionneur.

Les roues utilisées par Miguel sont des Pololu en diamètre 90 mm. Une fois encore, chacun est libre d'adapter le modèle de son choix. Il vaut mieux choisir un modèle léger ; une roue évidée (à gros rayons) sera plus légère qu'une massive. Pour les bricoleurs, un palonnier de servo-moteur fixé sur un gros bouchon de bidon ou de bouteille en plastique feront des roues peu couteuses pour votre prototype.

Comme indiqué dans l'article, le corps du robot est une réalisation 3D d'une imprimante. Une découpe dans un matériaux rigide et léger conviendra tout aussi bien. La fixation sur les moteurs-réducteurs se fera à l'aide de colliers rilsan, d'un collier de plomberie ou d'une attache du même genre.
Tous les codes Arduino et les fichiers de fabrication sont disponibles à partir de
https://github.com/astromaf/VertiBOT
et les fichiers stl dans Thigiverse :
http://www.thingiverse.com/thing:83091/#files

Equation de Lagrange et filtre de Kalman

Le livre Advanced Control of Wheeled Inverted Pendulum Systems" de Ling Zhijun, Yuhang Yang et Liping Fan (auteurs) aborde tous les aspects historiques, pratiques et théoriques du controle/commande des dispositifs de type "pendule inversé" montés sur roues.

Les PID et autres logiciels

Pour tout savoir sur les PID et le logiciel de visualisation (Front End) avec le travail de Brett Beauregard : http://goo.gl/QKANE.
Librairie PID Arduino : http://playground.arduino.cc/Code/PIDLibrary.

Le logiciel de visualisation

Il faudra équipé le robot d'un module bluetooth. Le logiciel de visualisation du PID voir : http://processing.org/download/.

Acces aux guides