YouDuck.ai

搭起训练环境,训出第一个策略

最后更新

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 healthrobotctl monitor 底部边框都会说明原因。

相关