Skip to content
Published on

Sim-to-Real — シミュレーションで学んだことを現実へ

Authors

はじめに

ロボットに強化学習をさせるには、数十万から数百万回の試行錯誤が必要です。これほどの経験を現実のロボットで積むには、時間と摩耗、そして安全性の問題が手に負えないほど大きくなります。そのため多くの研究が、シミュレーションの中で大量の経験を速く安全に積んでから、学習した方策を現実のロボットへ移す戦略を選びます。これが sim-to-real 転移です。

しかしここに根本的な難題があります。シミュレーションはどれほど精巧でも現実の完全な複製ではありません。摩擦、接触、センサ雑音、アクチュエータ遅延といった要素が少しずつ異なります。この微細な差が積み重なり、シミュレーションで完璧に動いていた方策が現実ではひどく失敗することがよくあります。この隔たりを現実ギャップ(reality gap)と呼びます。

この記事では、現実ギャップがなぜ生じるのか、そしてそれを狭めるための代表的な手法を見ていきます。ドメインランダム化、ドメイン適応、システム同定、デジタルツイン、そして触覚のように再現が特に難しい物理までを扱います。正確を期すため、特定の物理エンジンやシステムの詳細仕様は確実なもののみに触れ、不確かな部分は一般化して述べます。

現実ギャップとは何か

現実ギャップは、シミュレーションと現実の間のあらゆる不一致を総称します。このギャップは複数の原因から生じます。

              現実ギャップ(Reality Gap)の原因
              ─────────────────────────────

   ┌─────────────────────┐        ┌─────────────────────┐
   │    シミュレーション    │        │       現実           │
   │                     │        │                     │
   │ - 近似された物理     │  ≠     │ - 実際の物理         │
   │ - 理想的な摩擦モデル │ ─ギャップ▶│ - 複雑な摩擦・摩耗   │
   │ - 完璧なセンサ       │        │ - 雑音のあるセンサ   │
   │ - 即時のアクチュエータ│        │ - 遅延・バックラッシュ│
   │ - 単純化された接触   │        │ - 変形・滑り         │
   └─────────────────────┘        └─────────────────────┘

   方策がシミュレーションの「隙間」を悪用するように学習すると
   現実ではその隙間が消え、方策が崩れる。

現実ギャップの原因をいくつかに整理すると次のとおりです。

  • 動力学の不一致: シミュレータが使う物理近似が、実際の物体の質量、慣性、摩擦と微妙に異なります。
  • 接触と摩擦: 物体が互いに触れる瞬間の力、滑り、変形は、物理エンジンが最も正確に再現しにくい部分です。
  • センサの違い: シミュレーションのカメラ画像や深度センサ値は、実際のセンサの雑音、レンズ歪み、照明変化を完全には捉えられません。
  • アクチュエータの違い: 実際のモータには遅延、バックラッシュ(ギアの遊び)、トルク限界、摩耗がありますが、シミュレーションはこれを理想化しがちです。

ドメインランダム化

現実ギャップを狭める最も広く知られた手法がドメインランダム化(Domain Randomization)です。発想は逆説的です。シミュレーションを現実に近づける代わりに、シミュレーションの複数のパラメータをエピソードごとにランダムに大きく揺らすのです。

核心の直感はこうです。摩擦、質量、照明、色、センサ雑音といった要素を幅広く変えながら学習すると、方策はどれか一つの設定に過適合せず、「この程度の範囲の変動はよくあることだ」と学びます。そのように訓練された方策にとって、現実世界はもう一つのランダムな変形のように見えます。

        ドメインランダム化の直感
        ──────────────────────

   [ 単一シミュレーション ]
   ●   ← 一つの狭い設定にだけ最適化 → 現実(○)で失敗
        現実 ○  (学習分布の外)

   [ ドメインランダム化 ]
   ● ● ● ● ● ● ● ● ●   ← 広い範囲の変形に一様に頑健
     現実 ○           (学習分布の中に現実が含まれる)

ランダム化の対象は大きく二つに分かれます。

  • 視覚的ランダム化: テクスチャ、色、照明、カメラ位置、背景などを揺らし、視覚方策を頑健にします。
  • 動力学ランダム化: 質量、摩擦係数、アクチュエータ遅延、関節減衰などの物理パラメータを揺らし、制御方策を頑健にします。
# 動力学ランダム化の設定例(概念的な構成)
domain_randomization:
  friction:
    distribution: uniform
    low: 0.5
    high: 1.5
  mass_scale:
    distribution: uniform
    low: 0.8
    high: 1.2
  actuator_delay_ms:
    distribution: uniform
    low: 0
    high: 20
  observation_noise_std: 0.02
  gravity_scale:
    low: 0.98
    high: 1.02

