play_real 进程订阅位姿、跑 ONNX 推理,把动作命令闭环下发到手部驱动。
本页假设装置已搭建并标定。若未完成,先看硬件搭建。
部署无需训练。从 Releases 下载预训练的
policy.onnx 与 policy_config.json,把 policy.onnx 路径作为 --ckpt 传入。演示效果即来自该 release 策略。管线
RealHandEnv 继承 mjlab 的 ManagerBasedRlEnv,因此与训练相同的 observation 和 action manager 原封不动地生效,没有并行流水线。在 env 的 step() 内,动作下发到手部驱动,观测来自关节状态(经驱动)与 cube 位姿(经 observer 的 ZMQ)的组合。
ONNX 策略通过一个 loader 加载,它读取 sidecar JSON 中导出时捕获的控制模式参数(action_scale、ema_alpha、warmup_time_s、control_mode、history_len、ctrl_dt)。这让部署推理与产出该 ONNX 的仿真策略完全一致。
运行闭环
完成硬件设置后,三个命令各自在独立终端按顺序运行。home 是一次性复位。vision 与 play-real 都会持续运行,不能共用一个终端。
位姿估计调优
硬件固定后,observer.yaml 提供四个旋钮,在噪声与延迟之间权衡。
observer.yaml 内嵌两套预设:
- Agile(快速响应,噪声更大):
process_noise: 0.5、measurement_noise: 0.1、alpha: 0.8 - Smooth(稳定,响应更慢):
process_noise: 0.01、measurement_noise: 2.0、alpha: 0.2
- Cube 静止时抖动——切换到 smooth 预设。
- 快速翻转时位姿滞后——切换到 agile 预设。
- Cube 反复跌入 lost——把
pnp.reproj_threshold提高到约 8.0 px,并重新检查相机内参标定。若轴向显示异常,修改cube_tags.json的face_rotations或重贴对应面的 tag。
端到端冒烟测试
按顺序走完以下五个检查点。若任何一步失败,先跳回对应设置章节再继续。步骤 1 — 让手回零
步骤 2 — 启动 cube observer
步骤 3 — 验证 ZMQ 位姿流
另开一个终端(保持vision 持续运行),确认 cube 位姿正在端口 5555 上发布:
步骤 4 — cube 位姿可视化检查
保持vision 仍在运行:
- 轴向错配——让物理 cube 绕某个面轴旋转,渲染 cube 应绕同一个轴。镜像或 90° 偏差意味着
cube_tags.json的face_rotations不对,或某个 tag 贴反了。 - 位置偏差——把 cube 放在手掌中心,渲染 cube 应落在 palm geom 上。> 2 cm 偏差通常意味着手部安装或相机内参有问题。
步骤 5 — 运行闭环策略
排错
策略背后的任务设计见架构。