Files
acRealman_xr/docs/superpowers/specs/2026-07-28-rm75-idempotent-tool-frame-design.md
T

62 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RM75 工具坐标系幂等配置设计
## 目标
修复遥操作节点每次启动都无条件创建 RealMan 工具坐标系、忽略重复名称错误,
随后仍误报“外设配置完成”的问题。
本修复只处理控制器工具坐标系的创建、更新、切换和返回值检查,不修改夹爪
IO、Modbus、Placo、URDF 或任何机械臂运动控制参数。
## 根因
右臂 `scissorgripper: 1` 选择 `peripherals_rm75.yaml` 中的 `omnipic`
`configure_peripheral_on_connect` 默认为 `true`,因此节点每次启动都会进入
`peripheral_cfg()`
当前实现无条件执行:
```python
robot.rm_set_manual_tool_frame(frame=tool_frame)
robot.rm_change_tool_frame(tool_name)
```
RealMan 控制器会持久保存工具坐标系。首次启动创建成功,后续启动因
`omnipic` 已存在而创建失败。两个返回值均未检查,因此代码继续执行并输出
配置成功日志;若 YAML 中的 TCP、重量或重心已变化,控制器仍可能保留旧值。
## 方案
`fun_peripheral.py` 中增加一个小型内部函数,负责单一工具坐标系的幂等
配置:
1. 调用 `rm_get_total_tool_frame()` 获取现有工具坐标系名称并检查
`return_code`
2. 若目标名称不存在,调用 `rm_set_manual_tool_frame()`
3. 若目标名称已存在,调用 `rm_update_tool_frame()`
4. 检查创建或更新返回值。
5. 调用 `rm_change_tool_frame()` 并检查返回值。
任一步失败都抛出包含 SDK 操作名称和返回码的 `RuntimeError`。异常沿现有
节点初始化链路向上传播,因此不会继续误报“外设配置完成”。
不通过“先删除再创建”实现更新,避免在切换中的控制器上产生短暂无工具
坐标系状态。
## 测试
在现有外设相关测试文件中使用 FakeArm 覆盖:
- 名称不存在时只调用创建,然后切换;
- 名称存在时只调用更新,然后切换;
- 查询、创建/更新或切换失败时抛出明确错误。
随后运行:
- `xr_rm_teleop` 全部 pytest
- `test_orientation_control.py`
- `/home/robot/WS_xr` 下的 `colcon build --symlink-install`
Codex 不连接真机。真机验证由用户重新启动右臂 launch,确认不再出现
`Failed to create the tool frame system`,并能看到外设配置完成日志。