Construire un robot équilibriste avec un MPU6050 et un PID
Un robot à deux roues qui se lève seul, reste debout quand on le pousse, et tient sa place au sol au lieu de dériver.
Ce que vous construisez
Un robot qui tient sur deux roues sans rien d’autre que de l’arithmétique pour le tenir.
Le montage mécanique est vraiment simple — deux moteurs, un cadre, un capteur, une batterie. Ce qui rend ce projet valable est que le problème de commande n’a pas d’échec doux. Un suiveur avec des gains médiocres suit encore la ligne, mal. Un robot équilibriste avec des gains médiocres est couché au sol. Cette netteté en fait la meilleure façon de vraiment comprendre le PID.
À la fin vous aurez un robot qui se lève, résiste à une poussée, et reste à peu près où vous l’avez mis.
Pourquoi c’est dur
Toute la masse du robot est au-dessus de l’axe. Cela en fait un pendule inversé : la verticale est un équilibre comme un crayon en équilibre sur sa pointe — réel en principe, sans espoir sans correction constante. Inclinez-le légèrement et la gravité produit un couple qui l’incline davantage, plus vite.
La seule défense du robot est qu’il peut déplacer sa propre base. Conduire les roues en avant repousse l’axe sous le centre de masse et redresse le corps. D’où la règle contre-intuitive qui gouverne tout le projet : pour cesser de tomber en avant, roulez en avant.
Deux conséquences suivent, et elles façonnent tout ci-dessous :
- Vous ne pouvez pas commander la position directement. Commander les moteurs depuis l’erreur de position accélère la base hors du dessous de la masse, et le robot tombe dans la direction opposée à celle demandée. La position doit être commandée via l’inclinaison.
- Il y a une limite dure de récupération, autour de 35°. Au-delà, l’accélération requise dépasse ce que les roues peuvent fournir avant que le corps touche le sol, et aucun gain n’aide.
Nomenclature
| Pièce | Qté | Coût approx. | Notes |
|---|---|---|---|
| Arduino Uno ou Nano | 1 | $5 | La boucle interne veut 100–200 Hz, ce qu’un Uno tient confortablement |
| MPU-6050 | 1 | $2 | Monté rigidement et de niveau, près de l’axe des roues |
| Moteurs à codeurs N20 | 2 | $16 | Réducteur métallique, non négociable. Voir ci-dessous |
| TB6612FNG | 1 | $3 | La chute d’environ 2 V du L298N est exactement là où vivent les corrections fines |
| Châssis 2 roues motrices | 1 | $10 | Haut et étroit. Montez la batterie en haut — c’est contre-intuitif |
| Pack batterie | 1 | $10 | 2×18650. C’est aussi la masse utile |
Total : environ $45–60.
Trois de ces choix sont structurels, et rater l’un rend le robot inréglable plutôt que simplement moins bon.
Moteurs à réducteur métallique. Un robot équilibriste inverse le sens des centaines de fois par seconde par petits incréments. Le jeu est facturé une fois à chaque inversion, donc la zone morte d’un réducteur plastique atterrit exactement où la correction doit agir. Le résultat est un robot qui oscille autour de la verticale et ne se stabilise jamais, quel que soit le soin du réglage — et cela se lit de façon convaincante comme un problème de réglage.
Un pilote MOSFET. Le L298N brûle environ 2 V avant que le moteur voie quoi que ce soit, ce qui signifie que les petites commandes de correction tombent sous la tension où le moteur bouge. Encore une zone morte précisément là où vivent les corrections fines.
Batterie montée en haut. C’est celui qui surprend. Un robot plus grand avec la masse en haut tombe plus lentement — la période du pendule va avec la racine carrée de la longueur — ce qui donne à la boucle plus de temps pour réagir. Un robot équilibriste bas et trapu est plus dur, pas plus facile.
Ordre de montage
Faites-les dans l’ordre. Chaque étape est vérifiable seule, ce qui compte énormément sur un projet où l’état final est binaire.
1 — Obtenez un angle d’inclinaison fiable. Câblez le MPU6050 et suivez lire l’inclinaison depuis un MPU6050. Ne passez pas à la suite tant que l’angle ne lit pas près de zéro à la verticale, ne bouge pas dans le bon sens quand vous l’inclinez, et ne tient pas immobile quand le robot est immobile. Tout l’aval est bâti sur ce nombre.
2 — Faites survivre l’angle au mouvement. Un accéléromètre seul est inutilisable sur un robot mobile et un gyro seul dérive en secondes. Le filtre complémentaire les fusionne en une ligne. Testez-le en secouant le robot sans le tourner — l’angle devrait à peine bouger.
3 — Réglez la boucle interne en simulateur. Avant que tout matériel puisse tomber, utilisez le simulateur d’équilibre pour construire l’intuition de ce que fait chaque gain. Mettez le gain dérivé à zéro sur un robot qui tient et regardez l’oscillation croître jusqu’à tomber ; cet échec coûte bien moins cher là que sur votre bureau.
4 — Faites-le tenir debout. Écrivez la boucle interne depuis commande d’équilibre PID en cascade, avec la boucle externe désactivée. Le succès ici est un robot qui reste debout et a le droit d’errer. N’essayez pas encore de corriger l’errance.
5 — Ajoutez codeurs et boucle externe. Avec le comptage en quadrature donnant la vraie position des roues, activez la boucle externe pour que le robot tienne une place. Démarrez son gain bien plus bas que raisonnable — son effet est indirect et il est facile de faire se battre les deux boucles.
Notes matérielles vraiment importantes
Montez la batterie en haut. C’est contre-intuitif et c’est le choix mécanique le plus utile du projet. Monter le centre de masse augmente la période du pendule, donc le robot tombe plus lentement et la boucle a plus d’occasions de le rattraper. Un robot court et lourd du bas est bien plus dur à équilibrer qu’un grand.
Utilisez des réducteurs métal. Un robot équilibriste inverse le sens des centaines de fois par seconde. Les moteurs à réducteur plastique ont assez de jeu pour que chaque inversion gaspille les premiers degrés à ne rien faire, ce que la boucle ne peut pas régler. Les moteurs N20 à codeurs sont la réponse habituelle.
Utilisez un TB6612FNG, pas un L298N. Le TB6612FNG chute bien moins de tension sur son étage de sortie. Sur un L298N, les petites commandes de correction tombent sous la tension où le moteur bouge — créant une zone morte exactement là où vivent les corrections fines.
Donnez aux moteurs leur propre alimentation. Un pack batterie qui s’affaisse au courant de calage fera une microcoupure du microcontrôleur en pleine correction. Le robot tombe alors pour des raisons sans rapport avec votre boucle, ce qui est misérable à déboguer.
Vérifiez en avançant
| Vérification | Ce que cela prouve |
|---|---|
| L’angle lit ~0° tenu vertical à la main | Plus de trim de montage dans la mesure |
| Secouer sans tourner bouge à peine l’angle | Le filtre fait confiance au gyro pendant l’accélération |
| Les roues vont en avant quand incliné en avant | Le signe de boucle interne est bon |
| Le robot résiste à une poussée et se stabilise sans oscillation croissante | Le gain dérivé fait son travail |
| Le robot cesse de dériver une fois la boucle externe active | Codeurs et boucle externe sont bien câblés |
À quoi ressemble un bon résultat
| Mesure | À peine en équilibre | Bien réglé |
|---|---|---|
| Cadence de boucle interne (inclinaison) | 100 Hz | 200–500 Hz |
| Cadence de boucle externe (position) | 20 Hz | 20–50 Hz — plusieurs fois plus lente que l’interne |
| Oscillation d’inclinaison au repos | ±3–5° | Moins de ±1° |
| Dérive depuis le départ en 60 s | 1–2 m | Moins de 30 cm |
| Récupère d’une poussée de | Une douce pichenette | Une franche bourrade |
| Constante du filtre complémentaire | 0,98 | 0,98–0,995, choisie plutôt que copiée |
| Autonomie avant de s’éloigner | Secondes | Indéfinie |
Le ratio de cadences est le nombre que la plupart des premiers montages ratent. La boucle interne tient l’inclinaison ; la boucle externe demande une inclinaison pour voyager. Si la boucle externe tourne à peu près à la cadence interne, elle poursuit une cible que la boucle interne n’a pas encore atteinte, et les deux se battent. Cinq à dix fois de séparation est la règle de travail.
La ligne « dérive » explique à quoi servent les codeurs, et cela mérite d’être clair : un robot avec seule boucle d’inclinaison tiendra magnifiquement et errera à travers la pièce, car rien ne lui dit où il est. Il est debout et perdu. Ajouter la boucle externe de position le transforme de démonstration en robot.
Conventions de signe : la chose qui gaspille une soirée
Quatre signes doivent concorder, et il n’y a aucun moyen de les raisonner — il faut vérifier chacun sur l’établi, avec le robot tenu en main :
| Vérification | Tenez le robot et… | Il devrait… |
|---|---|---|
| Signe centrale | Inclinez-le en avant | Signaler une inclinaison positive (ou systématiquement négative — choisissez-en une) |
| Signe moteur | Commandez une sortie positive | Rouler les roues en avant |
| Signe boucle interne | Inclinez en avant avec la boucle active | Commander les roues en avant, pour rattraper la chute |
| Signe boucle externe | Poussez-le en avant depuis l’arrêt | S’incliner en arrière pour revenir |
Inversez le troisième et le robot accélère sa propre chute, fort, dans la direction où il allait déjà. C’est sans équivoque, et cela vaut d’être testé roues décollées.
Quand ça ne marche pas
Presque chaque échec est l’une des cinq choses, et elles se distinguent assez pour les reconnaître :
- S’écrase aussitôt à la mise sous tension — le signe de boucle interne est inversé.
- Oscillation croissante jusqu’à tomber — gain dérivé trop faible, ou D pris d’un angle différencié au lieu de la vitesse gyro.
- Bourdonne à la verticale — gain proportionnel trop élevé, ou boucle trop lente pour ces gains.
- S’affaisse au sol sans lutter — gain proportionnel trop faible, ou moteurs saturés.
- Tient mais s’en va — trim de montage, avec trop peu d’intégrale pour l’absorber.
Le tableau des modes de panne détaille chacun, et chacun peut être reproduit délibérément dans le simulateur — le moyen le plus rapide d’apprendre à les reconnaître.
Parcours du projet
Le parcours de construction
Suivez l'arbre technologique, des pièces jusqu'à un robot qui fonctionne. Chaque nœud se débloque quand ses prérequis sont terminés, et votre progression est enregistrée sur cet appareil.
0 / 16 terminés
Composants
- ContrôleurArduino UnoLa carte 8 bits indulgente par laquelle la plupart découvrent la robotique.
- CapteurMPU-6050 IMUUn capteur de mouvement à six axes — comment un robot sent sa propre inclinaison, rotation et accélération.
- PiloteTB6612FNG Motor DriverUn pont en H MOSFET qui garde les volts réellement payés.
- ActionneurN20 Encoder GearmotorUn micromoteur à réducteur métal avec codeur à l'arrière : le robot sait jusqu'où il est vraiment allé.
- Châssis2WD Robot ChassisLe plateau sur lequel se fixent deux moteurs, une roulette libre et votre électronique.
- AlimentationRobot Battery & Power PackLa différence entre un robot qui roule et un qui redémarre sans cesse.
Tutoriels de ce parcours
- Débutant · 45 min de lectureLire l'angle d'inclinaison d'un accéléromètre et gyro MPU6050Transformez les comptes bruts du MPU6050 en angle d'inclinaison en degrés, et apprenez pourquoi aucun capteur ne marche seul.
- Intermédiaire · 1 h de lectureFiltre complémentaire : fusionner accéléromètre et gyroscopeFusionnez un accéléromètre bruité avec un gyroscope qui dérive en un seul angle d'inclinaison fiable, en une ligne de code.
- Avancé · 2 h de lectureCommande PID en cascade pour robot équilibristeDeux boucles PID imbriquées : l'une tient l'angle d'inclinaison, l'autre demande une inclinaison pour déplacer le robot.
- Débutant · 18 min de lectureComment régler un contrôleur PID : guide pratiqueUn ordre concret pour régler les gains P, I et D sans tâtonner — et comment essayer chaque étape en direct.
- Débutant · 17 min de lectureLire des encodeurs en quadrature pour distance et vitesseTransformez les impulsions d'un encodeur en quadrature en mesures fiables de sens, distance et vitesse de roue.
Entraînez-vous avant de câbler
Réglez-le dans le simulateur interactif
Le parcours de construction passe par un labo dans le navigateur. Obtenez ici le bon comportement, puis reportez vos réglages sur le vrai robot.
Questions fréquentes
À quel point un robot équilibriste est-il dur comme premier projet ?
C'est un mauvais premier projet et un excellent troisième. Rien du câblage n'est difficile, mais le système est instable, ce qui signifie aucun crédit partiel — le robot tient ou non, et un signe faux ressemble à de mauvais gains jusqu'à ce qu'on sache ce qu'on regarde. Construisez d'abord un suiveur de ligne pour que réglage PID et pilotes moteurs soient déjà familiers, alors ceci devient un problème ciblé sur une boucle plutôt que cinq inconnues à la fois.
Pourquoi mon robot équilibriste vibre-t-il au lieu de tenir immobile ?
Généralement un gain proportionnel trop élevé pour votre cadence de boucle, ou du jeu de réducteur. Essayez d'abord de baisser Kp. Si la vibration persiste à faible gain, regardez les roues au moment où elles s'inversent : s'il y a une zone morte visible avant qu'elles bougent, le réducteur est le problème et un moteur à engrenages métal corrigera ce qu'aucun réglage ne peut.
Faut-il vraiment des codeurs ?
Pas pour tenir debout. La boucle interne n'a besoin que d'un angle d'inclinaison, donc un robot sans codeurs tiendra parfaitement — il dérivera simplement, car rien ne lui dit où il est. Les codeurs sont ce qu'exige la boucle externe pour tenir la position. Construisez-le d'abord sans eux si vous voulez, faites-le tenir, puis ajoutez-les.
À quelle vitesse la boucle de commande doit-elle tourner ?
200 Hz est un minimum sensé pour la boucle interne et plus vite vaut mieux. Le temps de chute naturel du robot fixe l'échéance : un petit robot passe de la verticale à irrécupérable en bien moins d'une seconde, donc une boucle à 50 Hz a très peu d'occasions d'intervenir. Exécutez-la depuis un timer matériel plutôt que delay(), car un timing régulier compte plus pour le terme dérivé que la cadence exacte.
Pourquoi tient-il mais traverse-t-il lentement la pièce ?
Trim de montage de la centrale. Si le capteur est à un degré de la verticale, la boucle tient ce mauvais angle, et tenir une inclinaison constante signifie une accélération constante. Mesurez l'offset avec le robot vraiment vertical à la main, soustrayez-le en constante, et laissez le terme intégral absorber le reste. Vous pouvez reproduire cela exactement avec le curseur de trim en simulateur.