sim2real とは、そしてなぜ最も難しいのか
最終更新
sim2real とは、シミュレーションで学習したポリシーを実機で動かすまでの移行を指します。
これが独立した技術になっているのは、シミュレーションで見事に動くポリシーが実機で転ぶのが、事故ではなく通常の結果だからです。
差はどこから来るか
ポリシーが学んだのは「この観測を与えられたら、この関節指令を出す。するとその結果になる」という因果です。この鎖のどこか一つでも実機で成立しなければ、ポリシーは機能しません。
| 要素 | シミュレーションでの単純化 | 実機の現実 |
|---|---|---|
| アクチュエータ | 理想トルク源、指令=出力 | 摩擦、逆起電力、電圧降下 |
| 伝達 | 剛結合 | バックラッシュ、反転時の遊び |
| センシング | 正確な関節角 | エンコーダは遊びの後ろにある |
| タイミング | 指令は即座に効く | 通信と計算の遅延 |
| 電源 | 一定 | バッテリーは減り、トルクもそれに従う |
個々は小さな誤差です。合わさると、床反力を精密に利用することを学んだ歩容を破綻させるには十分です。
microduck_rl の対処
レシピは誰かの経験ではなくリポジトリに符号化されています。4 つあります。
- BAM アクチュエータモデル — サーボは理想トルク源ではない
- ドメインランダム化 — 観測ではなく物理をランダム化する
- バックラッシュのモデル化 — エンコーダの正しい側に
- 61 次元の観測契約 — ポリシーが任意の瞬間に引き継げる
移行の検証
scripts/infer_policy.py は --debug、--save-csv、--record を受け付けます。用途はまさにこれで、同じ指令列をシミュレーションと実機の両方で流し、関節ごとの波形を比較します。
実機側からの書き出し:
robotctl monitor --json --hz 50 > run.jsonl