ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

如何在云端 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),仅供参考

返回列表