1647241649
Co-authored-by: Cursor <cursoragent@cursor.com>
8.2 KiB
8.2 KiB
议题 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_<SN>.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. 一周里程碑(建议排期)
Day 0~1:入口验收(卡死点)
向算法/标定/嵌入式要齐,否则议题 3 不得开干:
hand_<SN>.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 |
对接现有工程建议路径:
~/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 根节)
按文档协议:
- 真机交付该关节
A.csv / B.csv / C.csv - 画真机三曲线 → 按 §3.2 确认「像正常动作」
- 现有摩擦/阻尼初值跑仿真叠图
- 只用 A+B 优化
{friction, damping} - 段 C 只验收:三叠图肉眼大致重合 + 未限流
- Pass → 写入该关节参数草稿
优化目标(入门):
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
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(贴显示器)
每次看图只问三句:
- 角度:仿真是更快还是更慢?终点对不对?
- 电流:真机是否更高?有没有顶满?
- 慢/快差哪段更大?→ 摩擦还是阻尼?
| 现象 | 动作 |
|---|---|
| 仿真快 + 真机电流更高且未限流 | ↑ 摩擦;仍快再 ↑ 阻尼 |
| 仿真快 + 真机电流顶满 | 停;查限流/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):
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. 本周最小可交差物(答辩用)
若只能交最小包,按优先级:
- 一个指根(如
index根节)A/B 拟合 + C 验收三叠图 - 对应
friction/damping与前后对比图(调参前 vs 后) - 一页结论:用了映射否、是否限流、参数值、是否建议写公版
有了最小包再铺全手,避免一周空转在工具上却没有「一张能给人看懂的叠图」。
7. 每日站会三句话(仿真侧)
- 今天在辨哪只手、哪个关节、到第几步?
- 当前卡在映射 / 电流 / 模型 / 优化哪一类?
- 有没有触发红线(映射错、限流、只过角度)?
8. 一句话角色定义
仿真负责人 = 把对方给的「同一道 0~255 题」在 MuJoCo 里重做一遍,交出可对上的角/速/流三叠图,并负责任地拧摩擦和阻尼;尺子(角度映射)和电表(真实电流)不对时,拒绝用仿真参数充数。
配套启动与多机联调见:README_启动.md