Skip to content

feat(microduck): 移植 BAM xl330-m6 电压舵机执行器模型(消除与上游的执行器动力学差异) #1474

Description

@TATP-233

背景

#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 跑。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions