Files
mujoco_linkerbot/tools/o30_right_calibration/README.md
T

69 lines
4.9 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.
# O30 右手 V10:新零位约束下的保守修正
本轮先调整右手。左手 V9、`exports/O30_V9_left_right/` 及其左右手副本均未更新。
## 启动与新零位
```bash
./hands/O30/scripts/run_o30_right_mujoco_plan.sh
```
默认加载 `linkerhand_o30_right_zero_v10_calibrated.urdf`。重启窗口后,启动/张开预设采用用户本次给出的零位:
```
[0,0,255,197,110,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
```
话题仍为 `/cb_right_hand_control_cmd`,20 个 SDK 0~255 值,按 URDF lower~upper 纯线性换算。零位偏移写在 URDF origin,不存在新增分段或特殊指令分支。
## 修改范围与照片依据
照片显示四指接近并行、侧面接近伸直,但未提供相机内外参或实测角度。本轮使用“接近并行/伸直”的几何先验,不声称做了精确照片测角或逐像素配准。渲染对比两版使用同一组新零位指令和相同视角,避免以改变相机掩盖模型差异。
仅修改以下六个关节的 origin 旋转和 limit upper:
- 四指侧摆:`index_mcp_roll`、`middle_mcp_roll`、`ring_mcp_roll`、`pinky_mcp_roll`。
- 食指弯曲:`index_mcp_pitch`、`index_pip`。
其余 14 个关节参数、关节轴、网格、质量、惯量、连杆长度、拇指全部保持 V9。四指侧摆在新零位下的原始模型角度约 −0.126°、0.232°、0.477°、1.105° 调到 0°;食指指根及中间关节由约 1.632°、3.145° 调到 0°。
这里的 0° 是原始模型中的几何伸直先验,不是从照片精确量出的真机角度。不是所有 20 个指令或 URDF qpos 都为 0。
食指指尖 SDK 值在零位和食指捏合时均为 0。如果同时要求捏合完整姿态不变,就不能单独改变该点的映射。因此保留其约 2.309° 的原始偏移,避免破坏之前的食指捏合;本轮不声称所有手指已完全符合真机全行程。
## 搜索方法与原约束
进行 21 组从 V9 到几何伸直目标的有界尝试。在每组中,通过两个线性锚点计算各关节 origin/行程:新零位目标,以及该手指原有捏合指令的原角度。用 MuJoCo 评估接触、穿透和已测单关节姿态,选择满足约束且零位先验误差最小的一组。这是有约束的参数搜索,并非训练了强化学习策略。
- 四组捏合的**拇指和目标手指全部关节角度完全保留**,因此对应完整连杆姿态、指腹接触位置保持。
- 其他未参与捏合手指的零位/侧摆可能小幅变化,不能声称四个场景的整只手每个连杆均不变。
- 原中指捏合仍用 216;小指仍用 V8/V9 已确认的对指数组。
- 已校准的中指指根、无名指指根、小指指根、中指中间关节、小指中间关节、拇指指尖、中指/无名指/小指指尖 255 角度保持 V9。
- 之前完整指令的中指单关节测试,所属手指连杆原点最大变化约 0.022 mm(来自侧摆);拇指测试所属手指姿态不变。这里并非保证全部非目标手指姿态不变。
- 食指指根 255 从约 98.505° 变为 99.411°;食指中间关节 255 从约 81.678° 变为 84.303°。这两项此前没有独立的真机端点校准约束。四指侧摆的其他输入角度也随线性斜率小幅改变。
## 验证
40 组命令验证原生 URDF、启动生成的 MJCF 与参考运动学一致;纯线性映射验证通过。四组捏合满足 0.2 mm 接触容差,新旧零位指令均无检测到的网格穿透。原有 11 项回归测试通过,包括新启动零位、四组对指及中指指根/拇指指尖端点。
报告:`reports/o30_right_zero_v10_calibration/validation.json`。
渲染:同目录 `comparison.png`,上排 V9,下排 V10,左列正面、右列侧面。
模型参数记录:模型目录 `o30_right_zero_v10_calibration.json`。
```bash
O30_RIGHT_PREPARE_ONLY=1 ./hands/O30/scripts/run_o30_right_mujoco_plan.sh
OPENBLAS_NUM_THREADS=1 venv/bin/python tools/o30_right_calibration/fit_zero_v10.py --check --render
source /opt/ros/jazzy/setup.bash
PYTHONPATH="$PWD/venv/lib/python3.12/site-packages:$PYTHONPATH" python3 tools/o30_right_calibration/test_calibration.py
```
以上检查不向真机发布命令。历史单关节测试中的既有掌部/拇指近节网格问题不在本轮改动范围内。
## 迁移与回退
新右手迁移包 `exports/O30_right_V10_linear.zip`,包含 URDF、meshes、关节顺序、新零位与四组对指命令。仅需按关节名称读取 URDF 限位线性换算,不依赖拟合脚本。
V9 备份:`backups/o30_v9_before_zero_20260922_103038/`。旧 V9 及左右手 V9 导出副本未覆盖,历史说明见 `README_v9.md`。旧运行 XML 快照为 `linker_hand_o30_right_middle_v9.xml`。
临时切回 V9 模型运行 `./hands/O30/legacy/run_o30_right_v9_linear.sh`。注意启动预设现在采用新零位数组;如需完全复现旧 V9 零位,请发送旧 `[0,0,255,195,100,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0]` 指令。