ドメインランダム化にも明確な限界があります。ランダム化の範囲を広げすぎると課題自体が難しくなりすぎて方策が何も学べません。逆に狭すぎると現実を包含できません。この範囲を適切に設定すること自体が相当なチューニングの労力を要します。

システム同定

システム同定(System Identification)はドメインランダム化と相補的なアプローチです。ランダムに揺らす代わりに、実際のロボットから測定したデータでシミュレータのパラメータを実際に最大限近づけて校正します。

例えば実際のロボットアームを複数の軌道で動かして関節の応答を測定し、その測定値とシミュレーション結果が一致するように摩擦係数、慣性、遅延といったパラメータを最適化します。こうして校正されたシミュレータは現実により似るようになり、ギャップが縮まります。

        システム同定のループ
        ────────────────────

   実際のロボット ──▶ 測定データを収集
                シミュレーション結果と比較
           誤差を減らすようにシミュのパラメータを調整
                        └────▶ (繰り返してシミュを現実に近づける)

実務ではドメインランダム化とシステム同定を併用します。システム同定でシミュレータを現実の近くに合わせ、その周りをドメインランダム化で広く揺らして残るギャップを頑健性で吸収する、という具合です。

観測履歴と暗黙的適応

ドメインランダム化で学習した方策が現実にうまく転移する一つの興味深いメカニズムは、方策が過去の観測の流れから現在の環境の特性を暗黙的に推定することです。

一瞬の観測だけを見ても、今の摩擦が大きいか小さいかは分かりません。しかし直近の数ステップの間にロボットがどんな命令を出したときに実際にどう動いたかを見れば、環境の物理的特性をある程度推し量れます。つまり、方策が観測履歴を入力として受け取れば、「今この環境がどんな種類か」を自ら気づき、それに合わせて行動を調節する余地が生まれます。

   観測履歴で環境を暗黙推定
   ──────────────────────────

   1フレーム:  観測 o_t         ──▶ 環境特性は不明

   履歴:      o_(t-k) ... o_t   ──▶ 「命令に対する反応」から
             (過去の流れ)          摩擦・質量などを暗黙推定
                                 ──▶ それに合わせて行動を調節

この観点から見ると、幅広いドメインランダム化は単に方策を鈍感にするのではなく、多様な環境を区別しそれぞれに適応する能力を学習させるものと理解できます。だからこそ再帰型ニューラルネットワークのように時間情報を扱う構造が、この暗黙的適応に有利です。

ドメイン適応

ドメイン適応(Domain Adaptation)は、方策や認識モデルをシミュレーション領域から現実領域へ移植することに焦点を置きます。代表的には視覚認識で、シミュレーション画像と現実画像の特徴分布が整列するように学習し、シミュレーションで学んだ表現が現実画像でも通用するようにします。

アプローチは多様です。シミュレーション画像を現実のように見せる変換、二つの領域が区別できないよう特徴空間を整列させる方法、少量の現実データで最後の段階を微調整する方法などがあります。核心の目標は同じです。シミュレーションで学習した知識を現実へ移しつつ、現実データの必要量を最小化することです。

デジタルツインと物理エンジン

sim-to-real の土台は結局シミュレータの品質です。近年では、実際のロボットと作業環境を仮想空間に精密に複製したデジタルツイン(Digital Twin)の概念がよく登場します。実際のセルの幾何、物体、照明を可能な限り反映した仮想環境で方策を学習すれば現実ギャップを減らせる、という発想です。

物理エンジンの面では、GPUを活用して数千の環境を同時に並列シミュレーションするツールがロボット強化学習を大きく加速しました。NVIDIA の Isaac 系シミュレーションツールが代表的に挙げられ、このほかにも複数の物理エンジンがロボット研究に使われます。ただし各ツールの正確な機能や性能はバージョンによって異なる場合があるため、詳細は公式ドキュメントを確認するのが安全です。

        GPU 並列シミュレーションの利点
        ──────────────────────────────

   単一環境:   [env] ──▶ 遅いデータ収集
   
   並列環境:   [env][env][env] ... [env]   (数千個を同時に)
                  │    │    │        │
                  └────┴────┴────────┘
              大量の経験を短時間で収集
              ──▶ 強化学習が現実的に可能

再現が難しい物理 — 触覚と摩擦

