训练与部署
最后更新
Microduck 的动作策略不在机器人仓库里训练,而在隔壁的 microduck_rl——MuJoCo Warp 加 PPO,训练完导出 ONNX,由机器人上的运行时加载。
这一栏覆盖从仿真到真机的整条链路。
整条链路长什么样
有一个细节值得注意:训练频率和机上控制循环频率都是 50 Hz。这不是巧合,而是让仿真里学到的时序在真机上成立的前提。
最短路径
有 CUDA GPU 的话,四条命令就能走完一遍:
git clone https://github.com/pollen-robotics/microduck_rl && cd microduck_rl
# 训练(4096 个并行环境下约 1–2 小时能得到可用步态)
uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 4096
# 导出
uv run scripts/export.py Mjlab-Velocity-Flat-MicroDuck --wandb-run-path <...>
# 不用机器人,先在 CPU 版 MuJoCo 里用键盘驱动它
uv run scripts/infer_policy.py --walking output.onnx
没有 GPU:给任意 train 命令加 --hf-jobs,训练跑在 Hugging Face Jobs 上。
详细步骤见搭起训练环境。
上机不需要发布版本
这是一个容易被高估难度的环节。把自己的 .onnx 放到板子上,在 /etc/robot/robotd.toml 里指过去就行:
[policy]
walk = "/home/radxa/my_walking.onnx"
sudo systemctl restart robotd
这些路径能挺过系统更新——发布版替换的是它自带的二进制和策略文件,不是这个指向别处的配置。删掉这几行就回到官方策略。
加载失败会报 unhealthy,robotctl health 和 robotctl monitor 底部边框都会说明原因。
sim2real 真正卡住的地方
仿真里走得好、上机就摔,是这类项目最常见的失败。microduck_rl 把整套配方编码进了仓库本身,核心是四件事:
- 执行器物理不能理想化 —— 用 BAM M6 模型建模 Dynamixel XL330:电压控制律、反电动势、库仑/Stribeck/负载相关摩擦。把舵机当理想力矩源,学到的步态几乎必然失效。
- 随机化的是物理参数,不是观测噪声 —— 电池电压、负载下的电压跌落、指令延迟、摩擦大小。这和往观测里加高斯噪声是两回事。
- 齿隙必须建模在正确的一侧 —— 真机编码器装在齿隙的输出侧,所以仿真的观测也必须透过齿隙读取。建模在输入侧的话,策略会以为自己精确知道关节位置,这个误差在换向时集中爆发。
- 多个策略共享一份 61 维观测契约 —— 行走/恢复/特技可以在任意时刻热切换接管机器人。
展开见 sim2real 配方。
有哪些任务可以训
主任务是 Mjlab-Velocity-Flat-MicroDuck(速度指令行走)。此外还有跌倒恢复、站起、坐下、低头捡、踢球、前滚翻,以及一整套轮滑任务(脚下装被动轮)。
每个主任务还有一个 Backlash 双胞胎,在带 ±1° 齿轮间隙的模型上训练。
完整清单见训练任务清单。
本栏目录
- Velocity — 速度指令行走
主任务:按速度指令行走并同时接受头部姿态指令。第一个该训的就是它。
- 搭起训练环境,训出第一个策略
microduck_rl 的环境要求、四条核心命令,以及没有 GPU 时的替代方案。
- VelStand — 行走加跌倒恢复
把行走和跌倒恢复训练进同一个策略,省掉运行时的切换。
- 训练任务清单
microduck_rl 里全部可训练任务的 id、地形与用途,含 roller 系列与 Backlash 变体。
- sim2real 配方
Microduck 从仿真走到真机所依赖的四件事:BAM 执行器物理、域随机化、齿隙建模、共享观测契约。
- StandUp — 从地面站起
从面朝下、面朝上或坐姿站起,然后保持站立并接受体位指令。
- SitStand — 坐下与站起
指令控制的坐↔站切换,动作柔和,过程中头部仍可控。
- GroundPick — 低头捡东西
下蹲并用嘴尖触地,然后回到站立。手柄 A 键触发的动作。
- BallKick — 踢球
把 70 mm、15 g 的球向前踢出。策略看不到球。
- Roulade — 前滚翻
向前翻越头部滚一圈,落回双脚。手柄 X 键,按住可连续。
- Rollers — 轮滑速度跟踪
脚下装被动轮之后的基础滑行策略。roller 模式的主任务。
- Swizzle — 葫芦步
经典的对称蹬冰动作,两脚同时外八再内收。
- RollerCrouch — 滑行中下蹲
在轮子上保持滑行的同时压低重心。
- RollerSlope — 斜坡滑降
在斜坡上滑降并保持可控。
- RollerStandUp — 从地面站上轮子
摔倒之后从地面重新站到轮子上。
- Spin — 原地旋转
在轮子上原地快速旋转。