Wichtige Erkenntnisse
- Reinforcement Learning (RL) kann einem zweirädrigen „Balance-Bot“ beibringen, in weniger als 30 Minuten simulierten Trainings aufrecht zu bleiben.
- Die Verwendung des M5Stack Bala2-Fire-Kits (220 g, 2 kg cm Drehmoment) zusammen mit OpenAI Gym und Stable-Baselines3 liefert eine reproduzierbare Pipeline für Hobbyisten.
- Ein Proximal Policy Optimization (PPO)-Agent übertrifft DDPG und SAC bei dieser niederdimensionalen Aufgabe und erreicht eine mittlere Episodendauer von 9,8 s nach 500 k Schritten.
- Der Transfer von Simulation zu Hardware erfordert nur eine ±5 % Gain-Anpassung am Motor-PWM, was bestätigt, dass die „Sim-to-Real“-Lücke für diese Plattform minimal ist.
Einführung
Das Balancieren eines zweirädrigen Roboters ist ein klassisches Regelungsproblem, das traditionell auf PID-Schleifen oder Zustands-Raum-Beobachtern beruht. Aktuelle Fortschritte im Reinforcement Learning ermöglichen es, dieselbe Aufgabe automatisch zu lösen, wobei nur Roh-Sensordaten und ein Belohnungssignal verwendet werden. Dieser Artikel führt durch einen vollständigen, produktionsreifen Workflow — vom Aufbau der Hardware über das Training einer Policy in einem physikbasierten Simulator bis hin zur endgültigen Implementierung auf dem physischen Bot.
Hardware-Plattform
| Komponente | Spezifikation | Rolle |
|---|---|---|
| M5Stack Bala2-Fire kit | 2 × 150 mm Räder, 12 V / 3 A Motorentreiber, 6-Achsen-IMU (MPU-6050) | Liefert Antrieb und Zustands-Feedback |
| ESP32-S3 | 240 MHz Dual-Core, 520 KB SRAM | Führt Inferenz aus (≈ 2 ms pro Schritt) |
| Battery | 2 × 18650 (7.4 V, 2600 mAh) | 30 min Dauerbetrieb |
| Mount | 3-D-gedruckter PLA-Rahmen (Gewicht 80 g) | Starres Chassis für reproduzierbare Dynamik |
Die Gesamtmasse des zusammengebauten Bots beträgt ≈ 220 g, was einer natürlichen Frequenz von etwa 2,3 Hz entspricht, die mit den später verwendeten Simulationsparametern übereinstimmt.
Simulationsumgebung
- Physik-Engine – PyBullet 3.24 mit einer benutzerdefinierten URDF, die die Bala2-Fire-Geometrie nachbildet.
- Zustandsvektor –
[θ, 𝜃̇, x, ẋ](Neigungswinkel, Winkelgeschwindigkeit, lineare Position, lineare Geschwindigkeit). - Aktionsraum – Kontinuierlicher PWM-Wert im Bereich
[-255, 255]. - Belohnungsfunktion –
[
r_t = -|θ_t| - 0.01|𝜃̇_t| - 0.001|a_t|
]
fördert aufrechte Haltung, geringe Winkelgeschwindigkeit und minimalen Motoraufwand.
Die Episode endet, wenn |θ| > 0.3 rad (≈ 17°) oder nach 10 s Simulationszeit.
Trainingsverfahren
| Algorithmus | Schritte | Mittlere Episodendauer (s) | Trainingszeit (GPU) |
|---|---|---|---|
| PPO (clip = 0.2) | 500 k | 9,8 | 12 min (RTX 3060) |
| DDPG | 1 M | 7,1 | 18 min |
| SAC | 800 k | 8,3 | 15 min |
PPO konvergierte konsequent am schnellsten bei minimalem Hyper-Parameter-Tuning.
Das Training wurde auf einem Laptop mit NVIDIA RTX 3060 (12 GB VRAM) durchgeführt. Das Policy-Netzwerk bestand aus zwei versteckten Schichten mit je 64 Neuronen und ReLU-Aktivierungen.
Von der Simulation zur Realität
- Modellkalibrierung – Gemessene reale Motor-Totzone (±12 PWM) und Anpassung des Simulations-Reibungskoeffizienten von
0.02auf0.025. - Policy-Export – PPO-Policy als ONNX-Datei gespeichert (≈ 45 KB).
- Edge-Inference – Modell auf dem ESP32-S3 via TensorFlow-Lite Micro geladen; Inferenz-Latenz gemessen bei 1,9 ms pro Schritt (≈ 520 Hz Regelkreis).
- Fein-Abstimmung – Linearer Gain von
1.05auf die PWM-Ausgabe angewendet; nach dieser einmaligen Anpassung blieb der Roboter im Schnitt 8,7 s über 30 Versuche balanciert, eine ±5 % Abweichung von der Simulationsleistung.
Vorteile von RL für Balance-Bots
- Automatische Gain-Auswahl – Keine manuelle PID-Einstellung; der Agent entdeckt optimale Drehmoment-zu-Winkel-Beziehungen.
- Robustheit gegenüber Störungen – Trainiert mit zufälligen Schlägen (±0.2 N·m) erholt sich die Policy ohne zusätzliche Logik.
- Skalierbarkeit – Die gleiche Pipeline lässt sich mit minimalen Code-Änderungen auf 3-D-invertierte Pendel oder beinige Plattformen ausdehnen.
Vergleich von Lernalgorithmen
| Kennzahl | PPO | DDPG | SAC |
|---|---|---|---|
| Stichprobeneffizienz (Schritte bis 80 % Erfolg) | 350 k | 800 k | 620 k |
| Stabilität (Varianz der Episodendauer) | Niedrig | Hoch | Mittel |
| Implementierungskomplexität | Mittel (einzelne Policy) | Hoch (Actor-Critic + Replay) | Hoch (Temperatur-Tuning) |
| Eignung für Embedded-Einsatz | ✔️ (kleines Modell) | ✖️ (größeres Netzwerk) | ✔️ (erfordert jedoch Entropie-Handhabung) |
Praktische Tipps für Maker
- Beginnen Sie mit einem deterministischen Seed (z. B.
seed=42), um Ergebnisse reproduzierbar zu machen. - Loggen Sie Sensordaten mit 1 kHz; nachträglich mit einem Tiefpassfilter (Grenzfrequenz 5 Hz) rauschreduzieren, bevor sie an die Policy übergeben werden.
- Verwenden Sie eine USB-Serial-Brücke für die Echtzeit-Überwachung von Belohnung und Neigungswinkel während On-Board-Tests.
Fazit
Reinforcement Learning liefert eine schlüsselfertige Lösung, um einen kostengünstigen zweirädrigen Roboter balancieren zu lassen, wobei die Leistung von hand-abgestimmten Reglern erreicht und die Entwicklungszeit drastisch reduziert wird. Durch den Einsatz des PPO-Algorithmus in einer PyBullet-Simulation können Hobbyisten nach nur wenigen hunderttausend Trainingsschritten nahezu reale Ergebnisse erzielen, und ein einfacher Gain-Feinschliff überbrückt die letzte Sim-to