学習とデプロイ
最終更新
Microduck のポリシーはロボット本体のリポジトリではなく、隣の microduck_rl で学習されます。MuJoCo Warp と PPO、ONNX に書き出し、ロボット上のランタイムが読み込みます。
全体の流れ
ポリシーは 50 Hz で学習され、オンボードの制御ループも 50 Hz です。これは偶然ではありません。両端の周波数が一致していることが、シミュレーションで学んだタイミングが実機でも成立する条件のひとつです。
最短ルート
CUDA GPU があれば、4 つのコマンドで一巡します。
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 をボードに置き、設定ファイルから指すだけです。
[policy]
walk = "/home/radxa/my_walking.onnx"
sudo systemctl restart robotd
このパスはシステム更新を越えて残ります。 リリースが置き換えるのは同梱のバイナリとポリシーであって、別の場所を指すこの設定ではありません。行を消せば元に戻ります。
読み込めなかったポリシーは unhealthy を報告し、robotctl health と robotctl monitor の下端の両方が理由を示します。
sim2real を決めるもの
シミュレーションでは綺麗に歩くのに実機で転ぶ、というのは事故ではなく通常の結果です。microduck_rl はそのレシピを誰かの経験ではなくリポジトリに符号化しています。4 つあります。
- アクチュエータを理想化できない。 Dynamixel XL330 に対する BAM の M6 モデル(電圧制御則、逆起電力、クーロン/ストライベック/負荷依存摩擦)。サーボを理想トルク源として扱うと、学習した歩容は実際には得られない応答に依存します。
- ランダム化するのは物理パラメータであって観測ノイズではない。 バッテリー電圧、負荷時の電圧降下、指令遅延、摩擦の大きさ。観測にガウスノイズを足すのとは別物です。
- バックラッシュを正しい側にモデル化する。 実機のエンコーダは遊びの出力側にあるため、シミュレーションの観測もそれを通して読む必要があります。入力側にモデル化すると、ポリシーは関節位置を正確に知っていると信じ込みます。この誤差は関節が反転するまで表に出ません。
- 61 次元の共有観測契約。 これがあるから、歩行・復帰・技のポリシーが任意の瞬間にロボットを引き継げます。
学習できるタスク
主タスクは Mjlab-Velocity-Flat-MicroDuck。ほかに転倒復帰、立ち上がり、着座、拾い上げ、ボールキック、前転、そして受動輪のためのローラータスク群があります。
主タスクにはそれぞれ、各関節に ±1° の歯車遊びを入れて学習する Backlash の双子があります。
次に読む
- 学習環境を整える — 動作要件、4 つのコマンド、GPU が無い場合
- 学習タスク一覧 — 各タスクの id・地形・用途
- sim2real のレシピ — 実機に移せるかどうかを決める 4 つのこと
このセクション
- Velocity — 速度指令での歩行
主タスク。速度指令に従って歩きつつ頭部姿勢指令も受ける。最初に学習させるのはこれ。
- 学習環境を整えて、最初のポリシーを訓練する
microduck_rl の動作要件、中心となる 4 つのコマンド、そして GPU が無い場合の代替手段。
- VelStand — 歩行と転倒復帰をまとめて
歩行と転倒復帰を 1 つのポリシーに学習させ、実行時の引き継ぎを無くす。
- 学習タスク一覧
microduck_rl で学習できる全タスクの id・地形・用途。roller シリーズと Backlash 版を含みます。
- sim2real のレシピ
Microduck がシミュレーションから実機へ移るために依存している 4 つのこと。BAM アクチュエータ物理、ドメインランダム化、バックラッシュのモデリング、共有された観測契約。
- StandUp — 地面から立ち上がる
うつ伏せ・仰向け・座位から立ち上がり、その後は立位を保ちつつ姿勢指令を受ける。
- SitStand — 座ると立つ
指令による座位 ↔ 立位の切り替えを 1 つのポリシーで。動作は穏やかで、頭部は操作可能なまま。
- GroundPick — 物を拾う
しゃがんで嘴の先で地面に触れ、立位に戻る。パッドの A が起動する動作。
- BallKick — ボールを蹴る
70 mm・15 g のボールを前に蹴る。ポリシーはボールを見ていない。
- Roulade — 前転
頭を越えて前方に一回転し、足で着地する。X / □、長押しで連続。
- Rollers — 速度指令でのローラー滑走
受動輪を履いた状態の基本ポリシー。roller モードにおける主タスク。
- Swizzle — 対称のスイズル
両足を同時に外へ開き内へ戻す、古典的な滑走動作。
- RollerCrouch — 滑走中のしゃがみ
車輪の上で滑走を保ったまま重心を下げる。
- RollerSlope — 斜面の滑降
車輪で斜面を降りながら制御を保つ。
- RollerStandUp — 地面から車輪の上へ
転倒後、地面から車輪の上へ立ち上がる。
- Spin — その場回転
車輪の上でその場で高速に回転する。