sim-to-real で特に厄介な領域は接触の多い操作(contact-rich manipulation)です。物体を掴み、はめ込み、こする動作は微細な摩擦と接触力に大きく依存しますが、まさにここが物理エンジンが最も正確に再現しにくい地点です。

  • 摩擦: 静止摩擦と運動摩擦の切り替え、表面状態による変化は、単純な係数一つでは捉えにくいものです。
  • 変形: 柔らかい物体や布のように形が変わる対象は、剛体の仮定では表現されません。
  • 触覚センサ: 指先の圧力分布や滑りを検知する触覚センサは、シミュレーションで再現するのが特に困難です。

こうした理由から、触覚が重要な精密組立のような課題は純粋なシミュレーション学習だけでは限界が大きく、現実データや現実での微調整がより多く必要になる傾向があります。

zero-shot 転移の可能性と限界

理想的な目標は zero-shot 転移です。すなわち、現実で追加の学習や調整をまったく行わずに、シミュレーションで学んだ方策がそのまま現実で動くことです。ドメインランダム化を幅広く適用した移動ロボットの歩行のような一部の課題では、印象的な zero-shot の結果が報告されることもあります。

しかしすべての課題がそうではありません。接触の多い精密操作のように現実ギャップが大きい課題では、依然として現実での微調整(few-shot fine-tuning)が必要な場合が多いのです。そのため実務では次のようなスペクトラムとして理解するのが現実的です。

   転移のスペクトラム
   ──────────────────

   zero-shot          few-shot           full real training
   (現実調整なし)      (少量の現実データ)   (現実で大量に学習)
      │                   │                     │
   ギャップの小さい課題   中間ギャップの課題    ギャップが非常に大きい課題
   (例: 特定の歩行)      (多くの操作課題)      (極限の精密・柔軟物体)

観測ギャップと動力学ギャップ

現実ギャップを扱うときは、それを二種類に分けて考えると役立ちます。観測ギャップと動力学ギャップです。

観測ギャップは、ロボットが世界を見る方法の違いです。シミュレーションのカメラ画像が現実の画像と違って見えたり、深度センサの雑音特性が異なる場合です。動力学ギャップは、世界が実際にどう動くかの違いです。同じ力を加えたとき、物体がシミュと現実で異なる反応をする場合です。

   二種類のギャップ
   ────────────────

   観測ギャップ                   動力学ギャップ
   ┌──────────────┐            ┌──────────────┐
   │ 世界を見る    │            │ 世界が動く    │
   │ 方法の違い    │            │ 方法の違い    │
   │              │            │              │
   │ 例: 画像の質感│            │ 例: 摩擦・慣性 │
   │     センサ雑音│            │     遅延・接触 │
   └──────┬───────┘            └──────┬───────┘
          │                           │
          ▼                           ▼
   主に視覚ランダム化・           主に動力学ランダム化・
   ドメイン適応で対応             システム同定で対応

この区別が有用なのは、どのギャップが問題かによって処方が変わるからです。視覚認識が揺れるなら視覚ランダム化やドメイン適応が必要で、制御が揺れるなら動力学ランダム化やシステム同定に集中すべきです。二つのギャップをひとまとめにすると、見当違いの場所に労力を注ぎがちです。

特権情報と教師-生徒学習

sim-to-real でよく使われる強力な手法が、特権情報(privileged information)を活用した教師-生徒(teacher-student)学習です。

発想はこうです。シミュレーションの中では、現実では得られない完璧な情報にアクセスできます。物体の正確な質量、地形の正確な高さ、摩擦係数といった値です。こうした特権情報をそのまま受け取る教師方策は、非常に容易に、非常によく学習します。問題は、現実のロボットにはこの情報がないことです。

そこで二段階に分けます。まず特権情報を持つ教師方策をシミュレーションで学習します。次に、現実で実際に得られる観測(カメラ、関節センサなど)だけで教師の行動を真似る生徒方策を学習します。生徒は特権情報なしでも教師のように振る舞う方法を学び、この生徒方策を現実に配備します。

   教師-生徒学習 (特権情報の活用)
   ────────────────────────────────

   [教師]  特権情報(完璧な物理値) ──▶ 容易に良い方策を学習
              │  教師の行動を目標に
   [生徒]  現実で得る観測だけを使用 ──▶ 教師を模倣するよう学習
   現実配備: 生徒方策 (特権情報は不要)

この方式は特に脚型歩行のように地形情報が重要な課題で効果的です。シミュでは地形の高さを正確に知っていますが現実では知りえないので、生徒が過去の観測の流れから地形を暗黙的に推定するよう学習させるのです。

