Robot I/O 模式
robot_io 控制 policy 怎么读取机器人低层状态、发送低层命令。它和下面两个选项是分开 的:
inference_backend:控制 ONNX / TensorRT policy 推理后端。motion_backend:控制参考动作来源。
用 sim_env/base_sim.py 跑 sim2sim 时,policy 保持 --robot-io zmq。上真机时,在下面三种方式里选一种。
快速选择
| 模式 | 进程 | 什么时候用 |
|---|---|---|
--robot-io inline --robot g1 | 只跑 policy | 推荐的 G1 路径。policy 跑在有 unitree_interface 的机器上,少一跳 ZMQ bridge。 |
--robot-io zmq + scripts/g1/real_bridge.py | policy + Python DDS bridge | 使用基于 unitree_sdk2py 的 G1 分进程 bridge。 |
--robot-io zmq + scripts/g1/real_bridge_cpp.py | policy + unitree_interface bridge | 保留 ZMQ 协议,同时使用 unitree_interface 机器人绑定。 |
如果真机测试时关节剧烈抖动,或者高动态、高速度 motion 效果明显不好,优先怀疑
ZMQ I/O 延迟不稳定。建议先试 --robot-io inline,再考虑重新调 policy 或 PD 参数。
Inline
inline 模式会在 BasePolicy 里创建 G1 RobotIO backend。policy runtime 通过
backend 读取统一的 RobotState、发送命令,不需要启动 real bridge。
uv run sim2real/rl_policy/tracking.py \
--robot-io inline \
--policy-config checkpoints/mimic-lite/roa/policy.yaml
真机部署时如果关心延迟稳定性,优先用这个模式。只有机器人网卡不是默认 eth0
时,才额外加 --robot-interface <robot_network_interface>。
ZMQ + scripts/g1/real_bridge.py
这个模式把 policy 和 robot bridge 分成两个进程。bridge 使用 unitree_sdk2py,
把机器人状态发布成 ZMQ low_state,再把 ZMQ low_cmd 下发到机器人。
终端 1:
uv run scripts/g1/real_bridge.py
终端 2:
uv run sim2real/rl_policy/tracking.py \
--policy-config checkpoints/mimic-lite/roa/policy.yaml
只有机器人网卡不是默认 eth0 时,才在 bridge 命令里加
--interface <robot_network_interface>。
ZMQ + scripts/g1/real_bridge_cpp.py
这个模式 和 scripts/g1/real_bridge.py 使用同一套 ZMQ 协议,但 bridge 里用 unitree_interface
做机器人 I/O。
终端 1:
uv run scripts/g1/real_bridge_cpp.py
终端 2:
uv run sim2real/rl_policy/tracking.py \
--policy-config checkpoints/mimic-lite/roa/policy.yaml
只有机器人网卡不是默认 eth0 时,才在 bridge 命令里加
--interface <robot_network_interface>。
使用建议
正常真机部署优先用 inline。如果需要进程隔离、想分开 debug policy 和 robot bridge,
或者正在用 base_sim.py 跑 sim2sim,就用 ZMQ bridge 模式。