搭起训练环境,训出第一个策略
最后更新
Microduck 的动作策略不在机器人仓库里训练,而在隔壁的 microduck_rl。这一页是从零跑通一次训练所需的最小路径。
环境要求
- 一块 CUDA GPU——训练跑在 MuJoCo Warp 上。
- uv——Python 环境管理。
底层是 mjlab(MuJoCo Warp)加 PPO。策略在这里以 50 Hz 训练,导出成 ONNX,由机器人仓库的运行时加载——训练频率和机上控制循环频率是同一个 50 Hz,这不是巧合。
四条命令
git clone https://github.com/pollen-robotics/microduck_rl
cd microduck_rl
训练行走策略(用你的 GPU;4096 个并行环境下约 1–2 小时能得到可用的步态):
uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 4096
在 viewer 里观察训练好的策略:
uv run play Mjlab-Velocity-Flat-MicroDuck --wandb-run-path <entity/project/run_id>
导出成 ONNX 用于部署:
uv run scripts/export.py Mjlab-Velocity-Flat-MicroDuck --wandb-run-path <...>
用键盘在 CPU 版 MuJoCo 里驱动导出的策略:
uv run scripts/infer_policy.py --walking output.onnx
从 checkpoint 续训
uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 4096 \
--agent.run-name resume --agent.load-checkpoint model_29999.pt --agent.resume True
没有 GPU
给任意 train 命令加 --hf-jobs,训练会跑在 Hugging Face Jobs 上而不是本地。详见仓库里的 scripts/hf/README.md。
在仿真里排练真实的策略切换
部署时运行时会热切换这些策略(行走 / 恢复 / 特技),背后是一份共享的 61 维观测契约,所以任何一个策略都能在任意时刻接管机器人。
scripts/infer_policy.py 排练的正是这件事:
uv run scripts/infer_policy.py --walking walk.onnx --standing stand.onnx \
--sitstand sitstand.onnx --roulade roulade.onnx --new-cmd-obs
键盘驱动:速度指令、G 低头捡、Y 坐下/站起、R 前滚翻、K / L 左右踢。
支持 --debug、--save-csv、--record,用于做 sim2real 对比。
把自己的策略放上机器人
不需要发布一个版本。在机器人的 /etc/robot/robotd.toml 里直接指过去:
[policy]
walk = "/home/radxa/my_walking.onnx"
stand = "/home/radxa/my_stand.onnx"
sudo systemctl restart robotd
这些路径能挺过系统更新——发布版替换的是它自带的二进制和策略文件,不是这个指向别处的配置。删掉这几行就回到发布版自带的策略。
加载失败的策略会报 unhealthy,robotctl health 和 robotctl monitor 底部边框都会说明原因。
相关
- 训练任务清单——全部可训练任务及其 id
- sim2real 配方——BAM 执行器模型、域随机化、齿隙建模