Robot Gyropode - Self balancing robot

image principale Robot Gyropode - Self balancing robot

Difficulté:

J’ai toujours été fasciné par ces robots capables de se déplacer en équilibre sur deux roues. On trouve sur le net énormément d’infos, de tutos et autres explications sur les robots gyropode mais j’ai eu du mal à trouver toutes les explications dont j’avais besoin sur un seul site. Je vais donc décrire brièvement les différentes étapes de la construction de mon robot gyropode et partager le code. N’hésitez pas à laisser un commentaire si vous avez besoin de plus d’infos ou pour me donner des conseils d’améliorations.


Pour la petite histoire, j’ai nommé mon robot Lu6L3 en l’honneur de ma fille qui a fait ses premiers pas au même moment où je suis parvenu à faire tenir en équilibre mon robot :)

Matériel :

Budget : 25€

Etape 1 : Le robot en action

Voici mon robot Lu6l3 en fonctionnement :)

Etape 2 : Explications générales et schéma

Le fonctionnement repose sur des principes assez simples. Un capteur mesure l’angle d’inclinaison par rapport à la position d’équilibre et corrige la position en actionnant les moteurs dans la direction de la chute. 

Un Arduino nano est le coeur du montage. On y relie le capteur MPU6050, j’ai choisi de le placer sous le robot pour être au plus près de l’axe de rotation. Un L293D sert de contrôleur pour les 2 motoréducteurs. Une seule alimentation de 9V pour le montage est nécessaire. Coté mécanique, mon robot est réparti sur trois étage. Sur le premier sont fixés les motoréducteurs et le MPU6050. Sur le deuxième étage, se trouve la carte de contrôle constituée d’un Arduino nano et d’un L293d. L’alimentation 9V se trouve au troisième étage où j’ai également ajouté un interrupteur. Ces trois étages sont assemblés au moyen de tiges filetées et de tubes en aluminium.

Les explications plus en détail suivent.

Etape 3 : Le code

Etape 4 : Le capteur MPU6050

Le MPU6050 est une petite carte électronique équipée d’un gyroscope et d’un accéléromètre. 

  • Le gyroscope mesure ce qu’on appelle la vitesse angulaire qui correspond à la vitesse de changement de l’angle. Selon la documentation du MPU 6050, en divisant les valeurs brutes par 131, on obtient une valeur en degré / seconde. En mesurant à interval régulier, il est facile de calculer l’angle d’inclinaison. Cette mesure n’est pas parfaite et la mesure par interval conduit à des déviations. Sur une courte durée, cette valeur est fiable mais sur des durées plus longues, la déviation devient trop importante.

  • L’accéléromètre mesure la force de la gravité, avec cette valeur et quelques formules de trigonométrie, on peut calculer l’angle d’inclinaison. L’accéléromètre ne calcule pas sur un interval mais à l’instant donné. Il n’y a donc pas de déviation sur la durée. Par contre, d’autres forces sont mesurées ce qui conduit à une erreur de mesure.


La combinaison des deux angles d’inclinaisons obtenus, l’un par le gyroscope et l’autre par l’accéléromètre est donc nécessaires pour réduire au maximum les erreurs de mesures.


J’ai utilisé le code expliqué sur le site https://playground.arduino.cc/Main/MPU-6050 pour obtenir les différentes valeurs du gyroscope et de l’accéléromètre.

Etape 5 : Le filtre complémentaire

Pour combiner de manière optimale les mesures du gyroscope et de l’accéléromètre, il y a plusieurs possibilité mathématiques. J’ai choisi la plus facile, le filtre complémentaire. La formule est la suivante:

Angle filtré = α × (Gyroscope Angle) + (1 − α) × (Accelerometer Angle)     

où α est le facteur de correction qui dépend de l’interval de mesure, ce paramètre est généralement proche 0.98

Etape 6 : Le PID

Maintenant que l’angle d’inclinaison est connu, il faut envoyer un signal au moteur pour corriger l’inclinaison. Ce signal sera d’intensité différente en fonction de l’inclinaison par rapport à la position d’équilibre. Plus l’écart est important, plus la vitesse de rotation des moteurs sera élevée et inversement. Pour ce faire un modèle mathématique est utilisé: le PID pour proportionnelle, Intégrale et Dérivée. Une très bonne explication du régulateur PID se trouve ici: http://www.ferdinandpiette.com/blog/2011/08/implementer-un-pid-sans-faire-de-calculs/

Les trois constante que sont Kp, Ki et Kd doivent être ajustée pour optimiser l’équilibre. Le bon réglages de ces constantes peut faire la différences entre un échec et une réussite du projet.

Etape 7 : Améliorations

Les différentes pistes d’améliorations que j’envisage sont:

  • Descendre le centre de gravité en plaçant la pile un étage plus bas. Ceci devrait réduire la force à appliquer pour contrer les oscillations.

  • La vitesse de rotation des moteurs me semble être un paramètre critique, le robot peut être optimisé en choisissant les bon moteurs.

  • La prochaine étape est de faire se déplacer le robot et d’y ajouter une télécommande.

Etape 8 :

Sources :

http://www.ferdinandpiette.com/blog/2011/08/implementer-un-pid-sans-faire-de-calculs/

https://playground.arduino.cc/Main/MPU-6050

https://courses.ece.cornell.edu/ece5990/ECE5990_Fall15_FinalProjects/Yuzhuo_Sun/ECE5990_project_demo/design.html


Bonjour,

Je travaille sur un projet similaire. Ce tuto va accélérer les choses. Est-ce que vous avez trouvé pour le déplacement ? Je suis parti sur une interface bluetooth de mon côté.

Bonjour,

Je n'ai pas poursuivi le développement de ce projet. Par contre, je travaille en ce moment sur un autre robot pour lequel je prévois, tout comme vous, l'utilisation d'une commande Bluetooth. J'ai choisi un module HC-06 comme récepteur et une application pour smartphone comme télécommande. 

Bonne continuation dans votre projet :) 

Merci pour ce partage ! Pas evident de trouver des projets de Balancing Robot en francais :/ et que j'arrive a réalisé avec mes maigres compétences ... je vais tenter le votre ! Mais que je dois adapter avec des A4988 ...

A quoi sert la led ?

Bonjour, 

La led sert uniquement comme témoin lumineux pour indiquer que l'intérupteur est allumé. J'aurais pu me passer de celle-ci étant donné que l'Arduino nano en est déjà équipé.

Bien à vous

Ces tutoriels devraient vous plaire

vignette Connecter un  écran LCD en I2C
Connecter un écran LCD en I2C
vignette Arduino Uno - Capteur d'humidité au sol.
Arduino Uno - Capteur d'humidité au sol.
vignette L’imprimante 3D pour 60€: EWaste
L’imprimante 3D pour 60€: EWaste

Découvrez tous les tutoriels partagés sur Oui Are Makers

Powered by Oui Are Makers