Eine vollständige Robotersimulationsumgebung für Differential-Antrieb-Roboternavigation, Lokalisierung und Reinforcement Learning mit IR-SIM (2D-Simulation). Dieses Projekt verbindet klassische Robotik-Steuerungsalgorithmen mit modernem Deep Reinforcement Learning und bietet eine praxisorientierte Lernplattform zum Verständnis beider Ansätze. Das System umfasst Go-to-Goal-Controller, Potential-Field-Navigation, Odometrie-Simulation und vollständige RL-Trainingspipeline mit PPO-, SAC- und TD3-Algorithmen—Erreichen einer 100%igen Navigationserfolgsrate nach Implementierung forschungsbasierter Reward-Funktions-Designs.
Robotik wird oft isoliert gelehrt—entweder lernt man klassische Steuerungstheorie mit Differentialgleichungen und Zustandsraummodellen, oder man taucht in Reinforcement Learning mit abstrakten Umgebungen wie CartPole ein. Aber echte Robotik lebt an der Schnittstelle beider Welten.
Ich wollte etwas bauen, das:
Die Plattform ist in drei Hauptebenen organisiert:
IR-SIM (2D Intelligent Robot Simulator) bietet das Physik-Backbone:
Vor dem Einstieg in RL implementierte ich zwei klassische Navigationsansätze:
Go-to-Goal-Controller:
Potential-Field-Controller:
Diese Controller dienen als Baselines und helfen zu validieren, dass die Simulationsumgebung korrekt funktioniert.
Das RL-System umhüllt IR-SIM mit einer Gymnasium-kompatiblen Umgebung:
Beobachtungsraum (7 Werte):
dx_norm, dy_norm: Normalisierte Richtung zum Zieldtheta: Kursfehler zum Zielv, w: Aktuelle lineare und Winkelgeschwindigkeitdist_to_obstacle: Minimale Entfernung zum nächsten Hindernisdistance_to_goal: Euklidische Entfernung zum ZielAktionsraum:
[0.0, 1.0] (nur vorwärts-Beschränkung)[-1.0, 1.0] (links/rechts drehen)Trainingsalgorithmen:
Das Training des RL-Agenten war nicht einfach. Hier ist die ehrliche Geschichte:
Meine erste Version verwendete eine komplexe Reward-Funktion mit vielen konkurrierenden Signalen:
Der Agent lernte... im Kreis zu drehen. Mit 500.000 Timesteps Training erreichte er nur 20% Erfolgsrate, und selbst diese Erfolge sahen nach Glück aus, nicht nach Können.
Tiefe Diagnose offenbarte mehrere kritische Probleme:
Problem 1: Aktionsraum-Mismatch
Der Aktionsraum erlaubte [-1.5, 1.5] Geschwindigkeiten, aber die Roboter-Konfiguration unterstützte nur [-1, 1]. Der Agent lernte ungültige Aktionen, die abgeschnitten wurden—verschwendetes Training auf unmögliche Verhaltensweisen.
Problem 2: Kollisionserkennungs-Bug
Die Verwendung von hasattr() statt getattr() für IR-SIM-Form-Objekte verursachte stille Fehler. Die Hinderniserkennung gab Standardwerte statt tatsächlicher Entfernungen zurück. Der Agent war buchstäblich blind für Hindernisse.
Problem 3: Reward-Signal-Verwirrung Zu viele konkurrierende Reward-Signale verwirrten den Lernprozess. Der Agent konnte nicht herausfinden, welches Verhalten belohnt wurde.
Nach umfangreicher Literaturrecherche zu RL-Navigation implementierte ich:
Eingeschränkter Aktionsraum: Nur-Vorwärts-Bewegung [0, 1] für lineare Geschwindigkeit—entspricht dem Go-to-Goal-Controller-Verhalten
Fortschrittsbasierte Belohnung: Einfaches 10.0 × max(0, progress) statt inverser Entfernung—klares Signal, das das Schließen der Lücke belohnt
Exzessive Rotationsstrafe: -5.0 × (w - 0.8) wenn Winkelgeschwindigkeit 0.8 überschreitet—stoppt das Dreh-Verhalten
Vereinfachtes Signal: Entfernt alle konkurrierenden Boni und Strafen, fokussiert auf das Hauptziel
robot_sim/
├── configs/ # Welt-Konfigurationsdateien
│ ├── simple_world.yaml # Basis-Test-Welt
│ ├── rl_world.yaml # RL-Trainings-Welt
│ └── rl_world_complex.yaml # Komplexe Hindernis-Welt
├── scripts/ # Python-Skripte
│ ├── 01_test_simulation.py # Basis-Simulations-Test
│ ├── 02_go_to_goal.py # Go-to-Goal-Demo
│ ├── 03_potential_field.py # Potential-Field-Demo
│ ├── 04_odometry.py # Odometrie-Visualisierung
│ ├── 05_rl_environment.py # Gymnasium-Wrapper
│ ├── 06_train_rl.py # RL-Trainings-Skript
│ ├── 07_evaluate_rl.py # Modell-Evaluierung
│ └── ... # Diagnose-Tools
├── models/ # Trainierte Modelle (PPO/SAC/TD3)
└── logs/ # TensorBoard-Logs & Visualisierungen
Vor dem RL-Training klassische Lösungen implementieren. Sie validieren deine Simulation, bieten Baselines, und ihr Verhalten informiert RL-Design (z.B. nur-vorwärts-Beschränkung).
Wenn RL fehlschlägt, widerstehe dem Drang, Hyperparameter zufällig zu optimieren. Stattdessen:
Komplexe Reward-Funktionen mit vielen Termen verwirren den Agenten. Fortschrittsbasierte Belohnungen mit klaren, konsistenten Signalen übertreffen ausgeklügelte Multi-Objektiv-Formulierungen.
Einschränken des Aktionsraums, um gewünschtes Verhalten zu entsprechen, verhindert, dass der Agent kontraproduktive Strategien lernt. Wenn dein Roboter nicht rückwärts fahren sollte, erlaube keine negative lineare Geschwindigkeit.
Der wertvollste Output ist nicht das finale Modell—es ist die Reise. Die Diagnose-Skripte und Änderungsprotokolle halfen mir zu verstehen, was schiefging und warum die Fixes funktionierten.
# Klonen und Setup git clone https://github.com/padawanabhi/robot_sim.git cd robot_sim python3 -m venv venv && source venv/bin/activate pip install -r requirements.txt # Simulation testen python scripts/01_test_simulation.py # RL-Agent trainieren python scripts/06_train_rl.py --algorithm ppo --timesteps 500000 # Trainiertes Modell evaluieren python scripts/07_evaluate_rl.py --algorithm ppo --episodes 5
tensorboard --logdir logs/tensorboard # Öffne http://localhost:6006