Construindo Tanque LEGO Autônomo de Baixo Custo com NVIDIA Jetson Nano e Isaac SDK
Construindo Tanque LEGO Autônomo de Baixo Custo com NVIDIA Jetson Nano e Isaac SDK
Neste guia demonstro como transformar kit LEGO EV3 padrão em robô tracked totalmente autônomo, alimentado por NVIDIA Jetson Nano, Isaac SDK, LiDAR YDLIDAR-X4 e câmera visão Pixy2. Resultado é alternativa budget-friendly aos designs de referência Carter e Kaya, ainda retendo todas capacidades avançadas de percepção e planejamento da stack robótica NVIDIA.
Vá para Parte 8 ou Parte 10 para demo completa de navegação autônoma.
Projeto consiste nos seguintes componentes:
- NVIDIA Jetson Nano dev board – roda Isaac Robot Engine
- Brick EV3 – controla motores (incluído no Kit Robô EV3 31313)
- Base tracked – construída de peças LEGO Technic e dois motores large (tudo no Kit Robô EV3 31313)
- YDLIDAR X4 LiDAR
- Pixy2 câmera para visão
Por Que Isaac SDK e Não ROS?
- Existem muitos tutoriais ROS, mas poucos guias oficiais Isaac SDK.
- Isaac SDK é purpose-built para hardware Jetson, dando melhor performance no Nano.
- Todos algoritmos core — de percepção a planejamento — são GPU-accelerados, tornando Nano muito mais capaz que Raspberry Pi 4.
- Unity 3D renderer do IsaacSim entrega simulação fotorrealista que facilita reality gap.
Por Que Peças LEGO?
- Vasto estoque de peças disponível.
- Servos high-quality e construção robusta.
- Sem solda requerida; sistema totalmente modular.
- Case 3D-impresso opcional para Jetson Nano (veja repo PELA-blocks).
Escolher este caminho introduz alguns desafios:
- Hardware LEGO não nativamente suportado por Isaac SDK; apenas referências Carter e Kaya existem.
- Isaac SDK suporta conjunto limitado de componentes hardware.
- Cross-compilação requerida para targets x86-64, arm64 e armv5tejl.
- Alguns componentes permanecem closed source.
Parte 1: Começando
1. Instalar Isaac SDK
- Siga guia instalação oficial.
- Rode aplicações sample para verificar ambiente.
- Use versão 2019.3 SDK para máxima compatibilidade.
2. Reconhecimento de Voz (Opcional)
- Instale CUDA 10.0, cuDNN 7.6.3 e TensorRT 6.0.
- Instale TensorFlow 1.15.0 com suporte GPU.
3. Imagem EV3dev
Grave última imagem ev3dev-stretch em cartão microSD ou microSDHC. microSDXC não suportado pelo brick EV3.
4. Cross-Compiler ARM para ev3dev
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi Como Ubuntu 18.04 (host e Jetson) usa GLIBC 2.28 enquanto ev3dev usa GLIBC 2.24, devemos compilar com linking dinâmico exceto para math library. Ajuste arquivo jetson-ev3/toolchain/CROSSTOOL accordingly, ou use imagem Docker Debian 9.
5. Workspace Jetson + EV3
git clone https://github.com/andrei-ace/jetson-ev3.git Edite jetson-ev3/WORKSPACE para apontar para seu path Isaac SDK:
local_repository( name = 'com_nvidia_isaac', path = '/home/andrei/ml/isaac' ) E atualize path toolchain em jetson-ev3/toolchain/CROSSTOOL:
# edit with your path to the toolchain linker_flag: '-L/home/andrei/ml/jetson-ev3/toolchain' 6. Conectar Jetson Nano com EV3
Use cabo USB-A para mini-USB. SSH no EV3 do Jetson:
ssh user@ev3dev.local Senha padrão: maker.
7. Tutorial Ping-Pong
Codelet "Ping-Pong" do Isaac demonstra comunicação inter-processo. Adapte para enviar mensagens entre Jetson e brick EV3.
Build servidor EV3:
bazel build --config=ev3dev //apps/ev3/ping_pong:ev3_pong Deploy cliente no 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> Rode ambos binários. EV3 deve falar mensagens "Ping".
Parte 2: Controlando Motor do Isaac
Usando mesmos princípios, controle motores EV3 via driver Isaac custom que imita base Segway RMP. Ev3ControlServer roda no EV3:
bazel build --config=ev3dev //packages/ev3/ev3dev:ev3_control_server ev3_control_server ev3dev.local:9000 Integre servidor com Sight virtual joystick para teleoperação manual.
Parte 3: Construindo o Robô
Chassi segue de perto design oficial EV3 Track3r da LEGO. Case Jetson Nano vem de este repo GitHub.
Parte 4: Arquitetura Apps Isaac
App Isaac consiste em três camadas:
- Graph – nodes: define componentes.
- Graph – edges: define fluxo dados.
- Configuration: parametriza nodes.
Abaixo exemplo conciso de app navegação controlada por voz. (Veja pasta voice_control completa para todos 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 são reutilizáveis; stack navegação compartilhada across todas variantes robô.
Parte 5: Rodando Isaac Apps no EV3
Driver EV3 implementa mesma API da base Segway RMP, permitindo reuso direto de apps Isaac existentes como controlador joystick, GMapping distribuído e stack navegação completa.
Parte 6: Calibração Odometria
Odometria precisa é crítica para operação autônoma. Ev3ControlServer expõe duas chamadas RPC:
command(Control)– envia velocidades linear e angular.state()– retorna velocidades linear e angular atuais.
Usando raio roda e track width, calcule velocidade linear como:
if left == right: v = left elif left == -right: v = 0 else: v = (left + right) / 2 Velocidade angular derivada do diferencial velocidades rodas dividido por track width.
Parte 7: Navegação Autônoma Controlada por Voz
Subgraph detecção voz escuta microfone e emite voice_command_id quando palavra-chave treinada detectada. Treinei RNN em três palavras — "jetson", "left", "right" — usando Isaac Speech Toolkit. Modelo resultante baixável do repositório projeto.
Quando comando recebido, GoalGenerator publica goal ao global planner. Exemplo, rotacionar robô 90° esquerda:
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(); Na prática, sistema funciona confiavelmente no modo 10 W. A 5 W latência inferência (≈30 ms) é alta demais para operação suave.
Parte 8: Mapeamento com GMapping Distribuído
Mapeamento realizado em host PC enquanto EV3 fornece dados LiDAR. Deploy app GMapping distribuído no Jetson:
./engine/build/deploy.sh --remote_user andrei -p //apps/ev3:gmapping_distributed_ev3-pkg -d jetpack43 -h 192.168.0.218 No host rode:
bazel run apps/ev3:gmapping_distributed_host Garanta arquivo JSON host aponta para IP correto Jetson:
'tcp_subscriber': { 'isaac.alice.TcpSubscriber': { 'port': 5000, 'host': '192.168.0.218' } } Após alguns minutos exploração, grid ocupação high-res gerado.
Conclusão
Com investimento modesto em peças LEGO Technic, YDLIDAR e câmera Pixy2, você pode construir robô tracked totalmente autônomo que alavanca poder total do Isaac SDK da NVIDIA. Sistema suporta comandos de voz, mapeamento LiDAR-based e percepção GPU-accelerada, tornando plataforma versátil para pesquisa, educação e projetos hobby.
Todo código, arquivos config e modelos treinados disponíveis no repositório projeto.
Processo de manufatura
- Carro Autônomo Donkey Car: IA TensorFlow MobileNetV2 para Coleta de Lixo
- Raspberry Pi Tank: Adicionando Sensores de Alcance e Rumo para Navegação Precisa
- JQR Quadrúpede Autônomo: Robô de Pernas DIY para Navegação e Resgate Autônomos
- Preparando para Futuro Autônomo: Como Donos de Frotas Podem Sair na Frente
- Modelo Premium 1:24 de Tanque de Batalha Principal Tipo 99 Usinado CNC
- Robô Autônomo Domina Entrada por Portas – Um Avanço para Robôs de Serviço
- Robôs Montadores Autónomos da NASA Constroem Habitats Lunares
- Tanques de Reserva: Propósito, Tipos e Benefícios
- Diretrizes Críticas de Segurança para Soldagem de Tanques de Combustível
- Como Consertar Vazamento de Combustível no Carro: Guia Rápido e Seguro