225 lines
8.2 KiB
Markdown
225 lines
8.2 KiB
Markdown
# 议题 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. 映射/终点角不对 → **不准调摩擦**
|
||
2. 电流顶满限流 → **不准加摩擦硬凑角度**
|
||
3. 只拟合角度、不管电流 → **结果作废**
|
||
|
||
---
|
||
|
||
## 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 |
|
||
|
||
**对接现有工程建议路径:**
|
||
|
||
```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/<SN>/<joint_name>/{A,B,C}.csv`
|
||
|
||
并提供:
|
||
|
||
```text
|
||
hand_<SN>.json
|
||
Kt(或声明暂用归一化)
|
||
限流阈值(A)
|
||
关节名对照表
|
||
```
|
||
|
||
对方交数后,你回:
|
||
|
||
```text
|
||
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`*
|