事例で見るギャップの大きさ

先に述べた転移スペクトラムをもう少し具体的に見てみます。ある課題がどの位置に置かれるかは、おおむね二つの要因で決まります。接触の複雑さと精度要求です。

  • 接触が少なく余裕が大きい課題: 広い空間での移動や大きな物体を大まかに押すような課題は現実ギャップが相対的に小さく、幅広いドメインランダム化だけで良い転移が可能な場合が多いです。
  • 接触が多いが余裕がある課題: 物体を掴んで運ぶ一般的な操作は中程度のギャップを持ち、ランダム化に加えて少量の現実データ微調整が役立ちます。
  • 接触が多く精度が極限の課題: 部品を微細な遊びではめ込んだり布を扱う作業はギャップが非常に大きく、現実データの比重を大きく増やす必要があります。
   課題の位置を決める二つの軸
   ────────────────────────────

   精度
   要求
   高 ┤ 精密組立         極限の柔軟物体
      │ (多くの現実データ) (ほぼ現実学習)
      │ 大まかに押す     一般操作
   低 ┤ (zero-shot 近く)  (few-shot)
      └────────────────────────────▶
        低        接触の複雑さ        高

この地図は絶対的ではなく、課題ごとに例外があります。しかし「自分の課題がどれほど難しい転移か」を見積もるおおよその直感を与えてくれます。

実務ワークフロー

sim-to-real を実際に適用する際のおおよその流れは次のとおりです。

   sim-to-real 実務パイプライン
   ─────────────────────────────

   [1] デジタルツイン/環境のモデリング
   [2] システム同定でシミュのパラメータを校正
   [3] ドメインランダム化の範囲を設定してシミュ学習
   [4] 現実で小規模に評価
        ├── 性能が十分 ──▶ 配備
        └── ギャップを発見 ──▶ ランダム化範囲・同定を再調整 (再び [2]/[3])

アクチュエータと遅延のモデリング

現実ギャップのうち意外に大きな比重を占めるのがアクチュエータの非理想性です。シミュレーションはしばしば「命令したトルクが即座にそのまま出る」と仮定しますが、実際のモータはそうではありません。

  • 遅延(Latency): 命令を出してから実際に力が出るまで時間がかかります。制御周期が速いほどこの遅延の相対的な影響が大きくなります。
  • バックラッシュ(Backlash): ギアに遊びがあり、方向を変えるときに一瞬力が伝わらない区間が生じます。
  • トルク限界と飽和: モータが出せる力には上限があり、その近くでは命令どおりに反応しません。
  • 摩擦と摩耗: 関節の摩擦は時間とともに変わり、個々のロボットごとに微妙に異なります。
   理想的 vs 実際のアクチュエータ
   ──────────────────────────────

   理想的:  命令トルク ──即座──▶ 出力トルク (完全一致)

   実際:    命令トルク ──遅延──▶ ──バックラッシュ──▶ ──飽和──▶ 出力
                        (時間)    (遊び)            (上限)   (不完全)

   ▶ 方策が理想的な仮定に依存すると、現実で振動するか失敗する。

こうした非理想性をシミュレーションに反映するか、アクチュエータの応答自体をデータで学習した別のモデルで置き換える方法が使われます。特に遅延をランダム化の対象に含めることは、制御方策の頑健性に大きく役立ちます。

Real-to-Sim — 逆方向の橋

これまではシミュレーションから現実へ向かう方向を扱いましたが、逆方向の流れも重要です。現実を観測してシミュレーションを構築または改善する real-to-sim です。

現実の場面を3Dスキャンや再構成の手法で仮想環境へ移せば、実際の作業空間とそっくりに見えるシミュレーションが得られます。こうして作ったシミュレーションで学習した方策は、まさにその空間へ再び転移するのが容易になります。real-to-sim と sim-to-real を循環的に繰り返すと、シミュと現実が互いを改善する好循環が生まれます。

   real-to-sim ↔ sim-to-real の循環
   ────────────────────────────────

   現実の観測 ──(real-to-sim)──▶ 精密なシミュを構築
        ▲                              │
        │                              ▼
        │                       シミュで方策を学習
        │                              │
        └──(sim-to-real)◀── 現実で検証・データ収集

事例で見る sim-to-real

具体的な感覚のために、二種類の課題を対比してみます。実際のシステムの詳細な数値は実装ごとに異なるため、ここでは一般的な傾向のみを述べます。

