YouDuck.ai

训练任务清单

最后更新

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 很关键,官方实现里有三个细节:

  1. 每个舵机获得一个非驱动的 passive_<joint>_backlash 铰链。
  2. 因为真实编码器装在齿隙的输出侧,固件的 PD 模拟(BacklashEncoderBamActuator)和 joint_pos / joint_vel 观测都透过齿隙读取,即 qpos[servo] + qpos[backlash]
  3. 观测维度和动作维度都不变,所以 ONNX 导出和机上运行时不需要任何改动。

实现见仓库里的 src/mjlab_microduck/tasks/backlash.py

执行器模型

所有任务都使用 BAMM6 执行器模型来模拟 Dynamixel XL330:电压控制律、反电动势、库仑/Stribeck/负载相关摩擦。

在此之上做逐环境的域随机化

  • 电池电压
  • 负载下的电压跌落
  • 指令延迟
  • 摩擦力大小

实现在 src/mjlab_microduck/actuator/FrictionDRBamActuator

相关