解读 70 · 阶段 F:从阶跃 CSV 到新策略
解读对象:
docs/HL-2915路线全流程教程.md(380 行)§2/§7,交叉microduck-replica/rl-series/scripts/hl2915_bench.py(744 行)课 6
需要的前置:解读 57、解读 56(BAM 六参数)、解读 58
阶段 F 的输入不是"一个想法",而是一份 CSV:50Hz 采的"目标-实际"位置曲线。这一篇跟着教程 §7 走完最短路径,并讲清它与 BAM 方法论的衔接。
1. 数据在台架就开攒:课 6 的阶跃录制
hl2915_bench.py 课 6 的用法一行:python3 hl2915_bench.py 6 --kp 800 --kd 80——改 21/22 号增益做位置阶跃,50Hz 录曲线出 CSV(hl2915_step_id<id>_kp<kp>_kd<kd>.csv)。实现里几个关键决定:21/22/23 是 EPROM,测完自动还原,--keep 才保留;阶跃要"陡",写目标时速度位填 0(不限速),默认幅度 200 步 ≈17.6°;丢包也记时间格、数值留空。
脚本当场算指标:稳态误差、超调 %、整定时间、峰速、峰值电流;up/back 两向稳态误差的差 ≈ 回差佐证。教程 §2 的辨识表把其余数据也排在台架:堵转力矩(挂砝码到过载保护)、齿轮回差(≤1° ≈ 11 步)、空载加减速(遥测速度求加速度)。
2. 辨识进仿真:改 upstream,但守纪律
upstream/microduck_rl 只读不改,实验改动打 patch、跑完还原(§7.1)。四个落点(文件均已核实存在):
- kp/kd →
src/mjlab_microduck/robot/microduck_constants.py——解读 57引的_BAM_ACTUATOR_KWARGS里kp_fw=200.0就是"固件位置环刚度",课 6 测的正是它;vin_range勿照抄官方的 6.5–8.2; - 堵转/摩擦 →
actuator/friction_dr_bam.py的 forcerange; - 回差 →
tasks/backlash.py;离散度 → 域随机化tasks/microduck_velocity_env_cfg.py。
obs 61 维 / action 14 维 / reward / 课程表一律不动;质量同步改:舵机 27.8g,整机重量按阶段 G 实测回填。
3. 冒烟 → 训练 → 导出 → 校验
§7.2 的四条命令:
CUDA_VISIBLE_DEVICES="" uv run train Mjlab-Velocity-Flat-MicroDuck \
--env.scene.num-envs 64 --agent.max_iterations 100 # 冒烟:CPU 4 分钟,维度不变、无 NaN
uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 4096 # GPU 数小时;无卡 --hf-jobs,先 --dry-run 看费用
uv run scripts/export.py Mjlab-Velocity-Flat-MicroDuck --wandb-run-path <...> # 官方脚本,归一化层写进图
python3 ../../../rl-series/scripts/inspect_onnx.py <导出的.onnx> # obs[1,61] actions[1,14]
命令都是真的:train 入口在上游 pyproject.toml 的 [project.scripts],--hf-jobs 由 train_hook.py 截获、--dry-run 在 hf_jobs.py:267。CPU 量级的实证在 docs/microduck-30day/experiments/experiment-log.csv:expE-gait-ramp 跑到 50000 迭代仍在调步态——冒烟那 100 迭代只回答"模型没改坏"。
停训三信号:fell_over 稳定低位、error_vel 平台化、mean_std 收敛;验收是 uv run play ... --viewer viser 回放能走几米不失摔。顺序按 §7.3:先训 alpha_walking 对应的 Mjlab-Velocity-Flat-MicroDuck(tasks/__init__.py:82),alpha_stand/alpha_sitstand 次之。
4. 与 BAM M1–M6 的衔接
两份文档是同一方法论的两代:换舵机重训全流程.md(解读 54–57)用单摆台架辨识 BAM 六参数;HL-2915 教程把 PD 阶跃压缩进台架课 6,直接辨识固件位置环。落点相同:都汇入 microduck_constants.py 与 BAM 执行器配置,都受"61/14 不动"约束。分工:单摆台架给执行器物理模型(摩擦/回差/armature),课 6 给控制特性(kp/kd)。
你带走的收获
- 数据采集在买 15 只之前就该完成——课 6 一晚的 CSV,省掉阶段 F 的返工。
- 改上游仓库的纪律只有一条:patch 进、patch 出;"不动的清单"(61/14/reward/课程)比"要改的清单"更重要。
- 训练分三档:CPU 百迭代验模型,GPU 数千迭代出步态,云算力先
--dry-run看账单。 - 导出必须用官方脚本并校验维度:归一化层不进图 = 真机观测尺度全错。