第一に、四足・二足ロボットの歩行です。この課題はドメインランダム化と特権情報に基づく教師-生徒学習を組み合わせて、比較的成功した sim-to-real の事例がいくつか報告されてきました。多様な地形や外乱に頑健な方策をシミュで学習してから現実の歩行に適用するアプローチです。

第二に、指先の精密操作です。複数の指で物体を回転させたり再配置したりする課題は、広範なドメインランダム化によって印象的な結果が報告されたことがあります。ただしこうした課題は接触が非常に複雑で、ランダム化範囲の設定と学習に相当な工学的努力が必要です。

二つの事例に共通する教訓は、成功する sim-to-real が一つの魔法のような手法ではなく、複数の手法(ランダム化、同定、教師-生徒、慎重な評価)の組み合わせと反復的なチューニングの産物だということです。

現実配備時の安全装置

シミュレーションでどれほどよく検証しても、学習した方策を初めて現実のロボットに載せるときは予想外の行動が出ることがあります。そのため実際の配備段階では、幾重もの安全装置を置くのが標準的です。

  • トルク・速度制限: 方策がどれほど大きな命令を出しても、ハードウェアのレベルで安全限界を超えないようにします。
  • 作業空間の境界: ロボットアームが指定した安全領域を出たら即座に停止させます。
  • 非常停止: 人がいつでも介入してロボットを止められる物理的・ソフトウェア的なスイッチを置きます。
  • 段階的配備: 最初は低速で狭い範囲から始め、信頼が積み上がれば徐々に条件を広げます。
   現実配備の安全階層
   ────────────────────

   方策の出力
   [トルク・速度制限] ──▶ ハードウェア限界の超過を遮断
   [作業空間の境界]   ──▶ 安全領域を出たら停止
   [非常停止の待機]   ──▶ 人がいつでも介入
   実際のロボット動作 (安全範囲内)

こうした装置は sim-to-real の性能自体を高めはしませんが、ギャップによる予想外の失敗が事故につながらないよう防ぐ最後の防衛線です。特に人のそばで動くロボットでは不可欠です。

ギャップを定量化する

sim-to-real の研究と実務では、「ギャップがどれほど大きいか」を見積もることが重要です。そのために、しばしばシミュレーションと現実で同じ方策を実行し、その性能や軌道がどれだけ開くかを比較します。

  • 性能ギャップ: シミュでの成功率と現実での成功率の差。この差が大きければ転移が失敗したことになります。
  • 軌道ギャップ: 同じ命令に対して、シミュと現実のロボットの状態が時間とともにどれだけ異なって進むか。
   シミュ-現実の軌道ギャップ
   ────────────────────────

   シミュ: s0 ─▶ s1 ─▶ s2 ─▶ s3 ─▶ ...
   現実:   s0 ─▶ s1'─▶ s2'─▶ s3'─▶ ...
                  ↑     ↑     ↑
                次第に広がるギャップ

   ▶ 序盤ですでに大きく開くなら動力学ギャップ、
     特定の状況でだけ開くならその状況の物理を疑う。

こうした定量化はどこを直すべきかを教えてくれます。軌道が最初から開くなら基本的な動力学の校正が必要で、特定の瞬間(例: 接触が起こるとき)にだけ開くなら、その物理の再現を改善すべきです。

落とし穴と注意点

  • 過度なランダム化: ランダム化の範囲をむやみに広げると学習がまったく収束しないか、過度に保守的な方策になります。
  • シミュの隙間の悪用: 方策はシミュレータの物理的誤りを悪用し、非現実的な方法で報酬を得ることがあります。シミュでしか通用しないこうした戦略は現実で崩れます。
  • 評価のバイアス: シミュレーション性能が良いからといって現実性能を楽観してはいけません。必ず現実で十分に検証すべきです。
  • センサの整合: シミュと現実のセンサ座標系、遅延、スケールがずれると方策は即座に失敗します。この整合はしばしば見落とされますが非常に重要です。

おわりに

sim-to-real 転移は、ロボット学習を現実的にする核心の橋渡しです。ドメインランダム化は頑健性でギャップを吸収し、システム同定とデジタルツインはシミュレータを現実へ引き寄せ、ドメイン適応は学習した知識を現実へ移植します。これらの手法は互いに排他的ではなく、実務では組み合わせて使われます。

ただし触覚や精密接触のように物理の再現が難しい領域では、依然として現実データが必要であり、zero-shot 転移は万能ではありません。sim-to-real は完成した解法というより、現実ギャップを少しずつ狭めていく継続的な工学のプロセスに近いのです。

参考資料