Построение дешёвого автономного лего-танка на NVIDIA Jetson Nano и Isaac SDK
Построение дешёвого автономного лего-танка на NVIDIA Jetson Nano и Isaac SDK
В этом руководстве демонстрируется, как превратить стандартный набор LEGO EV3 в полностью автономный гусеничный робот на базе NVIDIA Jetson Nano, Isaac SDK, лидара YDLIDAR-X4 и камеры зрения Pixy2. Результат — бюджетная альтернатива референсным дизайнам Carter и Kaya, сохраняющая все продвинутые возможности восприятия и планирования стека NVIDIA робототехники.
Перейдите к Части 8 или Части 10 для полной демо автономной навигации.
Проект состоит из компонентов:
- NVIDIA Jetson Nano dev board — запускает Isaac Robot Engine
- EV3 brick — управляет моторами (входит в EV3 31313 Robot Kit)
- Гусеничное основание — из LEGO Technic деталей и двух больших моторов (всё в EV3 31313 Robot Kit)
- YDLIDAR X4 LiDAR
- Pixy2 камера для зрения
Почему Isaac SDK, а не ROS?
- ROS туториалов много, но официальных гайдов по Isaac SDK — единицы.
- Isaac SDK создан специально для железа Jetson, давая лучшую производительность на Nano.
- Все базовые алгоритмы — от восприятия до планирования — GPU-ускорены, делая Nano гораздо способнее Raspberry Pi 4.
- IsaacSim с Unity 3D рендерером даёт фотореалистичную симуляцию, облегчающую sim2real gap.
Почему LEGO детали?
- Огромный запас деталей под рукой.
- Качественные сервоприводы и надёжная конструкция.
- Нет пайки; система полностью модульная.
- Опциональный 3D-печатный корпус для Jetson Nano (см. PELA-blocks repo).
Выбор этого пути вносит сложности:
- LEGO железо не нативно поддерживается Isaac SDK; только референсы Carter и Kaya.
- Isaac SDK поддерживает ограниченный набор компонентов.
- Требуется кросс-компиляция для x86-64, arm64, armv5tejl.
- Некоторые компоненты остаются закрытыми.
Часть 1: Начало работы
1. Установка Isaac SDK
- Следуйте официальному гайду.
- Запустите примеры приложений для проверки окружения.
- Используйте версию 2019.3 SDK для максимальной совместимости.
2. Распознавание голоса (опционально)
- Установите CUDA 10.0, cuDNN 7.6.3, TensorRT 6.0.
- Установите TensorFlow 1.15.0 с GPU поддержкой.
3. Образ EV3dev
Прошейте последний ev3dev-stretch образ на microSD или microSDHC. microSDXC не поддерживается EV3 блоком.
4. ARM кросс-компилятор для ev3dev
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
Так как Ubuntu 18.04 (хост и Jetson) использует GLIBC 2.28, а ev3dev — GLIBC 2.24, нужно компилировать с динамической линковкой, кроме math библиотеки. Скорректируйте jetson-ev3/toolchain/CROSSTOOL соответственно или используйте Docker-образ Debian 9.
5. Рабочее пространство Jetson + EV3
git clone https://github.com/andrei-ace/jetson-ev3.git
Отредактируйте jetson-ev3/WORKSPACE для указания пути к Isaac SDK:
local_repository(
name = 'com_nvidia_isaac',
path = '/home/andrei/ml/isaac'
)
И обновите путь тулчейна в jetson-ev3/toolchain/CROSSTOOL:
# edit with your path to the toolchain
linker_flag: '-L/home/andrei/ml/jetson-ev3/toolchain'
6. Соединение Jetson Nano с EV3
Используйте USB-A на mini-USB кабель. SSH в EV3 с Jetson:
ssh user@ev3dev.local
Дефолтный пароль: maker.
7. Туториал Ping-Pong
Isaac's «Ping-Pong» Codelet демонстрирует межпроцессное общение. Адаптируйте для обмена сообщениями между Jetson и EV3 блоком.
Соберите EV3 сервер:
bazel build --config=ev3dev //apps/ev3/ping_pong:ev3_pong
Развёрните клиент на 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>
Запустите оба бинарника. EV3 должен проговорить сообщения «Ping».
Часть 2: Управление мотором из Isaac
Используя те же принципы, управляйте EV3 моторами через кастомный Isaac драйвер, имитирующий базу Segway RMP. Ev3ControlServer запускается на EV3:
bazel build --config=ev3dev //packages/ev3/ev3dev:ev3_control_server
ev3_control_server ev3dev.local:9000
Интегрируйте сервер с Sight виртуальным джойстиком для ручной телеоперации.
Часть 3: Сборка робота
Шасси в точности следует официальному EV3 Track3r дизайну. Корпус Jetson Nano взят из этого GitHub репо.
Часть 4: Архитектура Isaac Apps
Isaac App состоит из трёх слоёв:
- Graph – nodes: определяет компоненты.
- Graph – edges: определяет поток данных.
- Configuration: параметризует узлы.
Ниже краткий пример голосового навигационного приложения. (Полные JSON файлы в папке voice_control.)
{
'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': [...]
}
}
Подграфы переиспользуемы; навигационный стек общий для всех вариантов роботов.
Часть 5: Запуск Isaac Apps на EV3
EV3 драйвер реализует тот же API, что и Segway RMP base, позволяя прямой переиспользование существующих Isaac приложений: джойстик-контроллер, распределённый GMapping, полный навигационный стек.
Часть 6: Калибровка одометрии
Точная одометрия критична для автономной работы. Ev3ControlServer экспонирует два RPC вызова:
command(Control)— отправка линейной и угловой скоростей.state()— возврат текущих линейной и угловой скоростей.
Используя радиус колеса и ширину гусениц, линейная скорость вычисляется:
if left == right:
v = left
elif left == -right:
v = 0
else:
v = (left + right) / 2
Угловая скорость выводится из разности скоростей колёс, делённой на ширину гусениц.
Часть 7: Голосовое управление автономной навигацией
Подграф детекции голоса слушает микрофон и эмитит voice_command_id при детекции обученных ключевых слов. Обучил RNN на трёх словах — «jetson», «left», «right» — с Isaac Speech Toolkit. Модель доступна в репозитории проекта.
При получении команды GoalGenerator публикует цель в глобальный планировщик. Например, поворот робота на 90° влево:
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();
На практике система работает надежно в режиме 10 Вт. При 5 Вт латентность инференса (≈30 мс) слишком высока для плавной работы.
Часть 8: Картирование с распределённым GMapping
Картирование выполняется на хост-ПК, пока EV3 поставляет данные LiDAR. Развёрните distributed GMapping приложение на Jetson:
./engine/build/deploy.sh --remote_user andrei -p //apps/ev3:gmapping_distributed_ev3-pkg -d jetpack43 -h 192.168.0.218
На хосте запустите:
bazel run apps/ev3:gmapping_distributed_host
Убедитесь, что хост JSON указывает на правильный IP Jetson:
'tcp_subscriber': {
'isaac.alice.TcpSubscriber': {
'port': 5000,
'host': '192.168.0.218'
}
}
После нескольких минут исследования генерируется высокорезолюционная сетка занятости.
Заключение
Со скромными вложениями в LEGO Technic, YDLIDAR и Pixy2 можно построить полностью автономный гусеничный робот, использующий всю мощь NVIDIA Isaac SDK. Система поддерживает голосовые команды, LiDAR-картирование, GPU-ускоренное восприятие — универсальная платформа для исследований, образования и хобби.
Весь код, конфиги и обученные модели доступны в репозитории проекта.
Производственный процесс
- Автономный Donkey Car: TensorFlow MobileNetV2 ИИ для сбора мусора
- Raspberry Pi Tank: Добавление датчиков дальности и азимута для точной навигации
- JQR Четвероногий автономный робот: DIY шагающий робот для автономной навигации и спасения
- Подготовка к автономному будущему: Как владельцы флеетов могут опередить
- Премиальная модель танка Тип 99 1:24, изготовленная CNC обработкой
- Автономный робот освоил вход через дверь — Прорыв для сервисных роботов
- Автономные ассемблеры NASA строят лунные обители
- Резервные баки: назначение, виды и преимущества
- Критически важные правила безопасности при сварке топливных баков
- Как быстро и безопасно устранить утечку бензина