训练任务清单
最后更新
uv run list-envs 会打印当前生效的任务注册表——以它的输出为准,下面这张表是整理版。
标注 flat/rough 的任务有平地和崎岖两个变体。
每个任务的单独页面
下面是速查表。每个任务的训练要点、难点和适用场景,各有单独页面:
| 任务 | 说明 |
|---|---|
| Velocity | 主任务,速度指令行走。第一个该训的 |
| VelStand | 行走 + 跌倒恢复合训 |
| StandUp | 从面朝下/上/坐姿站起 |
| SitStand | 指令控制的坐 ↔ 站 |
| GroundPick | 下蹲用嘴尖触地 |
| BallKick | 踢球,策略看不到球 |
| Roulade | 前滚翻 |
| Rollers | 轮滑速度跟踪,roller 模式主任务 |
| Swizzle | 对称葫芦步 |
| RollerCrouch | 滑行中下蹲 |
| RollerSlope | 斜坡滑降 |
| RollerStandUp | 从地面站上轮子 |
| Spin | 原地旋转 |
行走与站立
| 任务 id | 地形 | 说明 |
|---|---|---|
Mjlab-Velocity-{Flat,Rough}-MicroDuck |
平地 / 崎岖 | 主任务:速度指令行走 + 头部姿态指令 |
Mjlab-VelStand-{Flat,Rough}-MicroDuck |
平地 / 崎岖 | 行走 + 跌倒恢复,合在一个策略里 |
Mjlab-StandUp-{Flat,Rough}-MicroDuck |
平地 / 崎岖 | 从面朝下 / 面朝上 / 坐姿站起,然后保持站立 + 体位控制 |
Mjlab-SitStand-{Flat,Rough}-MicroDuck |
平地 / 崎岖 | 指令控制的坐下 ↔ 站起,动作柔和,头部可控 |
第一次训练从 Mjlab-Velocity-Flat-MicroDuck 开始。
技能动作
| 任务 id | 地形 | 说明 |
|---|---|---|
Mjlab-GroundPick-{Flat,Rough}-MicroDuck |
平地 / 崎岖 | 下蹲并用嘴尖触地,然后回到站立 |
Mjlab-BallKick-Flat-MicroDuck |
平地 | 把一个 70 mm / 15 g 的球向前踢出(actor 看不到球) |
Mjlab-Roulade-Flat-MicroDuck |
平地 | 向前翻越头部滚一圈,落回双脚 |
BallKick 那个“actor 看不到球”值得注意:策略并不观测球的位置,靠的是动作本身的可重复性。
轮滑(roller)
给鸭子脚下装上被动轮之后的一整套任务:
| 任务 id | 地形 | 说明 |
|---|---|---|
Mjlab-Velocity-Flat-MicroDuck-Rollers |
平地 | 轮滑速度跟踪 |
Mjlab-Velocity-Swizzle-MicroDuck |
平地 | 经典的对称葫芦步滑行 |
Mjlab-RollerCrouch-Flat-MicroDuck |
平地 | 滑行中下蹲 |
Mjlab-RollerSlope-Flat-MicroDuck |
斜坡 | 沿斜坡滑降 |
Mjlab-RollerStandUp-Flat-MicroDuck |
平地 | 从地面站起到轮子上 |
Mjlab-Spin-Flat-MicroDuck |
平地 | 原地快速旋转 |
Backlash 变体:齿隙建模
每一个主任务都有一个 Backlash 双胞胎,在一个带齿轮间隙的模型上训练:14 个舵机关节各串联 ±1°(总计 2°)的齿隙。
用法是在任务 id 里 MicroDuck 前面插入 -Backlash:
Mjlab-Velocity-Flat-Backlash-MicroDuck
这个建模方式对 sim2real 很关键,官方实现里有三个细节:
- 每个舵机获得一个非驱动的
passive_<joint>_backlash铰链。 - 因为真实编码器装在齿隙的输出侧,固件的 PD 模拟(
BacklashEncoderBamActuator)和joint_pos/joint_vel观测都透过齿隙读取,即qpos[servo] + qpos[backlash]。 - 观测维度和动作维度都不变,所以 ONNX 导出和机上运行时不需要任何改动。
实现见仓库里的 src/mjlab_microduck/tasks/backlash.py。
执行器模型
所有任务都使用 BAM 的 M6 执行器模型来模拟 Dynamixel XL330:电压控制律、反电动势、库仑/Stribeck/负载相关摩擦。
在此之上做逐环境的域随机化:
- 电池电压
- 负载下的电压跌落
- 指令延迟
- 摩擦力大小
实现在 src/mjlab_microduck/actuator/ 的 FrictionDRBamActuator。