1. Motivation & Projektidee¶
Dieses Projekt vereint zwei Leidenschaften: die Begeisterung für Robotik aus dem Mechatronik-Studium und die Freude am Programmieren, die ich bei der Entwicklung von Fullstack-Webanwendungen für meinen Arbeitgeber entdeckt habe. Nach zwei erfolgreichen Web-Projekten wollte ich endlich etwas schaffen, das beide Welten verbindet – komplexe Software und anspruchsvolle Hardware.
Da fertige Roboter-Kits nicht nur teuer sind, sondern ich auch langjährige Erfahrung im 3D-Druck mitbringe, fiel die Entscheidung schnell: ein komplett "self-sourced" entwickeltes Projekt.
Die Vision¶
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
for num in fibonacci(10):
print(num)
Die Idee war klar: Ein Roboter, der mehr kann als nur vor und zurück zu fahren. Er sollte:
- Autonom navigieren und Hindernissen ausweichen
- Objekte und Personen erkennen
- Sich präzise fernsteuern lassen
Die Idee der Fernsteuerung wurde stark durch meine Erfahrungen aus einem 5G-Forschungsprojekt geprägt, in dem ich die Testleitung für automatisiertes und teleoperiertes Fahren begleiten durfte. Der Austausch mit Entwicklern straßenzugelassener autonomer Fahrzeuge und die Inspiration durch Flottensteuerungs- und Luftfahrt-Kontrollzentralen zeigten mir, was in diesem Bereich möglich ist.
Und um dem Ganzen eine persönliche und humorvolle Note zu geben, kam die Idee mit dem Nerf-Dart-Launcher – inspiriert von diesem super lustigen Video. Es ging mir darum, tief in die Programmierung einzutauchen und zu lernen, wie man Hardware und Software zu einem intelligenten System kombiniert.
2. Von der Idee zum Konzept¶
2.1. Die initiale Wunschliste¶
Am Anfang stand keine detaillierte Planung, sondern nur eine Sammlung von Ideen und den üblichen Buzzwords aus Medien und Social Media: SLAM, Face Recognition, Object Recognition, Path Planning, Autonomous Driving, Computer Vision. Ich wollte all den coolen Shit haben!
Die unsortierte Wunschliste:
- Vier angetriebene Räder – nicht die Standard-Zwei-Rad-Lösung, sondern mehr Traktion, Stabilität und eine solidere Basis
- Autonome Intelligenz – keine stumpfe Befehlsausführung, sondern Umgebungswahrnehmung und Selbstorientierung
- Interaktion – ein greifbares, sichtbares Feature statt nur Herumfahren
- Persönlichkeit – keine tiefgründigen KI-Gespräche, sondern lustige Sprüche und einfache Sprachbefehle
- Volle Kontrolle – kompletter Zugriff auf Sensordaten und Systemzustand wie in einer Kontrollzentrale
- Industriestandard – keine 10.000-Zeilen-Arduino-Datei, sondern eine professionelle Robotik-Architektur
2.2. Konkretisierung der Funktionen¶
Aus diesen vagen Vorstellungen wurden klare, technische Anforderungen:
Antrieb:
Vier Räder waren gesetzt – und zwar aus Trotz gegenüber den zahlreichen TurtleBot-Kopien mit Differentialantrieb. Ich wollte etwas Eigenes entwickeln.
SLAM:
Die "Intelligenz" konkretisierte sich zur Anforderung, dass der Roboter in meiner Wohnung autonom eine Karte erstellen, sich darin lokalisieren und navigieren können muss.
Computer Vision:
Der Wunsch nach "Interaktion" mündete in der Kombination aus Gesichtserkennung und dem Nerf-Dart-Launcher – ernste Technik mit einem spielerischen, greifbaren Feature.
Fernsteuerung:
Die Steuerung sollte immer remote erfolgen – manuell per Xbox-Controller oder durch autonome Befehle. Die Launcher-Steuerung musste dabei vollständig getrennt von der Fahrsteuerung sein, um eine saubere, modulare Architektur zu gewährleisten. Ein Web-Dashboard zur Visualisierung der Telemetriedaten war ebenfalls Pflicht.
Technologiebasis:
Von Anfang an stand fest: Das Projekt baut auf ROS2 auf.
3. Recherche & Konzeptentscheidungen¶
Nachdem klar war, was der Roboter können soll, begann die eigentliche Arbeit: Wie setze ich das alles um?
3.1. Antriebskonzept¶
Die Entscheidung für vier Räder eröffnete verschiedene Antriebskonzepte. Aus meiner KFZ-Ausbildung kannte ich klassische Lenkungen, doch welche Optionen bietet die Robotik?
graph TD
subgraph "Anforderung: Antrieb mit 4 Rädern"
A{Welche Bewegungsart wird angestrebt?}
A -- "Maximale Manövrierfähigkeit (holonom)" --> B[Omnidirektionale Antriebe]
A -- "Fahrzeugähnliche Bewegung (nicht-holonom)" --> C[Gelenkte / Starre Antriebe]
end
subgraph "Technologie-Optionen"
B -- "Für glatte Böden" --> B1["Mecanum-Räder"]
B -- "Für unebene Böden" --> B2["Omni-Räder"]
C -- "Panzerlenkung" --> C1["Skid-Steer"]
C -- "Autolenkung" --> C2["Ackermann-Lenkung"]
end
subgraph "Meine Entscheidung"
B1 --> End1[Ergebnis: Mecanum-Antrieb für Indoor-Agilität]
end
Entscheidung: Mecanum-Räder bieten holonome Bewegung (seitliches Fahren, Rotation auf der Stelle) und sind ideal für Indoor-Umgebungen mit glatten Böden.
3.2. Sensorik für SLAM¶
Für die autonome Navigation muss der Roboter seine Umgebung erfassen. Die Optionen:
mindmap
root("(Sensor für SLAM?)")
LiDAR
::icon(fa fa-satellite-dish)
+ Hohe Präzision 2D
+ 360° Abdeckung
+ Unempfindlich gegen Licht
- Kostenfaktor
Tiefenkamera (Stereo/ToF)
::icon(fa fa-camera-retro)
+ Günstiger
+ Echte 3D-Daten
- Begrenztes Sichtfeld
- Anfällig für Lichtverhältnisse
Ultraschall
::icon(fa fa-assistive-listening-systems)
+ Sehr günstig
- Zu ungenau für SLAM
- Nur simple Hinderniserkennung
Entscheidung
::icon(fa fa-check-circle)
**LiDAR** für robustes 2D-Mapping als Basis
Entscheidung: LiDAR bietet die beste Balance aus Präzision, Zuverlässigkeit und 360°-Abdeckung für robustes Indoor-SLAM.
3.3. Steuerungsarchitektur¶
Die Kombination aus rechenintensivem ROS2 und präziser Motoransteuerung stellte eine zentrale Herausforderung dar.
flowchart LR
subgraph "Option A: Monolithisch"
A1[Raspberry Pi 4]
A1 --> A2{"ROS2 (High-Level)"}
A1 --> A3{"Motor-PWM (Low-Level)"}
style A3 fill:#f8d7da,stroke:#721c24
end
subgraph "Option B: Verteilte Architektur"
B1[Raspberry Pi 4] --> B2{"ROS2 (High-Level)"}
B1 -- "Befehle (z.B. 0.5 m/s)" --> B3[Raspberry Pi Pico]
B3 --> B4{"Motor-PWM (Echtzeit)"}
style B4 fill:#d4edda,stroke:#155724
end
subgraph "Entscheidung"
C1{"Problem bei A:\nLinux ist kein Echtzeit-OS.\nPWM-Jitter führt zu unsauberer Bewegung."}
C2{"Vorteil von B:\nPico übernimmt Echtzeit-kritische Tasks.\nSaubere, zuverlässige Motoransteuerung."}
C3[**Option B gewählt**]
end
A1 --> C1
B1 --> C2
C1 --> C3
C2 --> C3
Entscheidung: Getrennte Architektur mit Raspberry Pi 4 für High-Level-Logik und Raspberry Pi Pico für echtzeitkritische Motorsteuerung.
4. Systemarchitektur¶
Die finale Architektur ist modular aufgebaut und nutzt die Stärken verschiedener Controller für spezifische Aufgaben. Die Kommunikation erfolgt durchgängig über das ROS2-Netzwerk, wobei micro-ROS als Brücke zu den Mikrocontrollern dient.
4.1. High-Level-Steuerung (Das Gehirn)¶
Hardware: Raspberry Pi 4B (8GB)
Software: Ubuntu Server 22.04 LTS, ROS2 Humble
Verantwortlichkeiten:
- Verarbeitung von LiDAR- und Kameradaten
- Ausführung der SLAM-Algorithmen (Kartierung & Lokalisierung)
- Pfadplanung für autonome Navigation
- Hosting des Web-Dashboards und der ROS2-Web-Bridge
- Computer-Vision-Verarbeitung für Gesichtserkennung
- Betrieb des
micro-ros-agentfür die Kommunikation mit Mikrocontrollern
4.2. Low-Level Echtzeit-Steuerung (Das Rückgrat)¶
Hardware: Raspberry Pi Pico
Software: FreeRTOS, micro-ROS Client
Verantwortlichkeiten:
- Ansteuerung der 4 DC-Motoren mit PWM
- Auslesen der Hall-Encoder für Odometrie
- Erfassung der IMU-Daten (Beschleunigung, Rotation, Orientierung)
- Auslesen der Time-of-Flight-Sensoren
- Veröffentlichung von Sensordaten und Odometrie auf ROS2-Topics
- Verarbeitung von
geometry_msgs/Twist-Bewegungsbefehlen
4.3. Aktor-Steuerung (Der Schütze)¶
Hardware: Arduino Nano oder Pro Micro
Software: micro-ROS Client
Verantwortlichkeiten:
- Steuerung der Pan/Tilt-Servos für Zielausrichtung
- Ansteuerung der Brushless-Motoren (Flywheel) zum Dart-Beschleunigen
- Auslösen des Abzugsmechanismus
- Verarbeitung von Ziel- und Feuerbefehlen über dedizierte ROS2-Topics
Design-Prinzip: Vollständige Entkopplung von der kritischen Bewegungssteuerung für Modularität und Ausfallsicherheit.
4.4. Remote-Steuerung (Die Kommandozentrale)¶
Hardware: Externer PC (Remote Workstation)
Funktionen:
- Manuelle Steuerung: Xbox-Controller am PC verbunden, ROS2-Node wandelt Eingaben in
Twist-Nachrichten um - Telemetrie & Monitoring: Web-Dashboard im Browser mit Echtzeit-Visualisierung über ROS2-Web-Bridge
- Kommandosteuerung: Senden von autonomen Navigationsbefehlen und Launcher-Kommandos
5. Hardware-Komponenten¶
5.1. Komponenten-Übersicht¶
| Kategorie | Komponente | Funktion |
|---|---|---|
| Chassis & Antrieb | 4× DC-Getriebemotoren GM3865-520 mit Hall-Encodern | Kraftvoller Antrieb mit Drehzahl-Feedback |
| 4× Mecanum-Räder (80mm) | Omnidirektionale Bewegung | |
| 4× TB6612FNG Motortreiber | H-Brücken-Ansteuerung der DC-Motoren | |
| Steuerung & Sensorik | Raspberry Pi 4B (8GB RAM) | High-Level-Steuerung, ROS2-Master, Computer Vision |
| Raspberry Pi Pico | Echtzeit-Steuerung (Motoren, Encoder, IMU, ToF) | |
| Arduino Nano / Pro Micro | Dedizierte Launcher-Steuerung | |
| YDLIDAR LDS01RR | 360° Laser-Scanner für SLAM (8m Reichweite) | |
| ICM-20948 (9-DoF IMU) | Lage- und Bewegungssensorik (Sensorfusion mit Odometrie) | |
| VL53L0X Time-of-Flight-Sensor | Präzise Distanzmessung (bis 2m) für Kollisionsvermeidung | |
| USB-Kamera (1080p) | Video-Streaming und Computer-Vision-Input | |
| Nerf-Launcher | 2× RS2205 Brushless-Motoren & 2× 40A ESCs | Dart-Beschleunigung (Flywheel-System) |
| 1× Digital-Servo (22kg) & 1× 9g Servo | Pan/Tilt-Mechanismus für Zielausrichtung | |
| Energieversorgung | 3S Li-Ion Akku-Pack (18650-Zellen) | Mobile Stromversorgung (11,1V nominal) |
| 3S BMS (Battery Management System) | Lade-/Entladeschutz, Zellenbalancierung | |
| INA3221 Sensor | Echtzeit-Monitoring von Spannung, Strom und Leistung | |
| Bedienung & Interface | Xbox Controller (Remote-PC) | Präzise, intuitive manuelle Fernsteuerung |
| Web-Dashboard (Remote-PC) | Telemetrie-Visualisierung und Systemsteuerung |
5.2. Systemübersicht-Diagramme¶
Komponenten-Architektur¶
Datenfluss & Kommunikation¶
Deployment-Architektur¶
6. Software-Stack & ROS2-Integration¶
6.1. ROS2-Architektur¶
Das System basiert vollständig auf ROS2 Humble und nutzt dessen modulare, verteilte Architektur.
Zentrale ROS2-Nodes:
base_controller(Pico): Motorsteuerung, Odometrie-Publikationslam_toolbox(Pi 4): SLAM-Algorithmus für Kartierungnav2(Pi 4): Navigations-Stack für Pfadplanungface_recognition_node(Pi 4): Computer-Vision-Verarbeitunglauncher_controller(Arduino): Nerf-Launcher-Steuerungteleop_node(Remote-PC): Controller-Input-Verarbeitungweb_bridge(Pi 4): ROS2-Web-Interface
Kommunikation:
- DDS (Data Distribution Service) für Peer-to-Peer-Kommunikation
- micro-ROS für Mikrocontroller-Integration
- rosbridge für Web-Dashboard-Verbindung
6.2. Entwicklungs-Workflow¶
Version Control: Git mit Feature-Branch-Workflow
Build-System: Colcon (ROS2-Standard)
Testing: Unit-Tests mit pytest, Integration-Tests mit launch_testing
Deployment: Custom docker-compose Setup für Pi 4
7. Kernfunktionen im Detail¶
7.1. SLAM & Navigation¶
Algorithmus: SLAM Toolbox (Karto-basiert)
Sensor-Fusion: LiDAR + Odometrie + IMU
Features:
- Echtzeit-Kartierung unbekannter Umgebungen
- Persistente Karten-Speicherung
- Loop-Closure-Detection für Konsistenz
- Kostenkartenbasierte Pfadplanung mit dynamischer Hindernisvermeidung
7.2. Omnidirektionale Bewegung¶
Kinematik: Mecanum-Räder ermöglichen:
- Vorwärts/Rückwärts-Fahrt
- Seitwärts-Bewegung (Crabbing)
- Rotation auf der Stelle
- Diagonale Bewegungen
- Beliebige Kombinationen
Regelung: PID-Controller für jeden Motor mit Encoder-Feedback
7.3. Computer Vision & Launcher¶
Face Recognition:
- OpenCV + dlib für Gesichtserkennung
- Training mit bekannten Gesichtern
- Echtzeit-Tracking mit Bounding-Box-Publikation
Launcher-Integration:
- Automatisches Tracking erkannter Gesichter
- Manuelle Übersteuerung via Controller
- Sicherheits-Features (Reichweitenbegrenzung, Timeout)
7.4. Remote-Steuerung¶
Manuelle Steuerung:
- Xbox-Controller mit intuitiver Tastenbelegung
- Analog-Stick für omnidirektionale Bewegung
- Trigger für Launcher-Steuerung
Web-Dashboard:
- Live-Kamera-Stream
- Echtzeit-Karte mit Roboter-Position
- Sensordaten-Visualisierung (Batterie, IMU, ToF)
- Diagnose-Tools und Log-Anzeige
8. Lessons Learned & Ausblick¶
8.1. Herausforderungen¶
- Mecanum-Kinematik: Komplex, aber die Agilität ist jeden Debugging-Alptraum wert
- micro-ROS-Integration: Gewöhnungsbedürftig, aber die Performance-Vorteile sind enorm
- Real-Time-Constraints: FreeRTOS auf dem Pico war die richtige Entscheidung
- Energiemanagement: 3S-Akku reicht für ~45 Min. bei normalem Betrieb
8.2. Mögliche Erweiterungen¶
- 3D-Navigation: Integration einer Tiefenkamera für Multi-Level-SLAM
- Sprachsteuerung: Wake-Word-Detection + Sprachbefehle
- Objektmanipulation: Greifarm für Pick-and-Place-Aufgaben
- Schwarm-Verhalten: Multi-Robot-System mit kooperativer Navigation
- ML-basiertes Tracking: YOLOv8 für robustere Objekterkennung
FAQ¶
Is this theme an official shadcn port?
No. But you can still star it
Why a new mkdocs theme while material exists?
First the shadcn/ui theme is just incredible.
Actually, nothing can compete with the material theme which is very mature and feature rich.
In addition to sticking to the shadcn theme, the idea is to remain a simple theme, providing some special built-in features that we may not find in other themes.
Is it open to contributions?
Yes, yes and yes! On its own, the theme tries to provide more and more relevant extensions/plugins. But anyone can define what could be relevant!
Open an issue and let us discuss about it
Is mkdocs-rube-goldberg-plugin-extension supported?
In general no.