Selbstbalancierender Roboter: MPU6050 und PID
Ein zweirädriger Roboter, der sich selbst aufrichtet, bei Schubsen aufrecht bleibt und seine Position auf dem Boden hält, statt wegzudriften.
Was du baust
Einen Roboter, der auf zwei Rädern steht, ohne dass ihn etwas hält außer Arithmetik.
Der mechanische Aufbau ist wirklich simpel – zwei Motoren, ein Rahmen, ein Sensor, ein Akku. Was dieses Projekt lohnenswert macht: Das Regelproblem kennt kein weiches Versagen. Ein Linienfolger mit mittelmäßigen Verstärkungen folgt der Linie noch, schlecht. Ein Balancierroboter mit mittelmäßigen Verstärkungen liegt auf dem Boden. Diese Schärfe macht ihn zum bestmöglichen Weg, PID wirklich zu verstehen.
Am Ende hast du einen Roboter, der aufsteht, einem Schubs widersteht und grob dort bleibt, wo du ihn hinstelltest.
Warum es schwer ist
Die gesamte Masse des Roboters sitzt über der Achse. Das macht ihn zu einem invertierten Pendel: Aufrecht ist ein Gleichgewicht, wie ein Bleistift auf seiner Spitze ein Gleichgewicht ist – im Prinzip real, ohne ständige Korrektur hoffnungslos. Kippt er leicht, erzeugt die Schwerkraft ein Drehmoment, das ihn weiter kippt, immer schneller.
Die einzige Verteidigung des Roboters ist, seine eigene Basis zu bewegen. Die Räder vorwärts zu treiben schiebt die Achse unter den Schwerpunkt zurück und dreht den Körper wieder aufrecht. Daraus folgt die kontraintuitive Regel, die das ganze Projekt beherrscht: Um nicht vorwärts zu fallen, fahre vorwärts.
Zwei Folgen ergeben sich, und sie prägen alles unten:
- Du kannst die Position nicht direkt regeln. Die Motoren aus Positionsfehler zu treiben beschleunigt die Basis unter der Masse weg, und der Roboter fällt entgegengesetzt zur angeforderten Richtung. Position muss durch Neigung geregelt werden.
- Es gibt eine harte Erholungsgrenze, um 35°. Dahinter übersteigt die nötige Beschleunigung, was die Räder liefern können, bevor der Körper den Boden erreicht – und keine Verstärkung hilft.
Stückliste
| Bauteil | Menge | Ca. Kosten | Hinweise |
|---|---|---|---|
| Arduino Uno oder Nano | 1 | $5 | Die innere Schleife will 100–200 Hz, was ein Uno bequem schafft |
| MPU-6050 | 1 | $2 | Starr und waagerecht montiert, nah an der Radachse |
| N20-Encodermotoren | 2 | $16 | Metallgetriebe, nicht verhandelbar. Siehe unten |
| TB6612FNG | 1 | $3 | Die ~2 V Drop des L298N sitzen genau dort, wo die Feinkorrekturen leben |
| 2WD-Chassis | 1 | $10 | Hoch und schmal. Akku hoch montieren – das ist kontraintuitiv |
| Akkupack | 1 | $10 | 2×18650. Er ist auch die Nutzmasse |
Gesamt: ca. $45–60.
Drei dieser Wahlen sind tragend – bei einer falschen wird der Roboter unabstimmbar statt bloß schlechter.
Motoren mit Metallgetriebe. Ein Balancierroboter kehrt Hunderte Male pro Sekunde in kleinen Schritten die Richtung um. Spiel wird bei jeder Umkehr einmal kassiert – die Totzone eines Kunststoffgetriebes landet also genau dort, wo die Korrektur wirken muss. Ergebnis ist ein Roboter, der um vertikal pendelt und nie zur Ruhe kommt, egal wie sorgfältig die Verstärkungen abgestimmt sind – und es liest sich überzeugend als Abstimmungsproblem.
Ein MOSFET-Treiber. Der L298N verbrennt rund 2 V, bevor der Motor etwas sieht – kleine Stellbefehle fallen also unter die Spannung, bei der sich der Motor überhaupt bewegt. Wieder eine Totzone genau dort, wo die Feinkorrekturen leben.
Akku hoch montiert. Das überrascht. Ein höherer Roboter mit Masse oben fällt langsamer – die Pendelperiode geht mit der Wurzel der Länge –, was dem Regelkreis mehr Zeit zum Reagieren gibt. Ein niedriger, gedrungener Balancierroboter ist schwerer, nicht leichter.
Baureihenfolge
In dieser Reihenfolge vorgehen. Jeder Schritt ist für sich prüfbar – was bei einem Projekt zählt, dessen Endzustand binär ist.
1 – Einen vertrauenswürdigen Neigewinkel besorgen. MPU6050 verdrahten und Neigung aus einem MPU6050 lesen folgen. Erst weitergehen, wenn der Winkel aufrecht nahe null liest, sich beim Kippen richtig bewegt und stillhält, wenn der Roboter stillhält. Alles Weitere baut auf dieser Zahl auf.
2 – Den Winkel bewegungsfest machen. Ein Beschleunigungsmesser allein ist auf einem fahrenden Roboter unbrauchbar, ein Gyro allein driftet in Sekunden. Der Komplementärfilter fusioniert beide in einer Zeile. Teste ihn, indem du den Roboter körperlich schüttelst, ohne ihn zu drehen – der Winkel sollte sich kaum bewegen.
3 – Innere Schleife im Simulator abstimmen. Bevor Hardware umfallen kann, mit dem Balance-Simulator Intuition dafür aufbauen, was jede Verstärkung tut. Differentialverstärkung an einem gerade balancierenden Roboter auf null setzen und zusehen, wie die Schwingung wächst, bis er liegt; dieser Fehler ist dort weit billiger zu sehen als auf deinem Schreibtisch.
4 – Zum Stehen bringen. Innere Schleife aus kaskadierter PID-Balanceregelung schreiben, äußere Schleife abgeschaltet. Erfolg ist hier ein Roboter, der aufrecht bleibt und wandern darf. Das Wandern noch nicht zu reparieren versuchen.
5 – Encoder und äußere Schleife hinzufügen. Mit Quadraturzählung als echter Radposition die äußere Schleife einschalten, sodass der Roboter einen Punkt hält. Ihre Verstärkung weit niedriger starten, als sich vernünftig anfühlt – ihre Wirkung ist indirekt, und leicht kämpfen beide Schleifen gegeneinander.
Hardware-Notizen, die wirklich zählen
Akku hoch montieren. Das ist kontraintuitiv und die nützlichste mechanische Wahl im Projekt. Den Schwerpunkt zu heben verlängert die Pendelperiode – der Roboter fällt langsamer, und die Schleife bekommt mehr Fangchancen. Ein kurzer, kopflastiger Roboter balanciert weit schwerer als ein hoher.
Metallgetriebe nutzen. Ein Balancierroboter kehrt Hunderte Male pro Sekunde die Richtung um. Kunststoffgetriebemotoren haben genug Spiel, dass jede Umkehr die ersten paar Grad wirkungslos verpufft – was die Schleife nicht wegstimmen kann. N20-Encodermotoren sind die übliche Antwort.
Einen TB6612FNG nehmen, keinen L298N. Der TB6612FNG verliert weit weniger Spannung über seiner Endstufe. Am L298N fallen kleine Stellbefehle unter die Spannung, bei der sich der Motor überhaupt bewegt – eine Totzone genau dort, wo die Feinkorrekturen leben.
Den Motoren eigene Versorgung geben. Ein Akkupack, der unter Blockierstrom einbricht, setzt den Mikrocontroller mitten in der Korrektur zurück. Der Roboter fällt dann aus Gründen, die nichts mit deinem Regelkreis zu tun haben – elend zu debuggen.
Schrittweise prüfen
| Prüfung | Was sie beweist |
|---|---|
| Winkel liest ~0°, von Hand aufrecht gehalten | Kein Montagetrimm mehr in der Messung |
| Schütteln ohne Drehen bewegt den Winkel kaum | Der Filter vertraut bei Beschleunigung dem Gyro |
| Räder treiben vorwärts, wenn vorwärts gekippt | Das Vorzeichen der inneren Schleife stimmt |
| Roboter widersteht Schubs und beruhigt sich ohne aufklingendes Pendeln | Differentialverstärkung tut ihren Job |
| Roboter hört auf zu driften, sobald die äußere Schleife an ist | Encoder und äußere Schleife sind richtig verdrahtet |
Wie gut aussieht
| Messung | Kaum balancierend | Gut abgestimmt |
|---|---|---|
| Innere (Neigungs-)Schleifenrate | 100 Hz | 200–500 Hz |
| Äußere (Positions-)Schleifenrate | 20 Hz | 20–50 Hz – mehrfach langsamer als die innere |
| Neigungspendeln in Ruhe | ±3–5° | Unter ±1° |
| Drift vom Startpunkt in 60 s | 1–2 m | Unter 30 cm |
| Erholt sich von Schubs | Sanfter Stups | Kräftiger Schubs |
| Komplementärfilter-Konstante | 0,98 | 0,98–0,995, gewählt statt kopiert |
| Laufzeit bis zum Wegwandern | Sekunden | Unbegrenzt |
Das Schleifenraten-Verhältnis ist die Zahl, die die meisten Erstaufbauten falsch machen. Die innere Schleife hält die Neigung; die äußere fordert Schräglage zum Fahren an. Läuft die äußere Schleife irgendwo nah an der Rate der inneren, jagt sie ein Ziel, das die innere noch nicht erreicht hat – und beide kämpfen. Fünf- bis zehnfache Trennung ist die Arbeitsregel.
Die „Drift“-Zeile erklärt, wozu die Encoder da sind, und es ist Klartext wert: Ein Roboter mit nur Neigungsschleife balanciert wunderbar und wandert durch den Raum, weil ihm nichts sagt, wo er ist. Er ist aufrecht und verloren. Erst die äußere Positionsschleife macht aus ihm eine Demonstration einen Roboter.
Vorzeichenkonventionen: das, was einen Abend kostet
Vier Vorzeichen müssen übereinstimmen, und keines lässt sich herbeidenken – jedes muss auf der Werkbank geprüft werden, mit dem Roboter in der Hand:
| Prüfung | Roboter halten und … | Er sollte … |
|---|---|---|
| IMU-Vorzeichen | Vorwärts kippen | Positive Neigung melden (oder konsistent negativ – eines wählen) |
| Motorvorzeichen | Positiven Stellwert befehlen | Räder vorwärts treiben |
| Innere Schleife | Mit laufender Schleife vorwärts kippen | Räder vorwärts befehlen, um den Fall zu fangen |
| Äußere Schleife | Aus Ruhe vorwärts schubsen | Zum Zurückkehren rückwärts neigen |
Das dritte verkehrt herum, und der Roboter beschleunigt seinen eigenen Fall, hart, in die Richtung, in die er schon ging. Unverwechselbar – und mit Rädern in der Luft testenswert.
Wenn es nicht geht
Fast jeder Fehler ist eines von fünf Dingen, und sie sehen verschieden genug aus, um sie zu unterscheiden:
- Knallt beim Einschalten sofort hin – Vorzeichen der inneren Schleife invertiert.
- Aufklingendes Pendeln bis zum Fall – Differentialverstärkung zu niedrig, oder D aus differenziertem Winkel statt Gyro-Rate genommen.
- Surrt aufrecht – Proportionalverstärkung zu hoch, oder Schleife zu langsam für diese Verstärkungen.
- Sackt kampflos zu Boden – Proportionalverstärkung zu niedrig, oder Motoren in Sättigung.
- Balanciert, fährt aber davon – Montagetrimm, mit zu wenig Integral zum Aufsaugen.
Die Fehlermodustabelle geht jedes genauer durch, und jedes lässt sich im Simulator absichtlich reproduzieren – der schnellste Weg, sie erkennen zu lernen.
Projekt-Roadmap
Der Baupfad
Folge dem Technikbaum von den Bauteilen bis zum funktionierenden Roboter. Jeder Knoten wird freigeschaltet, sobald seine Voraussetzungen erledigt sind, und dein Fortschritt wird auf diesem Gerät gespeichert.
0 / 16 erledigt
Bauteile
- ControllerArduino UnoDas gutmütige 8-Bit-Board, über das die meisten die Robotik kennenlernen.
- SensorMPU-6050 IMUEin sechsachsiger Bewegungssensor – wie ein Roboter eigene Neigung, Drehung und Beschleunigung fühlt.
- TreiberTB6612FNG-MotortreiberEine MOSFET-H-Brücke, die die Volt behält, für die du wirklich bezahlt hast.
- AktorN20-Getriebemotor mit EncoderMikromotor mit Metallgetriebe und Encoder hinten: So weiß der Roboter, wie weit er wirklich gefahren ist.
- Chassis2WD Robot ChassisDie Plattform, auf die zwei Motoren, eine freie Rolle und die Elektronik geschraubt werden.
- StromversorgungRobot Battery & Power PackDer Unterschied zwischen einem Roboter, der läuft, und einem, der ständig neu startet.
Tutorials in diesem Pfad
- Einsteiger · 45 Min. LesezeitNeigungswinkel aus MPU6050: Beschleunigung und GyroVerwandle rohe MPU6050-Zählwerte in einen Neigungswinkel in Grad — und lerne, warum kein Sensor allein taugt.
- Mittelstufe · 1 StundeKomplementärfilter: Beschleunigung und Gyro fusionierenFusioniere verrauschten Beschleunigungssensor mit driftendem Gyro zu einem vertrauenswürdigen Neigewinkel – in einer Codezeile.
- Fortgeschritten · 2 StundenKaskadierte PID-Regelung für Balance-RoboterZwei verschachtelte PID-Schleifen: eine hält den Neigewinkel, eine fordert Neigung an, damit der Roboter irgendwohin kann.
- Einsteiger · 18 Min. LesezeitEinen PID-Regler abstimmen: Eine praktische AnleitungEine praxisnahe Reihenfolge zum Abstimmen der P-, I- und D-Verstärkung ohne Raten – und wie man jeden Schritt live testet.
- Einsteiger · 17 Min. LesezeitQuadratur-Encoder lesen für Distanz und TempoVerwandle Quadratur-Encoderpulse in zuverlässige Radrichtung, Distanz und Geschwindigkeit.
Üben, bevor du verdrahtest
Im Live-Simulator abstimmen
Der Baupfad führt durch ein Browser-Labor. Bring das Verhalten hier in Ordnung und übertrage deine Einstellungen dann auf den echten Roboter.
Häufig gestellte Fragen
Wie schwer ist ein selbstbalancierender Roboter als erstes Projekt?
Er ist ein schlechtes erstes und ein exzellentes drittes Projekt. An der Verdrahtung ist nichts schwierig, doch die Strecke ist instabil – es gibt keine Teilpunkte: Der Roboter steht oder nicht, und ein falsches Vorzeichen sieht genauso aus wie schlechte Verstärkungen, bis man weiß, worauf man schaut. Baue zuerst einen Linienfolger, sodass PID-Abstimmung und Motortreiber schon vertraut sind – dann wird daraus ein fokussiertes Problem mit einer Schleife statt fünf Unbekannten auf einmal.
Warum vibriert mein Balancierroboter, statt still zu stehen?
Meist Proportionalverstärkung zu hoch für deine Schleifenrate, oder Getriebespiel. Senke zuerst Kp. Bleibt die Vibration bei niedriger Verstärkung, beobachte die Räder im Umkehrmoment: Gibt es eine sichtbare Totzone, bevor sie anlaufen, ist das Getriebe das Problem – und ein Motor mit Metallgetriebe repariert, was keine Abstimmung kann.
Brauche ich wirklich Encoder?
Nicht zum Stehen. Die innere Schleife braucht nur einen Neigewinkel – ein Roboter ganz ohne Encoder balanciert bestens, er driftet nur, weil ihm nichts sagt, wo er ist. Encoder braucht die äußere Schleife zum Positionhalten. Baue ihn erst ohne, bringe ihn zum Balancieren, dann füge sie hinzu.
Wie schnell muss der Regelkreis laufen?
200 Hz sind ein vernünftiges Minimum für die innere Schleife, schneller ist besser. Die natürliche Fallzeit des Roboters setzt die Frist: Ein kleiner Roboter geht in deutlich unter einer Sekunde von aufrecht zu unrettbar – eine Schleife mit 50 Hz hat also sehr wenige Eingriffschancen. Fahre sie per Hardware-Timer statt delay(), denn konstantes Timing zählt für den D-Anteil mehr als die exakte Rate.
Warum balanciert er, fährt aber langsam durch den Raum?
IMU-Montagetrimm. Sitzt der Sensor ein Grad neben vertikal, hält die Schleife diesen falschen Winkel – und konstante Schräglage heißt konstante Beschleunigung. Miss den Offset mit von Hand wirklich aufrecht gehaltenem Roboter, ziehe ihn als Konstante ab und lasse den Integralanteil den Rest schlucken. Mit dem Trimm-Schieber im Simulator lässt sich das exakt nachstellen.