Construcción de un Tanque Lego Autónomo de Bajo Coste con NVIDIA Jetson Nano e Isaac SDK
Construcción de un Tanque Lego Autónomo de Bajo Coste con NVIDIA Jetson Nano e Isaac SDK
En esta guia demuestro cómo transformar un kit LEGO EV3 estándar en un robot de orugas totalmente autónomo, impulsado por una NVIDIA Jetson Nano, el Isaac SDK, un LiDAR YDLIDAR‑X4 y una cámara de visión Pixy2. El resultado es una alternativa económica a los diseños de referencia Carter y Kaya, pero conserva todas las capacidades avanzadas de percepción y planificación de la pila robótica de NVIDIA.
Vaya a la Parte 8 o Parte 10 para una demostración completa de navegación autónoma.
El proyecto consta de los siguientes componentes:
- Placa de desarrollo NVIDIA Jetson Nano — ejecuta el Isaac Robot Engine
- Brick EV3 — controla los motores (incluido en el Kit Robot EV3 31313)
- Base de orugas — construida con piezas LEGO Technic y dos motores grandes (todo incluido en el Kit Robot EV3 31313)
- YDLIDAR X4 LiDAR
- Cámara Pixy2 para visión
Por qué Isaac SDK y no ROS
- Hay muchos tutoriales de ROS, pero apenas unas guías oficiales de Isaac SDK.
- Isaac SDK está diseñado específicamente para hardware Jetson, ofreciendo el mejor rendimiento en la Nano.
- Todos los algoritmos principales —desde percepción hasta planificación— están acelerados por GPU, haciendo la Nano mucho más capaz que una Raspberry Pi 4.
- El renderizador 3D Unity de IsaacSim ofrece simulación fotorrealista que reduce la brecha simulación‑realidad.
Por qué Piezas LEGO
- Amplio stock de piezas disponible.
- Servos de alta calidad y construcción robusta.
- No requiere soldadura; el sistema es totalmente modular.
- Carcasa opcional impresa en 3D para Jetson Nano (ver repositorio PELA‑blocks).
Elegir este camino introduce algunos retos:
- El hardware LEGO no es nativamente compatible con Isaac SDK; solo existen las referencias Carter y Kaya.
- Isaac SDK soporta un conjunto limitado de componentes hardware.
- Se requiere compilación cruzada para objetivos x86‑64, arm64 y armv5tejl.
- Algunos componentes permanecen cerrados (closed source).
Parte 1: Primeros Pasos
1. Instalar Isaac SDK
- Siga la guía oficial de instalación.
- Ejecute aplicaciones de ejemplo para verificar el entorno.
- Use la versión SDK 2019.3 para máxima compatibilidad.
2. Reconocimiento de Voz (Opcional)
- Instale CUDA 10.0, cuDNN 7.6.3 y TensorRT 6.0.
- Instale TensorFlow 1.15.0 con soporte GPU.
3. Imagen EV3dev
Flashee la última imagen ev3dev‑stretch en una tarjeta microSD o microSDHC. microSDXC no es compatible con el brick EV3.
4. Compilador Cruzado ARM para ev3dev
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
Como Ubuntu 18.04 (host y Jetson) usa GLIBC 2.28 mientras ev3dev usa GLIBC 2.24, debemos compilar con enlace dinámico excepto para la librería matemática. Ajuste el archivo jetson-ev3/toolchain/CROSSTOOL en consecuencia, o use una imagen Docker de Debian 9.
5. Espacio de Trabajo Jetson + EV3
git clone https://github.com/andrei-ace/jetson-ev3.git
Edite jetson-ev3/WORKSPACE para apuntar a su ruta de Isaac SDK:
local_repository(
name = 'com_nvidia_isaac',
path = '/home/andrei/ml/isaac'
)
Y actualice la ruta del toolchain en jetson-ev3/toolchain/CROSSTOOL:
# edite con su ruta al toolchain
linker_flag: '-L/home/andrei/ml/jetson-ev3/toolchain'
6. Conectar Jetson Nano con EV3
Use un cable USB‑A a mini‑USB. Haga SSH al EV3 desde la Jetson:
ssh user@ev3dev.local
Contraseña por defecto: maker.
7. Tutorial Ping‑Pong
El Codelet "Ping‑Pong" de Isaac demuestra comunicación entre procesos. Adáptelo para enviar mensajes entre la Jetson y el brick EV3.
Compile el servidor EV3:
bazel build --config=ev3dev //apps/ev3/ping_pong:ev3_pong
Despliegue el cliente en la 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>
Ejecute ambos binarios. El EV3 debería "hablar" los mensajes "Ping".
Parte 2: Controlar un Motor desde Isaac
Usando los mismos principios, controle los motores EV3 mediante un driver personalizado de Isaac que imita la base Segway RMP. El Ev3ControlServer se ejecuta en el EV3:
bazel build --config=ev3dev //packages/ev3/ev3dev:ev3_control_server
ev3_control_server ev3dev.local:9000
Integre el servidor con el Sight joystick virtual para teleoperación manual.
Parte 3: Construcción del Robot
El chasis sigue de cerca el diseño oficial EV3 Track3r de LEGO. La carcasa de Jetson Nano proviene de este repositorio GitHub.
Parte 4: Arquitectura de Apps Isaac
Una App Isaac consta de tres capas:
- Graph – nodos: define los componentes.
- Graph – aristas: define el flujo de datos.
- Configuración: parametriza los nodos.
A continuación, un ejemplo conciso de una app de navegación controlada por voz. (Ver la carpeta completa voice_control para todos los archivos JSON.)
{
'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': [...]
}
}
Los subgrafos son reutilizables; la pila de navegación se comparte en todas las variantes de robot.
Parte 5: Ejecutar Apps Isaac en EV3
El driver EV3 implementa la misma API que la base Segway RMP, permitiendo reutilizar directamente apps de Isaac existentes como el controlador joystick, GMapping distribuido y pila completa de navegación.
Parte 6: Calibración de Odometría
La odometría precisa es crítica para operación autónoma. El Ev3ControlServer expone dos llamadas RPC:
command(Control)— envía velocidades lineal y angular.state()— devuelve las velocidades lineal y angular actuales.
Usando el radio de rueda y ancho de vía, calcule la velocidad lineal como:
if left == right:
v = left
elif left == -right:
v = 0
else:
v = (left + right) / 2
La velocidad angular se deriva del diferencial de velocidades de rueda dividido por el ancho de vía.
Parte 7: Navegación Autónoma Controlada por Voz
El subgrafo de detección de voz escucha un micrófono y emite un voice_command_id cuando detecta una de las palabras clave entrenadas. Entrené una RNN en tres palabras —"jetson", "left" y "right"— usando el Isaac Speech Toolkit. El modelo resultante puede descargarse del repositorio del proyecto.
Al recibir un comando, el GoalGenerator publica un objetivo al planificador global. Por ejemplo, para rotar el robot 90° a la izquierda:
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();
En la práctica, el sistema funciona de forma fiable en modo de 10 W. A 5 W la latencia de inferencia (≈30 ms) es demasiado alta para operación fluida.
Parte 8: Mapeo con GMapping Distribuido
El mapeo se realiza en un PC host mientras el EV3 proporciona datos LiDAR. Despliegue la app GMapping distribuida en la Jetson:
./engine/build/deploy.sh --remote_user andrei -p //apps/ev3:gmapping_distributed_ev3-pkg -d jetpack43 -h 192.168.0.218
En el host ejecute:
bazel run apps/ev3:gmapping_distributed_host
Asegúrese de que el archivo JSON del host apunte a la IP correcta de la Jetson:
'tcp_subscriber': {
'isaac.alice.TcpSubscriber': {
'port': 5000,
'host': '192.168.0.218'
}
}
Tras unos minutos de exploración, se genera una cuadrícula de ocupación de alta resolución.
Conclusión
Con una inversión modesta en piezas LEGO Technic, un YDLIDAR y una cámara Pixy2, puede construir un robot de orugas totalmente autónomo que aprovecha toda la potencia del Isaac SDK de NVIDIA. El sistema soporta comandos de voz, mapeo basado en LiDAR y percepción acelerada por GPU, convirtiéndolo en una plataforma versátil para investigación, educación y proyectos de hobby.
Todo el código, archivos de configuración y modelos entrenados están disponibles en el repositorio del proyecto.
Proceso de manufactura
- Coche Autónomo Donkey Car: TensorFlow MobileNetV2 IA para Recogida de Basura
- Tanque Raspberry Pi: Añadir sensores de distancia y rumbo para navegación precisa
- JQR Robot Cuadrúpedo Autónomo: Robot de Patas DIY para Navegación y Rescate Autónomos
- Directrices críticas de seguridad para soldadura de depósitos de combustible
- Cómo reparar una fuga de gasolina en el coche: soluciones rápidas y seguras
- El futuro de los vehículos autónomos: tecnología, desafíos e innovaciones
- Modelo Premium 1:24 de Tanque de Batalla Principal Tipo 99 Mecanizado CNC
- Depósitos de reserva (reserve tanks): autonomía extra para combustible, agua y aceite
- Robot Autónomo Domina Entrada por Puertas: Avance para Robots de Servicio
- Robots ensambladores autónomos de NASA construyen hábitats lunares
- Preparándose para un Futuro Autónomo: Cómo los Propietarios de Flotas Pueden Adelantarse