如何在云端 GPU 上进行 LeIsaac 远程遥操作?ZMQ 跨机器控制完整指南

发布时间:2026/10/30 16:27:17
如何在云端 GPU 上进行 LeIsaac 远程遥操作?ZMQ 跨机器控制完整指南

【免费下载链接】leisaac

LeIsaac provides teleoperation functionality in IsaacLab using the SO101Leader (LeRobot), including data collection, data conversion, and subsequent policy training.

项目地址:https://gitcode.com/gh_mirrors/le/leisaac
点击查看免费下载

LeIsaac 是一个在 IsaacLab 中实现 SO101Leader(LeRobot)遥操作的开源项目,支持数据采集、数据转换与策略训练。本文讲解如何通过 ZMQ 跨机器通信,把本地连接的机械臂遥操作信号传到云端 GPU 实例,实现真正的LeIsaac 远程遥操作,让 Isaac Sim 仿真跑在云上、机械臂握在手里。

1. 为什么需要跨机器遥操作?

Isaac Sim 对 GPU 要求很高,本地电脑往往带不动,大家通常会把它部署到云端 GPU 实例上。但问题来了:SO101 Leader 机械臂通过 USB 插在你的笔记本上,云端的仿真环境根本"摸不到"这条串口。

LeIsaac 内置了一套ZMQ(ZeroMQ)PUB/SUB 发布订阅机制解决这个矛盾:

  • 本地机器:运行一个轻量发布服务,读取机械臂电机位置并通过网络发送;
  • 云端机器:订阅这些关节状态,用它们驱动仿真中的机械臂。

无需 USB 转发、无需在本地安装 Isaac Sim,只需要一台能跑 Python 的普通电脑即可。

2. ZMQ 跨机器控制的工作原理

整个链路非常简单,两条命令就完成部署:

本地机器(接机械臂) 云端 GPU(Isaac Sim) ┌───────────────────────────┐ ZMQ PUB/SUB ┌─────────────────────────┐ │ so101_joint_state_server │─────────────────►│ SO101LeaderRemote │ │ 以 50 Hz 读取电机并发布 │ tcp:5556 │ teleop_se3_agent.py │ └───────────────────────────┘ │ --remote_endpoint │ └─────────────────────────┘

关键实现位于 so101_joint_state_server.py:它在本地机器上以zmq.PUB模式绑定tcp://0.0.0.0:5556,每 20 毫秒(50 Hz)打包 6 个关节的浮点位置并发出。云端则由 SO101LeaderRemote 设备类以zmq.SUB模式订阅接收,它是本地SO101Leader设备的"即插即用"替代品,环境配置和动作处理完全不用改。

💡 官方文档中这一节的说明见 Remote Teleoperation,可配合阅读。

3. 环境准备:三步装好依赖

先获取项目代码:

git clone https://gitcode.com/gh_mirrors/le/leisaac

云端 GPU 机器(跑 Isaac Sim):安装完整仿真栈(PyTorch、Isaac Sim、IsaacLab),并安装 LeIsaac 的remote依赖(即pyzmq):

pip install "source/leisaac[remote]"

本地机器(接机械臂):只需一条轻量安装,不需要PyTorch / Isaac Sim / IsaacLab 这些重型依赖:

pip install "source/leisaac[remote]"

remote依赖在 pyproject.toml 中定义为pyzmq>=27.0.0,非常轻量。

4. 本地端:启动关节状态发布服务

在插着 Leader 机械臂的机器上,打开终端 1 运行:

python scripts/environments/teleoperation/so101_joint_state_server.py \ --port /dev/ttyACM0 --id leader_arm --rate 50

几个要点:

  • 自动标定:如果找不到标定文件,脚本会自动进入交互式标定流程(移动机械臂到行程中间、按回车、再走过全行程)。标定结果缓存在scripts/environments/teleoperation/.cache/{id}.json,之后无需重复标定;
  • 强制重新标定:加--recalibrate参数即可;
  • --rate:电机读取频率(Hz),遥操作场景下 30–50 Hz 足够流畅。

