DEEP 60 · 第六辑 · 舵机与执行器 · LEARN NOTES

收进学习手册 · 2026-09-11 · duck.whatled.com

解读 60 · testbench:仿真-实物对照台

解读对象:microduck-replica/upstream/microduck_rl/scripts/testbench_sim2real.py(611 行)与 scripts/validate_bam_testbench.py(277 行),交叉引用 robot/testbench_constants.py
需要的前置:解读 56(模型从哪来) · 解读 57(模型怎么进仿真)

辨识出的 BAM 参数到底准不准?这两个脚本给出可执行的答案:让同一个 ONNX 策略(或同一条轨迹)分别在仿真和实物上跑,逐点对齐位置曲线,算 MAE。整机走路之前,先在单舵机台架上把"仿真=实物"这件事量出来。

testbench_sim2real.py:同一策略,两个世界

骨架是三个 rollout 函数加一个对比器:

工作流写在文件头注释:sim 记 sim.npz → 实物记 real.npz → --compare 出对比图。

validate_bam_testbench.py:验执行器内核本身

第二个脚本不跑策略,而是回放真实台架录制:把每条实测轨迹喂进 mujoco_rollout()——用 compute_m6_friction()(与 bam/model.py 同式的 M6 摩擦)一步步复现"固件 PD → 电压 → 电机力矩 → 摩擦裁剪"链路(ERROR_GAIN = (4096/2π)/(256·885) 是 XL330 固件的位置误差→PWM 增益),同时以 BAM 自家 Python 仿真器 bam_python_rollout() 作参照。输出三个数:MAE bam_vs_real / mj_vs_real / bam_vs_mj,判定逻辑写在 main():avg_diff > 0.01 → "BAM 和 MuJoCo 显著分叉,内核可能有 bug";三数接近 → 内核正确。

这套对照台在流程里的位置

台架硬件见 解读 55(120 g 负载,TESTBENCH_ARM_MASS = 0.12);换舵机重训全流程的测试金字塔里,它就是 L2 仿真评估的量尺:换 HL-1910 后,先用新辨识的 JSON 在台架上跑通"仿真-实物 MAE 可接受",再谈整机。策略级的验收(L3 的五指标、L5 吊装)是它的下游。

你带走的收获

延伸

什么鸭 WHATDUCK · 复刻学习笔记 ← 全部手册 · 首页