背景
#1452 对齐对比(#1464 评论根因分析)确认:microduck_velocity_flat 与上游 microduck_rl 的剩余训练差距主因是执行器模型不同——UniLab 用 XML position PD(kp=50/kv=0.5),上游用 BAM(Beyond-Adda-Model)xl330-m6 电压舵机(固件 P 环 kp_fw=200、vin DR 6.5–8.2 V + 负载压降、15–30 ms 指令延迟、m6 摩擦预算写回求解器)。探针实测动力学差异为 10–90 倍量级。要数值级收敛必须移植 BAM 模型本身。
最小交付结果
UniLab 侧 microduck BAM 执行器(mujoco 后端)+ 与上游的动力学对拍证据 + 训练对比报告(PR 评论区)。
- 新 task
MicroduckVelocityBamFlat + conf/ppo/task/microduck_velocity_bam_flat/{base,mujoco}.yaml,复用 microduck_velocity_flat 的 reward/obs/curriculum 配置,仅替换执行器路径。
- BAM 实现为 task-owned action term(
requires_substep_state_feedback=True,复用 set_pre_step_control 契约,go2w 先例),零 SimBackend 契约变更。
- 执行器数学严格按上游 bam.mjlab.BamActuator(xl330 m6 JSON 参数原值):延迟环形缓冲(lag 3–6 substep 每 substep 重采样)、电压控制律(kp_fw=200、error_gain、电流限窗、PWM 限幅)、back-EMF 力矩方程、forcerange ±1.0676 Nm、vin/vin_drop startup DR、friction_scale reset DR、armature DR (0.9,1.1)。
- 摩擦预算的处理:UniLab 后端无逐 substep 写 dof_frictionloss/dof_damping 的通道(mjwarp host_numpy profile 显式拒绝 pre-step 回调;mujoco batch pool state spec 不含 model 字段),m6 预算折算进输出力矩并记录近似边界;mjwarp owner 本期 fail-closed 不支持。
- 验证:bam 探针(零 action 姿态保持 / 膝阶跃 / 稳态误差)对拍上游既有探针数值(protocol A/B′/C),单测覆盖控制律各分量,make test-all 通过。
- 训练:mujoco 后端 seed42 × 2000 iter,与上游 seed42 对比,结果发 PR 评论。
Non-goals
- 不改 SimBackend / unisim-core(dof_frictionloss 逐 substep 写回通道属后续候选,见下)。
- 不支持 mjwarp/motrix/其他后端(fail-closed 显式报错)。
- 不替换现有 PD 配方的 microduck_velocity_flat(保留为独立 task)。
- 不建模 backlash(上游 velocity 任务 robot.xml 无 backlash 关节,BacklashEncoderBamActuator 退化路径不需要)。
Owner 与预计改动
src/unilab/tasks/locomotion/microduck/(BAM action term + 常量)、src/unilab/assets/robots/microduck/(motor actuator XML 变体,冷路径)、src/unilab/conf/ppo/task/microduck_velocity_bam_flat/、registry 注册、tests/ 新增单测与 owner 契约测试。
- 预计 6–8 文件,~700–900 行净手写。
Stop conditions
- 需要动 unisim-core / SimBackend 契约(例如求解器级 dry-friction 写回通道)。
- mujoco CPU 后端 4096 envs 训练吞吐低到无法出有效对比(则降 num_envs 并在 PR 说明)。
后续候选(不在本 issue):unisim-core mjwarp 后端的 device 侧 BAM kernel 或 per-substep model 字段写回通道,使 BAM 任务可在 mjwarp 跑。
背景
#1452 对齐对比(#1464 评论根因分析)确认:microduck_velocity_flat 与上游 microduck_rl 的剩余训练差距主因是执行器模型不同——UniLab 用 XML position PD(kp=50/kv=0.5),上游用 BAM(Beyond-Adda-Model)xl330-m6 电压舵机(固件 P 环 kp_fw=200、vin DR 6.5–8.2 V + 负载压降、15–30 ms 指令延迟、m6 摩擦预算写回求解器)。探针实测动力学差异为 10–90 倍量级。要数值级收敛必须移植 BAM 模型本身。
最小交付结果
UniLab 侧 microduck BAM 执行器(mujoco 后端)+ 与上游的动力学对拍证据 + 训练对比报告(PR 评论区)。
MicroduckVelocityBamFlat+conf/ppo/task/microduck_velocity_bam_flat/{base,mujoco}.yaml,复用 microduck_velocity_flat 的 reward/obs/curriculum 配置,仅替换执行器路径。requires_substep_state_feedback=True,复用set_pre_step_control契约,go2w 先例),零 SimBackend 契约变更。Non-goals
Owner 与预计改动
src/unilab/tasks/locomotion/microduck/(BAM action term + 常量)、src/unilab/assets/robots/microduck/(motor actuator XML 变体,冷路径)、src/unilab/conf/ppo/task/microduck_velocity_bam_flat/、registry 注册、tests/ 新增单测与 owner 契约测试。Stop conditions
后续候选(不在本 issue):unisim-core mjwarp 后端的 device 侧 BAM kernel 或 per-substep model 字段写回通道,使 BAM 任务可在 mjwarp 跑。