4.7 KiB
O30 右手 V4:仅优化小指对拇指
基于用户认可的 V3,使用新提供的仿真/真机左视图,修正小指的弯曲分配。实际只修改 pinky_mcp_pitch、pinky_pip、pinky_dip 三个关节的 URDF limit upper;全部关节零位、拇指、其他手指、小指侧摆、连杆与网格保持 V3 不变。
使用与结果
./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 类型消息经过桥接回调后的四组姿态。
随机输入检查只确认映射/导出正确,不证明整个行程无碰撞或与真机一致。未操作真机。
复现与预览
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
重新拟合:
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
消息回归:
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。
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。