《MicroDuck RL:训练机器鸭从仿真走到真机》 系列课程 · 第 06 集 / 共 14 集
上一集:【MicroDuck RL 05】解剖主任务 Velocity 行走:观测、奖励、域随机化与课程学习 |课程目录 | 下一集:【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°),且编码器读数穿过间隙(真机编码器在输出侧)。这样训练出的策略对齿轮旷量免疫。
这一集的信息量在于一个观念:**仿真和现实的差距,大头往往不在接触和摩擦,而在执行器本身。**下一集讲怎么实时看到训练成果。