Een Laag-kost Autonome Lego-tank Bouwen met NVIDIA Jetson Nano & Isaac SDK
Een Laag-kost Autonome Lego-tank Bouwen met NVIDIA Jetson Nano & Isaac SDK
In deze gids demonstreer ik hoe je een standaard LEGO EV3-kit kunt transformeren in een volledig autonoom getraceerde robot, aangedreven door een NVIDIA Jetson Nano, de Isaac SDK, een YDLIDAR-X4 LiDAR en een Pixy2-visiecamera. Het resultaat is een budget-vriendelijke alternatief voor de Carter en Kaya-referentie-ontwerpen, maar het behoudt alle geavanceerde perceptie- en planningscapaciteiten van NVIDIA's robotica-stack.
Spring naar Deel 8 of Deel 10 voor een complete autonoom-navigatie-demo.
Het project bestaat uit de volgende componenten:
- NVIDIA Jetson Nano dev-board – draait de Isaac Robot Engine
- EV3-brik – controleert de motoren (ingesloten in de EV3 31313 Robot Kit)
- Getraceerde basis – gebouwd uit LEGO Technic-onderdelen en twee grote motoren (alles meegeleverd in de EV3 31313 Robot Kit)
- YDLIDAR X4 LiDAR
- Pixy2 camera voor visie
Waarom Isaac SDK en niet ROS?
- Er zijn veel ROS-tutorials, maar slechts een handvol officiële Isaac SDK-gidsen.
- Isaac SDK is specifiek gebouwd voor Jetson-hardware, wat de beste prestaties op de Nano geeft.
- Alle kernalgoritmes – van perceptie tot planning – zijn GPU-geaccelereerd, wat de Nano veel capabeler maakt dan een Raspberry Pi 4.
- IsaacSim's Unity 3D-renderer levert fotorealistische simulatie die de reality gap overbrugt.
Waarom LEGO-onderdelen?
- Uitgebreide voorraad aan onderdelen beschikbaar.
- Hoge-kwaliteit servo's en robuuste constructie.
- Geen solderen vereist; het systeem is volledig modulair.
- Optionele 3D-geprinte behuizing voor de Jetson Nano (zie de PELA-blokken repo).
Deze keuze introduceert wel een paar uitdagingen:
- LEGO-hardware wordt niet natively ondersteund door Isaac SDK; alleen de Carter en Kaya-referenties bestaan.
- Isaac SDK ondersteunt een beperkte set hardwarecomponenten.
- Cross-compilatie is vereist voor x86-64, arm64 en armv5tejl targets.
- Sommige componenten blijven closed-source.
Deel 1: Aan de slag
1. Isaac SDK Installeren
- Volg de officiële installatiegids.
- Draai voorbeeldapplicaties om de omgeving te verifiëren.
- Gebruik de 2019.3 SDK versie voor maximale compatibiliteit.
2. Spraakherkenning (Optioneel)
- Installeer CUDA 10.0, cuDNN 7.6.3 en TensorRT 6.0.
- Installeer TensorFlow 1.15.0 met GPU-ondersteuning.
3. EV3dev-image
Flash de laatste ev3dev-stretch image op een microSD of microSDHC-kaart. microSDXC wordt niet ondersteund door de EV3-brik.
4. ARM Cross-compiler voor ev3dev
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
Omdat Ubuntu 18.04 (host en Jetson) GLIBC 2.28 gebruikt terwijl ev3dev GLIBC 2.24 gebruikt, moeten we compileren met dynamische linking behalve voor de math-bibliotheek. Pas het jetson-ev3/toolchain/CROSSTOOL bestand dienovereenkomstig aan, of gebruik een Debian 9 Docker-image.
5. Jetson + EV3 Workspace
git clone https://github.com/andrei-ace/jetson-ev3.git
Bewerk jetson-ev3/WORKSPACE om naar je Isaac SDK-pad te wijzen:
local_repository( name = 'com_nvidia_isaac', path = '/home/andrei/ml/isaac' )
En update het toolchain-pad in jetson-ev3/toolchain/CROSSTOOL:
# bewerk met je pad naar de toolchain linker_flag: '-L/home/andrei/ml/jetson-ev3/toolchain'
6. Jetson Nano Verbinden met EV3
Gebruik een USB-A naar mini-USB-kabel. SSH in de EV3 vanuit de Jetson:
ssh user@ev3dev.local
Standaardwachtwoord: maker.
7. De Ping-Pong Tutorial
Isaac's "Ping-Pong" Codelet demonstreert inter-proces-communicatie. Pas het aan om berichten te sturen tussen de Jetson en de EV3-brik.
Bouw de EV3-server:
bazel build --config=ev3dev //apps/ev3/ping_pong:ev3_pong
Deploy de client op de Jetson:
<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>
Draai beide binaries. De EV3 zou de "Ping"-berichten moeten spreken.
Deel 2: Een Motor Besturen vanuit Isaac
Met dezelfde principes, controleer de EV3-motoren via een aangepaste Isaac-driver die de Segway RMP-basis nabootst. De Ev3ControlServer draait op de EV3:
bazel build --config=ev3dev //packages/ev3/ev3dev:ev3_control_server ev3_control_server ev3dev.local:9000
Integreer de server met de Sight virtuele joystick voor handmatige teleoperatie.
Deel 3: De Robot Bouwen
Het chassis volgt nauwkeurig LEGO's officiële EV3 Track3r ontwerp. De Jetson Nano-behuizing is afkomstig van deze GitHub-repo.
Deel 4: Isaac Apps Architectuur
Een Isaac-app bestaat uit drie lagen:
- Graph – nodes: definieert de componenten.
- Graph – edges: definieert de dataflow.
- Configuratie: parameteriseert de nodes.
Hieronder is een beknopt voorbeeld van een stem-gecontroleerde navigatie-app. (Zie de volledige voice_control map voor alle JSON-bestanden.)
{ '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': [...] } }
Subgrafen zijn herbruikbaar; de navigatiestack wordt gedeeld over alle robotvarianten.
Deel 5: Isaac Apps Draaien op EV3
De EV3-driver implementeert dezelfde API als de Segway RMP-basis, wat direct hergebruik van bestaande Isaac-apps mogelijk maakt zoals de joystick-controller, gedistribueerde GMapping en volledige navigatiestack.
Deel 6: Odometrie Kalibratie
Nauwkeurige odometrie is kritiek voor autonoom opereren. De Ev3ControlServer blootstelt twee RPC-aanroepen:
command(Control)– stuurt lineaire en hoeksnelheden.state()– retourneert de huidige lineaire en hoeksnelheden.
Met de wielstraal en spoorbreedte, bereken lineaire snelheid als:
if left == right: v = left elif left == -right: v = 0 else: v = (left + right) / 2
Hoeksnelheid wordt afgeleid van het differentieel van de wielsnelheden gedeeld door de spoorbreedte.
Deel 7: Stem-gecontroleerde Autonome Navigatie
De stemdetectie-subgraaf luistert naar een microfoon en emiteert een voice_command_id wanneer een van de getrainde trefwoorden wordt gedetecteerd. Ik trainde een RNN op drie woorden – "jetson", "links" en "rechts" – met behulp van de Isaac Speech Toolkit. Het resulterende model kan gedownload worden uit de projectrepository.
Wanneer een commando wordt ontvangen, publiceert de GoalGenerator een doel naar de globale planner. Bijvoorbeeld, om de robot 90° links te draaien:
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 de praktijk werkt het systeem betrouwbaar in de 10W-energiemodus. Op 5W is de inferentie-latentie (≈30ms) te hoog voor soepelere werking.
Deel 8: Mappen met Gedistribueerde GMapping
Mappen wordt uitgevoerd op een host-PC terwijl de EV3 LiDAR-data levert. Deploy de gedistribueerde GMapping-app op de Jetson:
./engine/build/deploy.sh --remote_user andrei -p //apps/ev3:gmapping_distributed_ev3-pkg -d jetpack43 -h 192.168.0.218
Op de host draaien:
bazel run apps/ev3:gmapping_distributed_host
Zorg dat het host-JSON-bestand wijst naar het juiste Jetson-IP:
'tcp_subscriber': { 'isaac.alice.TcpSubscriber': { 'port': 5000, 'host': '192.168.0.218' } }
Na enkele minuten exploratie wordt een hoge-resolutie bezettingsgrid gegenereerd.
Conclusie
Met een bescheiden investering in LEGO Technic-onderdelen, een YDLIDAR en een Pixy2-camera, kun je een volledig autonoom getraceerde robot bouwen die de volle kracht van NVIDIA's Isaac SDK benut. Het systeem ondersteunt stemcommando's, LiDAR-gebaseerd mappen en GPU-geaccelereerde perceptie, wat het een veelzijdig platform maakt voor onderzoek, educatie en hobbyprojecten.
Alle code, configuratiebestanden en getrainde modellen zijn beschikbaar in de project repository.
Productieproces
- Autonome Donkey Car: TensorFlow MobileNetV2 AI voor Afvalopruiming
- Raspberry Pi Tank: Bereik & Peilingsensoren Toevoegen voor Precieze Navigatie
- JQR Vierpotige Autonome Robot: DIY Looprobot voor Autonome Navigatie en Redding
- Kritieke veiligheidsrichtlijnen voor lasbrandstoftanks
- Hoe u een benzinelek in uw auto snel en veilig repareert
- De Toekomst van Autonome Voertuigen: Technologie, Uitdagingen en Innovaties
- Premium 1:24 CNC-gemachineerd Type 99 Hoofdgevechtstank Model
- Reservetanks: Doel, Typen en Voordelen
- Autonome robot beheerst deurtoegang – Doorbraak voor servicerobots
- NASA's autonome assembler-robots bouwen maanhabitats
- Voorbereiden op een Autonome Toekomst: Hoe Floteigenaren Voorsprong Kunnen Krijgen