用 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 开发板 – 运行 Isaac Robot Engine
- EV3 主控砖 – 控制电机(含在 EV3 31313 机器人套件)
- 履带底盘 – 乐高 Technic 零件和两个大电机搭建(全在 EV3 31313 机器人套件)
- YDLIDAR X4 激光雷达
- Pixy2 视觉相机
为何选 Isaac SDK 而非 ROS?
- ROS 教程众多,但官方 Isaac SDK 指南寥寥。
- Isaac SDK 专为 Jetson 硬件打造,在 Nano 上性能最优。
- 核心算法——从感知到规划——全 GPU 加速,让 Nano 远超树莓派 4。
- IsaacSim 的 Unity 3D 渲染器提供照片级真实仿真,缩小现实差距。
为何用乐高零件?
- 零件库存丰富。
- 高质量舵机和坚固结构。
- 免焊接;系统完全模块化。
- 可选 Jetson Nano 3D 打印外壳(见 PELA-blocks 仓库)。
此路径也带来挑战:
- 乐高硬件非 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。
- 安装带 GPU 支持的 TensorFlow 1.15.0。
3. EV3dev 镜像
将最新 ev3dev-stretch 镜像刷入 microSD 或 microSDHC 卡。microSDXC 不被 EV3 主控砖支持。
4. EV3 用 ARM 交叉编译器
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
因 Ubuntu 18.04(宿主和 Jetson)用 GLIBC 2.28,ev3dev 用 GLIBC 2.24,除数学库外必须动态链接。相应调整 jetson-ev3/toolchain/CROSSTOOL 文件,或用 Debian 9 Docker 镜像。
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 线。从 Jetson SSH 进 EV3:
ssh user@ev3dev.local
默认密码:maker。
7. Ping-Pong 教程
Isaac 的“Ping-Pong”代码演示进程间通信。改造它在 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 控制电机
用同原理,通过模仿 Segway RMP 底盘的自定义 Isaac 驱动控制 EV3 电机。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:参数化节点。
下面是语音控制导航应用的简例(完整 voice_control 文件夹含所有 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': [...] }
}
子图可复用;导航栈在所有机器人变体间共享。
第 5 部分:在 EV3 运行 Isaac Apps
EV3 驱动实现与 Segway RMP 底盘相同 API,可直接复用现有 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。我用 Isaac Speech Toolkit 在三词——“jetson”、“left”、“right”上训练 RNN。模型可从项目仓库下载。
收到指令时,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();
实测在 10W 功耗模式可靠工作。5W 模式下推理延迟(≈30ms)过高,操作不流畅。
第 8 部分:分布式 GMapping 建图
建图在宿主 PC 进行,EV3 提供激光雷达数据。在 Jetson 部署分布式 GMapping 应用:
./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 指向正确 Jetson IP:
'tcp_subscriber': { 'isaac.alice.TcpSubscriber': { 'port': 5000, 'host': '192.168.0.218' } }
探索几分钟后生成高分辨率占用网格地图。
结论
以适度投入乐高 Technic 零件、YDLIDAR 和 Pixy2 相机,即可构建全自主履带机器人,发挥 NVIDIA Isaac SDK 全威力。系统支持语音指令、激光雷达建图、GPU 加速感知,成为科研、教育、爱好项目的多功能平台。
所有代码、配置文件和训练模型见项目 仓库。
制造工艺
- 自主驾驶 Donkey Car:TensorFlow MobileNetV2 实现垃圾识别与拾取
- 树莓派坦克:添加测距与方位传感器实现精准导航
- JQR 四足自主机器人:DIY 腿足机器人用于自主导航与救援
- 燃油箱焊接安全红线:关键规范与操作指南
- 汽车油箱漏油应急修复:症状识别、成因分析、金属/塑料油箱补漏实操
- 自动驾驶汽车的未来:技术、挑战与创新
- 1:24精密CNC加工99A主战坦克模型
- 备用油箱/储备罐详解:车辆、市政与工业的燃料应急后盾
- 自主机器人掌握开门进门——服务机器人突破
- NASA 自主组装机器人构建月球栖息地
- 自动驾驶技术聚会亮点:Richard Bishop洞见分享
- 迎接自动驾驶未来:车队所有者如何抢占先机