【MicroDuck RL 06】机器人本体与 BAM 电机模型

:books: 《MicroDuck RL:训练机器鸭从仿真走到真机》 系列课程 · 第 06 集 / 共 14 集
上一集:【MicroDuck RL 05】解剖主任务 Velocity 行走:观测、奖励、域随机化与课程学习:open_book: 课程目录 | 下一集:【MicroDuck RL 07】实时可视化与监控:边训练边看它进步

这一集讲机器人本体和整个方案里最容易被低估的部分:电机模型。

关节布局(14 个舵机)

0–4   左腿:  hip_yaw, hip_roll, hip_pitch, knee, ankle
5–8   头颈:  neck_pitch, head_pitch, head_yaw, head_roll
9–13  右腿:  (与左腿镜像)

模型文件(src/mjlab_microduck/robot/microduck/,从 Onshape CAD 用 onshape-to-robot 导出),注意不同任务用不同的机器人模型

模型 用途
robot_walk.xml 走路任务(删掉了躯干/头的部分碰撞体——“摔倒代价低”,策略才敢探索)
robot_groundcontact.xml 站立/翻滚/捡拾等身体触地任务(精选碰撞集)
robot_groundcontact_rollers.xml 轮滑任务(脚下被动轮子)
*_backlash.xml 齿隙版:每个关节串一个 ±1° 的被动间隙铰链,模拟真实齿轮旷量

“删碰撞体降低摔倒代价"是个有意思的设计:走路任务里摔倒是高频事件,如果每次摔倒都触发一堆碰撞约束,策略会学到"别摔"而不是"学会走”;把摔倒变便宜,探索才放得开。

为什么电机模型这么重要(BAM)

项目原话:“在这个尺度——小舵机驱动 800 g 双足机器人——执行器保真度占据了 sim2real 差距的大部分。”

普通做法把舵机当理想 PD 控制器;本项目用 BAM(Better Actuator Models)把 Dynamixel XL330 建模到电压控制律级别

  • 反电动势
  • 库仑摩擦 / 静摩擦 / 负载相关摩擦
  • 电池电压与负载压降
  • 固件 PD 增益(kp_fw=200)

配置见 src/mjlab_microduck/robot/microduck_constants.py

齿隙(Backlash)处理

真实舵机齿轮有旷量。仓库为每个任务提供 -Backlash- 孪生版:关节串一个无驱动的 passive_*_backlash 铰链(±1°),且编码器读数穿过间隙(真机编码器在输出侧)。这样训练出的策略对齿轮旷量免疫。

这一集的信息量在于一个观念:**仿真和现实的差距,大头往往不在接触和摩擦,而在执行器本身。**下一集讲怎么实时看到训练成果。


:open_book: 系列课程目录【系列课程】MicroDuck 强化学习:训练机器鸭从仿真走到真机 · 课程目录与导读