机器人运动工作台,支持真实 policy/SDK 状态的只读显示,以及 Elite CS66 离线仿真和 Qt 控制。
当前维护以下使用路径:
- Elite + Qt:交互设置双臂关节、TCP 位姿与夹爪开度,查看仿真运动和碰撞包络。
- Elite + Policy:播放采集动作或手写参考,在同一 3D 视图中对比目标与仿真反馈。
- 真实 Policy + SDK 状态:接收未来 TCP 参考与真实关节/TCP 状态,显示机器人、已走轨迹与当前点。
通过公共只读接口接入,详见 在线显示接口。
在线显示使用独立进程,支持宿主提供的 RGB 图像、真实任务指令和运行事件。
Elite 接入提供头部、双腕与四路触觉面板,子任务和语义动作暂标为
Not connected。
Elite 离线工具支持 diagonal-07、diagonal-08 两种站点,以及 RRD 录制、回放和 Viewer 重连。
在线显示由宿主提供真机数据;机器人控制、SDK 连接和 VLA 推理均由宿主管理。
需要 Python 3.12+。当前验证环境为 CPython 3.12 / Linux x86-64,使用与 SDK 来源记录 匹配的 libpyelite wheel。
wheel 不随 Git 仓库分发,需单独取得或按来源记录构建;同为 0.1.0 的其他构建不保证兼容。在仓库根目录执行:
python3.12 -m venv .venv
source .venv/bin/activate
# 替换为已取得的匹配 wheel 路径
python -m pip install /path/to/libpyelite-0.1.0-cp312-cp312-linux_x86_64.whl
python -m pip install -e '.[elite,rerun,qt]'Qt 仿真、离线 Policy 和在线显示统一使用 Rerun SDK 0.26.2,与 xense-openpi 的 LeRobot 和 teleop 依赖保持一致。请使用同环境附带的 Viewer。
从旧包名升级时,先执行 python -m pip uninstall robot-motion-workbench,再执行上面的安装命令。安装包名为 xense-motion-viewer,Python 导入名为 xense_motion_viewer,命令前缀为 xmv-*。已有环境也需要重新执行安装命令,以更新 Rerun 依赖和入口。
# Qt 交互面板与实时 Rerun Viewer
xmv-elite-qt --collision-profile auto
# 双臂策略参考与仿真反馈
xmv-elite-policyQt 提交运动目标,由原生仿真按速度、加速度与碰撞约束推进。Joint / IK / Follow 页的夹爪输入同步,0% 为闭合、100% 为张开,实际开度单独显示。碰撞包络开关只改变显示;--collision-profile off 才会关闭碰撞检查。
Follow · 虚拟手柄 仅用于 Qt 离线仿真,提供左右臂独立输入球。左键拖动位置,滚轮调整第三轴,右键拖动旋转;按住 Q/E 可在平移时同时旋转。球代表输入设备,不附着在末端,反馈不会把它拉回。松手保留最后目标,重新抓取时从当前仿真 TCP 建立相对基准。FK/IK 与 Follow 的输入互斥,切页本身不取消 SDK 已接受的目标。
Follow 支持从 home 录制、JSON 输入与逐周期反馈保存、按原始控制周期回放,以及 diagonal-08 的“下压+旋转+保持+撤回”离线场景。Rerun 用橙色球显示目标、绿色点显示仿真 TCP。页面显示实际加载的 native .so 路径和 SHA256;同为 libpyelite==0.1.0 不代表同一构建。详见 Follow 操作与对照测试。
Policy 默认播放包内 episode 0:4451 帧、30 Hz、约 148 秒,左右臂 TCP 与夹爪按原始时间戳同步播放一次,无需数据挂载或视频。蓝线是待提交参考,已提交部分隐藏,橙点是选中目标,绿线与机器人模型是仿真反馈。夹爪模拟开合运动,不模拟物体抓取接触。
| 常用参数 | 用途 |
|---|---|
--station diagonal-07 / --station diagonal-08 |
选择站点;未提供 recipe 时默认 diagonal-08 |
--recipe path.yaml |
使用 SDK 的站点与工具配置,须与显式指定的站点一致 |
--display-hz 30 / --display-hz 60 |
Qt / Policy 目标显示频率,默认 30 Hz;不改变动作输入频率或原生仿真步长 |
--arm left / --arm right |
Policy 只播放单臂;默认 both |
--duration 12 |
Policy 只播放前 12 秒 |
--source synthetic / --kind joint |
Policy 使用手写 TCP / 关节参考;采集数据没有关节角 |
--trajectory path.npz |
Policy 使用另一条已导出的采集轨迹 |
--telemetry |
Policy 增加文本状态栏 |
更多选项见各命令的 --help。
xmv-elite-qt --collision-profile auto --save recordings/elite-qt.rrd
xmv-elite-policy --save recordings/elite-policy.rrd
# 结束对应应用、完成写入后回放
xmv-policy-replay recordings/elite-policy.rrd关闭 Viewer 不会停止仿真或录制;Qt 的“打开 Rerun”按钮可重连。Qt / Policy 默认 Viewer 端口为 9876 / 9877,可用 --port 修改。--no-viewer 禁用实时 Viewer,仍可录制。
无需界面的有限步数验证:
xmv-elite-policy --no-viewer --fast --steps 320 --save recordings/smoke.rrd
python -m rerun rrd verify recordings/smoke.rrd从 LeRobot v3 数据集生成带任务及头部、双腕、四路触觉视频的自包含回放:
python scripts/import_elite_episode.py DATASET --episode 1 --output /tmp/episode-001.npz
xmv-elite-policy --trajectory /tmp/episode-001.npz --dataset-media DATASET --episode 1 \
--no-viewer --fast --save recordings/episode-001.rrd数据集媒体回放使用同步显示写入,不采用在线队列的丢帧语义。--fast 只取消墙钟节拍;
原始动作时间、原生仿真步、30 Hz 显示采样及每路视频帧引用均保留。
xmv-elite-record 可单独录制原生仿真状态。录制采用显示采样,可能合并或丢弃显示帧,不是逐控制周期的完整记录;提交成功也不代表已发送或已到达。
安装上述运行依赖后执行:
python -m pip install -e '.[test]'
python -m pytest -q
python -m pip check测试覆盖公共输入与状态、原生规划和碰撞、夹爪、双臂轨迹、RRD 内容、Qt 交互和显示线程。测试中的小型 URDF 仅用于验证变换与网格计算,不提供独立演示入口。
更新支持模型目录的 libpyelite wheel 后,用同一入口选择 TacCap 或 DH AG95:
xmv-elite-qt --list-models
xmv-elite-qt --station diagonal-08 --end-effector dh-ag95 --collision-profile auto
xmv-elite-qt --station diagonal-08 --end-effector taccap --collision-profile auto窗口标题显示当前模型。省略 --end-effector 时,已有 07、08 名称仍选择 TacCap。
--station diagonal-08-dh-ag95 也可直接选择 DH;RRD 录制和 policy 入口共用这份模型目录。
DH 开度映射允许关节角随张开程度减小,滑块仍为 0% 闭合、100% 张开。
DH 测试配置使用法兰 TCP 和 URDF 开合范围,尚未采用实物 DH 标定。可复制该模型的
simulation_recipe.json,配置左右 TCP 后用 --recipe 加载。模型名和 recipe 必须一致。
同一夹爪内的旧指尖重叠按测试范围临时豁免,外部碰撞检查保留;后续更换指尖需在
libpyelite 重新生成资产、审查豁免并验证。具体流程见 libpyelite 的 docs/dh_ag95_collision.md。