Automation

Trainiere einen Balance Bot mit Verstärkendem Lernen

Trainiere einen Balance Bot mit Verstärkendem Lernen

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

  1. Physik-Engine – PyBullet 3.24 mit einer benutzerdefinierten URDF, die die Bala2-Fire-Geometrie nachbildet.
  2. Zustandsvektor – [θ, 𝜃̇, x, ẋ] (Neigungswinkel, Winkelgeschwindigkeit, lineare Position, lineare Geschwindigkeit).
  3. Aktionsraum – Kontinuierlicher PWM-Wert im Bereich [-255, 255].
  4. 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

  1. Modellkalibrierung – Gemessene reale Motor-Totzone (±12 PWM) und Anpassung des Simulations-Reibungskoeffizienten von 0.02 auf 0.025.
  2. Policy-Export – PPO-Policy als ONNX-Datei gespeichert (≈ 45 KB).
  3. Edge-Inference – Modell auf dem ESP32-S3 via TensorFlow-Lite Micro geladen; Inferenz-Latenz gemessen bei 1,9 ms pro Schritt (≈ 520 Hz Regelkreis).
  4. Fein-Abstimmung – Linearer Gain von 1.05 auf 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

Ähnliche Artikel