Files
mujoco_linkerbot/tools/o30_right_calibration/README_v4.md
T

83 lines
4.7 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 右手 V4:仅优化小指对拇指
基于用户认可的 V3,使用新提供的仿真/真机左视图,修正小指的弯曲分配。实际只修改 `pinky_mcp_pitch`、`pinky_pip`、`pinky_dip` 三个关节的 URDF `limit upper`;全部关节零位、拇指、其他手指、小指侧摆、连杆与网格保持 V3 不变。
## 使用与结果
```bash
./hands/O30/scripts/run_o30_right_mujoco_plan.sh
```
默认使用 `linkerhand_o30_right_pinky_calibrated.urdf`。控制话题仍为 `/cb_right_hand_control_cmd`,四组指令不变。启动零位数组也不变。
在小指对拇指的原指令下:
- 小指根部弯曲:82.98° → 74.96°,第一节抬高。
- 小指中间关节:32.98° → 45.90°,弯曲增加。
- 小指末端关节:18.59° → 25.11°,弯曲增加。
这里的角度是包含零位偏移的原始模型坐标角度,不是独立测量的真机角度。新行程相对 stock 比例依次为 1.13066、0.88937、0.67988,均在原先 0.5~1.5 的边界内。
其余三组捏合和实测零位的小指弯曲指令都为 0,因此这四个姿态的所有关节角与 V3 **完全相同**。三个行程调整会影响其他非零小指弯曲指令,未见动作尚未获得真机验证。
## 照片与优化方法
参考原图保存在 `pinky_reference/`。`pinky_landmarks.json` 包含真机 1400×1448 图上的人工关节中心标注及不确定性;有遮挡的根部点权重较低。不是自动标记识别或实测三维点。
先使用未修改部位拟合相机,再联合优化三个小指弯曲行程与相机。正式六组扰动搜索共 1,035 次目标评估,均通过验收,选择目标值最低者。拇指/其他关节没有作为优化变量。
V3 采用近似指腹点和法向正对约束;本次小指改为实际 MuJoCo 凸碰撞网格距离,并限制最近点在两个指尖附近的指腹区域,排除指背/外壳接触。允许接触点滑动,不再强求之前两个固定近似指腹法向正对。实际指腹的柔软变形仍未建模,接触区域判定是网格坐标近似。
在同一最终相机下,小指 PIP/DIP 两个标注点的 RMS 为 **44.16 → 19.01 px**。使用 V3 自己的初始固定部位相机时,两个目标点为 79.21 px;不把这个相机变化算作关节改善。未修改部位标注的 RMS 从 21.32 变为 29.31 px,反映联合相机拟合的取舍。误差是原图上的训练拟合误差,不是实际三维精度,遮挡的无名指根部仍有较大残差。
## 验证和对比
`reports/o30_right_pinky_refinement/comparison.png`:左侧 V3,右侧 V4,相机完全一致,视野略扩展以显示完整接触区域。`before.png`、`after.png` 为单图;`landmarks.png` 青色为照片人工标注,红色为模型投影,不是原照片叠图。
`validation.json` 保存全部参数、图像哈希、逐点误差、六组搜索结果和实际启动模型验证结果。小指的仿真碰撞网格间隙约 **0.027 mm**,满足 0.2 mm 接触容差,无检测到的网格穿透。该数字不代表真机接触精度。
已通过:
- 启动脚本真实生成模型的 37 组导出/映射一致性检查。
- 四组捏合与零位的碰撞检查。
- 原三组捏合和零位的全部关节角精确不变检查。
- URDF 结构比较:只有三个指定关节的行程上限变化。
- 三项消息回归测试,包括真实 JointState 类型消息经过桥接回调后的四组姿态。
随机输入检查只确认映射/导出正确,不证明整个行程无碰撞或与真机一致。未操作真机。
## 复现与预览
```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_pinky.py --check --render
venv/bin/python tools/o30_right_calibration/fit_pinky.py --preview pinky
```
重新拟合:
```bash
OPENBLAS_NUM_THREADS=1 venv/bin/python tools/o30_right_calibration/fit_pinky.py --fit --starts 6 --max-nfev 350
O30_RIGHT_PREPARE_ONLY=1 ./hands/O30/scripts/run_o30_right_mujoco_plan.sh
venv/bin/python tools/o30_right_calibration/fit_pinky.py --check --render
```
消息回归:
```bash
source /opt/ros/jazzy/setup.bash
PYTHONPATH="$PWD/venv/lib/python3.12/site-packages:$PYTHONPATH" python3 tools/o30_right_calibration/test_calibration.py
```
当前版本使用 `fit_pinky.py`。之前的 `fit_multiview.py` 保留为 V3 实现,其旧指腹法向验收不适用于 V4 的小指接触。
## 切回 V3
V3 原文件和报告均保留未覆盖,说明见 `README_v3.md`。
```bash
O30_RIGHT_URDF="$PWD/src/linkerhand-sim/linker_hand_mujoco_ros2/linker_hand_mujoco_ros2/urdf/O30/linker_hand_o30_right/linkerhand_o30_right_multiview_calibrated.urdf" ./hands/O30/scripts/run_o30_right_mujoco_plan.sh
```
正常运行原启动脚本即恢复 V4。