Kostengünstiger autonomer LEGO-Panzer mit NVIDIA Jetson Nano & Isaac SDK bauen
Kostengünstigen autonomen LEGO-Panzer mit NVIDIA Jetson Nano & Isaac SDK bauen
In dieser Anleitung demonstriere ich, wie man ein Standard LEGO EV3 Kit in vollautonomen Kettenroboter verwandelt, angetrieben von NVIDIA Jetson Nano, Isaac SDK, YDLIDAR-X4 LiDAR und Pixy2 Vision-Kamera. Ergebnis: budgetfreundliche Alternative zu Carter & Kaya Referenzdesigns, behält aber alle fortschrittlichen Wahrnehmungs- & Planungsfähigkeiten von NVIDIAs Robotik-Stack.
Zu Teil 8 oder Teil 10 springen für komplettes autonomes Navigationsdemo.
Projektkomponenten:
- NVIDIA Jetson Nano Dev Board – läuft Isaac Robot Engine
- EV3 Brick – steuert Motoren (in EV3 31313 Robot Kit enthalten)
- Kettenbasis – aus LEGO Technic Teilen & zwei Large Motoren (alles in EV3 31313 Robot Kit)
- YDLIDAR X4 LiDAR
- Pixy2 Kamera für Vision
Warum Isaac SDK statt ROS?
- Viele ROS-Tutorials, aber nur wenige offizielle Isaac SDK Guides.
- Isaac SDK purpose-built für Jetson Hardware, beste Performance auf Nano.
- Kernalgorithmen – Wahrnehmung bis Planung – GPU-beschleunigt, macht Nano weit fähiger als Raspberry Pi 4.
- IsaacSim's Unity 3D Renderer liefert fotorealistische Simulation, erleichtert Reality Gap.
Warum LEGO-Teile?
- Umfangreicher Teilevorrat verfügbar.
- Hochwertige Servos & robuste Konstruktion.
- Kein Löten nötig; System voll modular.
- Optionales 3D-gedrucktes Gehäuse für Jetson Nano (siehe PELA-blocks Repo).
Dieser Pfad bringt Herausforderungen:
- LEGO Hardware nicht nativ von Isaac SDK unterstützt; nur Carter & Kaya Referenzen.
- Isaac SDK unterstützt limitierten Hardware-Komponentensatz.
- Cross-Kompilation nötig für x86-64, arm64, armv5tejl Targets.
- Einige Komponenten bleiben Closed Source.
Teil 1: Einstieg
1. Isaac SDK installieren
- Offizielle Installationsanleitung folgen.
- Sample Apps ausführen zur Umgebung-Verifikation.
- 2019.3 SDK Version für maximale Kompatibilität nutzen.
2. Spracherkennung (Optional)
- CUDA 10.0, cuDNN 7.6.3, TensorRT 6.0 installieren.
- TensorFlow 1.15.0 mit GPU-Support installieren.
3. EV3dev Image
Neuestes ev3dev-stretch Image auf microSD oder microSDHC flashen. microSDXC wird von EV3 Brick nicht unterstützt.
4. ARM Cross-Compiler für ev3dev
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
Da Ubuntu 18.04 (Host & Jetson) GLIBC 2.28 nutzt, ev3dev aber GLIBC 2.24, müssen wir mit dynamischem Linking außer Math-Library kompilieren. jetson-ev3/toolchain/CROSSTOOL entsprechend anpassen, oder Debian 9 Docker Image nutzen.
5. Jetson + EV3 Workspace
git clone https://github.com/andrei-ace/jetson-ev3.git
jetson-ev3/WORKSPACE editieren auf Isaac SDK Pfad:
local_repository( name = 'com_nvidia_isaac', path = '/home/andrei/ml/isaac' )
Toolchain-Pfad in jetson-ev3/toolchain/CROSSTOOL aktualisieren:
# edit with your path to the toolchain linker_flag: '-L/home/andrei/ml/jetson-ev3/toolchain'
6. Jetson Nano mit EV3 verbinden
USB-A auf Mini-USB Kabel. SSH in EV3 von Jetson:
ssh user@ev3dev.local
Default Passwort: maker.
7. Ping-Pong Tutorial
Isaacs „Ping-Pong“ Codelet demonstriert Inter-Prozess-Kommunikation. Anpassen für Nachrichten zwischen Jetson & EV3 Brick.
EV3 Server bauen:
bazel build --config=ev3dev //apps/ev3/ping_pong:ev3_pong
Client auf Jetson deployen:
<YOUR-ISAAC-INSTALL>/engine/build/deploy.sh --remote_user <YOUR-USER-JETSON> -p //apps/ev3/ping_pong:ping_pong-pkg -d jetpack43 -h <YOUR-JETSON-IP>
Beide Binaries ausführen. EV3 sollte „Ping“ Nachrichten sprechen.
Teil 2: Motor von Isaac steuern
Mit gleichen Prinzipien EV3 Motoren via custom Isaac Driver steuern, der Segway RMP Base mimikt. Ev3ControlServer läuft auf EV3:
bazel build --config=ev3dev //packages/ev3/ev3dev:ev3_control_server ev3_control_server ev3dev.local:9000
Server mit Sight Virtual Joystick für manuelle Teleoperation integrieren.
Teil 3: Roboter bauen
Chassis folgt eng LEGOs offiziellem EV3 Track3r Design. Jetson Nano Gehäuse von diesem GitHub Repo.
Teil 4: Isaac Apps Architektur
Isaac App besteht aus drei Layern:
- Graph – Nodes: definiert Komponenten.
- Graph – Edges: definiert Datenfluss.
- Configuration: parametrisiert Nodes.
Kurzes Beispiel Voice-Controlled Navigation App. (Vollständiger voice_control Ordner für alle JSON Files.)
{ 'name': 'voice_control', 'modules': [ '//apps/ev3/voice_control:voice_control_goal_generator', '@com_nvidia_isaac//packages/navigation', '@com_nvidia_isaac//packages/planner' ], 'config_files': [ 'apps/ev3/voice_control/model/isaac_vcd_model.metadata.json' ], 'config': { ... }, 'graph': { 'nodes': [...], 'edges': [...] } }
Subgraphs wiederverwendbar; Navigationstack geteilt über alle Roboter-Varianten.
Teil 5: Isaac Apps auf EV3 ausführen
EV3 Driver implementiert gleiche API wie Segway RMP Base, ermöglicht direkte Wiederverwendung bestehender Isaac Apps: Joystick-Controller, distributed GMapping, voller Navigationstack.
Teil 6: Odometrie-Kalibrierung
Präzise Odometrie kritisch für autonomen Betrieb. Ev3ControlServer exponiert zwei RPC Calls:
command(Control)– sendet lineare & Winkelgeschwindigkeiten.state()– liefert aktuelle lineare & Winkelgeschwindigkeiten.
Mit Radradius & Spurweite lineare Geschwindigkeit berechnen:
if left == right: v = left elif left == -right: v = 0 else: v = (left + right) / 2
Winkelgeschwindigkeit aus Differential der Radgeschwindigkeiten geteilt durch Spurweite.
Teil 7: Sprachgesteuerte autonome Navigation
Voice Detection Subgraph lauscht Mikrofon, emittiert voice_command_id bei trainierten Keywords. Ich trainierte RNN auf drei Wörter – „jetson“, „left“, „right“ – via Isaac Speech Toolkit. Resultierendes Modell im Projekt-Repo downloadbar.
Bei Kommando publishGoalGenerator Ziel an Global Planner. Beispiel 90° Linksrotation:
auto proto = rx_detected_command().getProto(); int id = proto.getCommandId(); auto goal_proto = tx_goal().initProto(); goal_proto.setStopRobot(true); goal_proto.setTolerance(0.1); goal_proto.setGoalFrame('robot'); ToProto(Pose2d::Rotation(90), goal_proto.initGoal()); tx_goal().publish();
In Praxis funktioniert System zuverlässig im 10 W Power Mode. Bei 5 W zu hohe Inferenzlatenz (≈30 ms) für smoothen Betrieb.
Teil 8: Mapping mit Distributed GMapping
Mapping auf Host-PC während EV3 LiDAR-Daten liefert. Distributed GMapping App auf Jetson deployen:
./engine/build/deploy.sh --remote_user andrei -p //apps/ev3:gmapping_distributed_ev3-pkg -d jetpack43 -h 192.168.0.218
Auf Host ausführen:
bazel run apps/ev3:gmapping_distributed_host
Host JSON auf korrekte Jetson IP prüfen:
'tcp_subscriber': { 'isaac.alice.TcpSubscriber': { 'port': 5000, 'host': '192.168.0.218' } }
Nach paar Minuten Erkundung entsteht hochauflösendes Occupancy Grid.
Fazit
Mit moderater Investition in LEGO Technic, YDLIDAR, Pixy2 bauen Sie vollautonomen Kettenroboter, der volle Power von NVIDIAs Isaac SDK nutzt. System unterstützt Sprachbefehle, LiDAR-Mapping, GPU-beschleunigte Wahrnehmung – vielseitige Plattform für Forschung, Bildung, Hobby.
Gesamter Code, Konfigurationsdateien, trainierte Modelle im Projekt Repository verfügbar.
Herstellungsprozess
- Autonomes Donkey Car: TensorFlow MobileNetV2 KI für Müllsammler
- Raspberry Pi Panzer: Reichweiten- & Peilungssensoren für präzise Navigation hinzufügen
- JQR Vierbein-Roboter: DIY-Laufroboter für autonome Navigation & Rettung
- Vorbereitung auf eine autonome Zukunft: Wie Flottenbetreiber vorausfahren können
- Premium 1:24 CNC-gefertigtes Type 99 Kampfpanzer-Modell
- Autonomer Roboter meistert Türöffnung – Durchbruch für Serviceroboter
- NASA's autonome Assembler-Roboter bauen Mondhabitate
- Reservetanks: Zweck, Arten und Vorteile
- Kritische Sicherheitsrichtlinien für das Schweißen von Kraftstofftanks
- Benzinleck am Auto finden & reparieren: Anleitung & Sicherheit