83 lines
4.7 KiB
Markdown
83 lines
4.7 KiB
Markdown
# 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。
|