Files
mujoco_linkerbot/议题3_仿真负责人行动计划.md
2026-07-23 17:55:52 +08:00

8.2 KiB
Raw Permalink Blame History

议题 3 · 仿真负责人行动计划(O6 摩擦力)

角色:仿真负责人
目标:用「真机三曲线 vs 仿真三曲线」把 MuJoCo 的 摩擦 / 阻尼 调到可 Sim2Real
方法原文:议题 3《O6 手摩擦力测量方法》
本机仿真现状linker_hand_mujoco_ros2 已接入 O6 左右手 MJCFROS2 话题 /cb_*_hand_control_cmd0255


0. 你负责什么 / 不负责什么

你负责(仿真侧) 他人负责(你要盯着交)
MuJoCo 模型可稳定重放同一串 command_u8 hand_<SN>.json 角度映射(0255→度)已验收
从真机 CSV 驱动仿真,导出 q_sim,v_sim,τ/I_sim API 同帧 joint_u8 + current(实际电流)
画出真机↔仿真 角/速/流 三叠图 真机按 A/B/C 协议采数、CSV 落盘
按 §3.4 调 friction / damping(可+自动优化) Kt、限流值、供电与工装安全
输出 dynamics_defaults.json(公版)与验收图归档 抽检 35 台样机、聚合策略确认

红线(文档强调):

  1. 映射/终点角不对 → 不准调摩擦
  2. 电流顶满限流 → 不准加摩擦硬凑角度
  3. 只拟合角度、不管电流 → 结果作废

1. 一周里程碑(建议排期)

Day 01:入口验收(卡死点)

向算法/标定/嵌入式要齐,否则议题 3 不得开干

  • hand_<SN>.json(含 joint_u8 → deg,建议还有 command → deg)抽检报告
  • 电流单位 = A(或已换算),确认为 实测电流
  • Kt(有则更好;暂无可用归一化电流)
  • 样机 SN、固件版本、限流设定
  • 关节命名对照表:JSON 关节名 ↔ MuJoCo joint 名 ↔ ROS 6 维通道索引

你要产出:《仿真入口检查单》一页(通过/阻塞项)。

Day 12:仿真「同指令重放」能力

只做软件能力,先不动参数:

模块 你做什么 验收标准
日志解析 t_ms,command_u8,joint_u8,current_A 对齐时间轴、无丢帧统计
Lookup joint_u8/commandq_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

对接现有工程建议路径:

~/linker_hand_mujoco_ros2/          # ROS2 联调、话题 0255
~/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 → 写入该关节参数草稿

优化目标(入门):

J = w1·‖q_realq_sim‖² + w2·‖v_realv_sim‖² + w3·‖I_realI_sim‖²
建议起步:w1=1.0, w2=0.31.0, w3=0.52.0

人手否决用文档 §3.4 七行表;你要在报告里勾选「属于哪一类」。

Day 46:扩到全手主动 DOF

for joint in O6_主动关节:
    锁其它关节 → 收 A/B/C → 拟合 → 段 C 看图 → 通过才入库

拇指多 DOF一次只扫一个 DOF

Day 67:公版发布

  • 同软件/同 URDF 版本抽 35 只手,同名关节取 中位数或均值
  • 输出:
    • dynamics_defaults.json
    • 全关节段 C 叠图包
    • 参数变更说明(改了哪些 joint 的 friction/damping
  • 回写进仓库 MJCF(本仓 urdf/O6/...xmljoint 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 维 0255 控制 已通 联调演示用;辨识用离线重放更稳
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):

t_ms,sn,finger,joint_name,command_u8,joint_u8,current_A

目录:logs/O6/<SN>/<joint_name>/{A,B,C}.csv

并提供:

hand_<SN>.json
Kt(或声明暂用归一化)
限流阈值(A)
关节名对照表

对方交数后,你回:

reports/O6/<SN>/<joint>/ 
  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