如果提示串口权限错误(ConnectionError),可临时执行sudo chmod 666 /dev/ttyACM0,或把当前用户加入dialout组后重启。

5. 云端:一条参数接入远程机械臂

在云端 GPU 实例上,打开终端 2,运行 LeIsaac 的遥操作入口 teleop_se3_agent.py,只需多加一个--remote_endpoint参数:

python scripts/environments/teleoperation/teleop_se3_agent.py \ --task=LeIsaac-SO101-PickOrange-v0 \ --teleop_device=so101leader \ --remote_endpoint=tcp://<本地机器IP>:5556 \ --num_envs=1 --device=cuda --enable_cameras

--remote_endpoint的设置逻辑见 teleop_se3_agent.py:一旦指定该参数,程序会自动改用SO101LeaderRemote替代本地串口设备,其余参数(任务名、环境数、相机开关)与本地遥操作完全一致,可以顺手加上--record直接录制 HDF5 数据集。

进入 IsaacLab 窗口后按b键开始遥操作,用本地 Leader 臂控制仿真中的机械臂;完成后按r(重置并标记失败)或n(重置并标记成功)即可切换场景。

6. 网络不通怎么办?SSH 反向端口转发

云实例通常处于 NAT / 防火墙之后,本地 IP 直连不通。此时用SSH 反向端口转发把本地 5556 端口映射到云端的 localhost:

# 在本地笔记本上执行,把本地 5556 端口转发到云实例的 localhost:5556 ssh -R 5556:localhost:5556 ubuntu@<云实例IP>

然后把云端命令中的 endpoint 改为tcp://localhost:5556:

python scripts/environments/teleoperation/teleop_se3_agent.py \ --task=LeIsaac-SO101-PickOrange-v0 \ --teleop_device=so101leader \ --remote_endpoint=tcp://localhost:5556 \ --num_envs=1 --device=cuda --enable_cameras

这条隧道同时解决了"云访问本地"和"内网穿透"两个难题,是最稳妥的方案。

7. 关键参数速查表

参数运行端作用
--remote_endpoint云端ZMQ 订阅地址,如tcp://192.168.1.10:5556或tcp://localhost:5556(SSH 隧道时)
--port本地机械臂串口,默认/dev/ttyACM0
--id本地标定文件 ID,默认leader_arm
--rate本地电机读取频率(Hz),默认 50
--recalibrate本地忽略已有标定,强制重新标定
--bind本地ZMQ 绑定地址,默认tcp://0.0.0.0:5556

8. 常见问题排查

  • 订阅端收不到数据:确认本地发布服务已先启动(日志出现Publishing on tcp://0.0.0.0:5556),再启动云端遥操作;用--rate 30可进一步降频观察;
  • 连接被拒绝 / 超时:检查两端防火墙放行 5556 端口,或改用第 6 节的 SSH 隧道;
  • 机械臂动作不同步:确认本地发布频率未低于 30 Hz,且两端网络延迟较低(建议 50 Hz 默认值);
  • 想换任务或场景:直接修改--task参数即可,LeIsaac 还内置了厨房、卧室等仿真场景,云端部署方式可参考 NVIDIA Brev 云上快速部署。

9. 小结

LeIsaac 的远程遥操作方案把"重活留云端、轻活留本地":云端 GPU 专注跑 Isaac Sim 仿真与数据录制,本地笔记本只负责采集机械臂关节状态,中间一根 ZMQ 管道打通。整套流程只需两条命令加一个--remote_endpoint参数,就能让云端 GPU 与手边机械臂无缝联动,是采集遥操作数据集、训练机器人策略时非常实用的架构。

【免费下载链接】leisaac

LeIsaac provides teleoperation functionality in IsaacLab using the SO101Leader (LeRobot), including data collection, data conversion, and subsequent policy training.

项目地址:https://gitcode.com/gh_mirrors/le/leisaac
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考