# 议题 3 · 仿真负责人行动计划(O6 摩擦力) > **角色**:仿真负责人 > **目标**:用「真机三曲线 vs 仿真三曲线」把 MuJoCo 的 **摩擦 / 阻尼** 调到可 Sim2Real > **方法原文**:议题 3《O6 手摩擦力测量方法》 > **本机仿真现状**:`linker_hand_mujoco_ros2` 已接入 O6 左右手 MJCF,ROS2 话题 `/cb_*_hand_control_cmd`(0~255) --- ## 0. 你负责什么 / 不负责什么 | 你负责(仿真侧) | 他人负责(你要盯着交) | |------------------|-------------------------| | MuJoCo 模型可稳定重放同一串 `command_u8` | `hand_.json` 角度映射(0~255→度)已验收 | | 从真机 CSV 驱动仿真,导出 `q_sim,v_sim,τ/I_sim` | API 同帧 `joint_u8` + `current`(实际电流) | | 画出真机↔仿真 **角/速/流** 三叠图 | 真机按 A/B/C 协议采数、CSV 落盘 | | 按 §3.4 调 `friction` / `damping`(可+自动优化) | Kt、限流值、供电与工装安全 | | 输出 `dynamics_defaults.json`(公版)与验收图归档 | 抽检 3~5 台样机、聚合策略确认 | **红线(文档强调):** 1. 映射/终点角不对 → **不准调摩擦** 2. 电流顶满限流 → **不准加摩擦硬凑角度** 3. 只拟合角度、不管电流 → **结果作废** --- ## 1. 一周里程碑(建议排期) ### Day 0~1:入口验收(卡死点) 向算法/标定/嵌入式要齐,否则议题 3 **不得开干**: - [ ] `hand_.json`(含 `joint_u8 → deg`,建议还有 `command → deg`)抽检报告 - [ ] 电流单位 = A(或已换算),确认为 **实测电流** - [ ] Kt(有则更好;暂无可用归一化电流) - [ ] 样机 SN、固件版本、限流设定 - [ ] 关节命名对照表:JSON 关节名 ↔ MuJoCo joint 名 ↔ ROS 6 维通道索引 **你要产出:**《仿真入口检查单》一页(通过/阻塞项)。 ### Day 1~2:仿真「同指令重放」能力 只做软件能力,先不动参数: | 模块 | 你做什么 | 验收标准 | |------|----------|----------| | 日志解析 | 读 `t_ms,command_u8,joint_u8,current_A` | 对齐时间轴、无丢帧统计 | | Lookup | `joint_u8/command` → `q_real/q_cmd`(度→仿真内部 rad) | 与 JSON 抽检一致 | | `mj_rollout` | 对**单关节**重放 A/B/C 的 command 轨迹 | 可得到 `q_sim,v_sim`;力矩 `ctrl/actuator force` | | 电流代理 | `I_sim ≈ τ_sim / Kt`(或归一化到真机量级) | 能画「仿真电流」虚线 | | `plot_three_curves` | 角/速/流三子图,真机实线+仿真虚线 | 出图可直接给人看 §3 | **对接现有工程建议路径:** ```text ~/linker_hand_mujoco_ros2/ # ROS2 联调、话题 0~255 ~/mujoco_testwork/o6/ # 已有 scene / validate 脚本,可迁辨识离线工具 新建例如: tools/friction_id/ parse_csv.py apply_lookup.py mj_rollout.py # 优先离线 MjModel,不强制开 GUI plot_three_curves.py identify_friction.py export_dynamics.py ``` 离线辨识用「直接写 `data.ctrl` / 位置执行器目标」即可;**不必**经过 ROS 话题(话题留给联调演示)。 ### Day 2~4:单关节闭环调参(先一个指,例如 index 根节) 按文档协议: 1. 真机交付该关节 `A.csv / B.csv / C.csv` 2. 画真机三曲线 → 按 §3.2 确认「像正常动作」 3. 现有摩擦/阻尼初值跑仿真叠图 4. **只用 A+B** 优化 `{friction, damping}` 5. **段 C** 只验收:三叠图肉眼大致重合 + 未限流 6. Pass → 写入该关节参数草稿 优化目标(入门): ```text J = w1·‖q_real−q_sim‖² + w2·‖v_real−v_sim‖² + w3·‖I_real−I_sim‖² 建议起步:w1=1.0, w2=0.3~1.0, w3=0.5~2.0 ``` 人手否决用文档 §3.4 七行表;你要在报告里勾选「属于哪一类」。 ### Day 4~6:扩到全手主动 DOF ```text for joint in O6_主动关节: 锁其它关节 → 收 A/B/C → 拟合 → 段 C 看图 → 通过才入库 ``` 拇指多 DOF:**一次只扫一个 DOF**。 ### Day 6~7:公版发布 - 同软件/同 URDF 版本抽 **3~5** 只手,同名关节取 **中位数或均值** - 输出: - `dynamics_defaults.json` - 全关节段 C 叠图包 - 参数变更说明(改了哪些 joint 的 friction/damping) - 回写进仓库 MJCF(本仓 `urdf/O6/...xml` 的 `joint damping` / `frictionloss` 或统一 defaults) --- ## 2. 日常调参 SOP(贴显示器) 每次看图只问三句: 1. **角度**:仿真是更快还是更慢?终点对不对? 2. **电流**:真机是否更高?有没有顶满? 3. **慢/快差**哪段更大?→ 摩擦还是阻尼? | 现象 | 动作 | |------|------| | 仿真快 + 真机电流更高且未限流 | ↑ 摩擦;仍快再 ↑ 阻尼 | | 仿真快 + 真机电流顶满 | **停**;查限流/Kt/力矩上限 | | 仿真慢 + 真机电流更低 | ↓ 摩擦/阻尼 | | 终点角差一截 | **停调摩擦**;查 JSON/指令 | | 慢差大多、快还好 | 主调摩擦 | | 快差大多、慢还好 | 主调阻尼 | 验收通过定义(仿真负责人签字): - [ ] 段 C 角度大致重合 - [ ] 段 C 电流平台量级接近,且双方均未长期顶满 - [ ] 速度形状大体一致(允许滤波后略糊) - [ ] 参数已写入 JSON +(可选)MJCF,带版本与日期 --- ## 3. 与现有 MuJoCo/ROS2 的衔接 | 能力 | 状态 | 仿真负责人接下来 | |------|------|------------------| | O6 left/right MJCF | 已在包内 `urdf/O6/` | 辨识后回写 damping/friction | | ROS 6 维 0~255 控制 | 已通 | 联调演示用;辨识用离线重放更稳 | | Joint UI 看仿真角 | 已有 | 示教/演示;正式对比用 matplotlib 叠图 | | mimic 比例 | O6 已实现 | 与真机联动 DOF 一致时再比远端 | | 力矩→电流 | 未做 | `mj_rollout` 中补 Kt 换算 | | CSV→重放流水线 | 未做 | **本周重点** | | `dynamics_defaults.json` | 未做 | 调参出口统一格式 | **建议两套用途拆开:** - **辨识管线**:离线、可复现、无 GUI、出图+JSON - **演示管线**:`./run_sim.sh` + 话题 `/cb_left_hand_control_cmd`(见 `README_启动.md`) --- ## 4. 你要推动的外部接口(写进对接群) 请对方按固定 CSV(文档 §5.3): ```text t_ms,sn,finger,joint_name,command_u8,joint_u8,current_A ``` 目录:`logs/O6///{A,B,C}.csv` 并提供: ```text hand_.json Kt(或声明暂用归一化) 限流阈值(A) 关节名对照表 ``` 对方交数后,你回: ```text reports/O6/// overlay_A.png / overlay_B.png / overlay_C.png fit_summary.json # θ、J、是否限流、是否 Pass ``` --- ## 5. 风险清单(仿真负责人盯防) | 风险 | 表现 | 对策 | |------|------|------| | 映射未验收就采数 | 终点角差大 | 入口 checklist 卡死 | | 把限流当摩擦 | 电流贴顶还猛加 friction | §3.4 第 2 条一票否决 | | 只过角度不过电流 | 「调完感觉对了」 | 验收强制看电流叠图 | | ROS 延迟影响辨识 | 跨机丢包、时序漂 | 辨识用离线 ctrl,不跨机 | | 一次动多关节 | 耦合辨不准 | 协议:一次一关节 | | 左右手/镜像轴 | 左手 yaw 与右手不同 | 左右分别出参数或明确共用规则 | --- ## 6. 本周最小可交差物(答辩用) 若只能交最小包,按优先级: 1. **一个指根**(如 `index` 根节)A/B 拟合 + C 验收三叠图 2. 对应 `friction/damping` 与前后对比图(调参前 vs 后) 3. 一页结论:用了映射否、是否限流、参数值、是否建议写公版 有了最小包再铺全手,避免一周空转在工具上却没有「一张能给人看懂的叠图」。 --- ## 7. 每日站会三句话(仿真侧) 1. 今天在辨哪只手、哪个关节、到第几步? 2. 当前卡在映射 / 电流 / 模型 / 优化哪一类? 3. 有没有触发红线(映射错、限流、只过角度)? --- ## 8. 一句话角色定义 > **仿真负责人** = 把对方给的「同一道 0~255 题」在 MuJoCo 里重做一遍,交出可对上的角/速/流三叠图,并负责任地拧摩擦和阻尼;尺子(角度映射)和电表(真实电流)不对时,拒绝用仿真参数充数。 --- *配套启动与多机联调见:`README_启动.md`*