オリジナルロボットを強化学習で歩かせる ― IsaacSim/IsaacLabによるSim2Real開発事例
更新日:3 日前
こんにちは、IDXソリューション部のM.Tです。
市販の教育用四足歩行ロボットを題材に、ロボットモデルの作成から強化学習、実機デプロイまでを行ったSim2Real開発の事例を紹介します。
キーワード:フィジカルAI デジタルツイン IsaacSim IsaacLab Sim2Real 強化学習
はじめに
この記事では、NVIDIAのIsaacSim/IsaacLabを用いた強化学習の開発事例を紹介します。IsaacSimには各社ロボットメーカーの機体が標準アセットとして用意されていますが、今回はそれらを使わず、市販の教育用ロボットを題材に選びました。シミュレーション上で使用するロボットモデルの作成から強化学習環境の作成・実行、そして生成したポリシーを実機に搭載して動作させるまで、Sim2Realの一連の流れを実際に行った内容をお伝えします。
使用したロボットと開発環境
使用したロボット
Yahboom社の「DOGZILLA S2」を使用しています。犬型の4足歩行ロボットで、全部で12関節あり、各関節にサーボモーターを搭載しています。またIMU、LiDAR、カメラのセンサーも搭載しており、Raspberry Pi 5に学習済みのポリシーを載せることで歩行などの動作を行わせることができます。

開発環境
今回はLinux環境で行っていますが、IsaacSim/IsaacLabの利用だけであればWindowsでも作業可能です。ただし処理の際にGPUメモリを多く使用するため、対応したGPUの用意が必要です。今回使用した環境は以下の通りです。
CPU:Core i9-14900K
GPU:GeForce RTX 4090
メモリ:128 GB
OS:Ubuntu 22.04
IsaacSim:5.1
IsaacLab:2.3.0
ロボットモデルの作成
CADモデルの準備とIsaacSimへのインポート
まず、IsaacSim上で再現するロボットモデルの形状をCAD上で作成します。今回はYahboom社が公開しているSTEPファイル(https://www.yahboom.net/study/DOGZILLA)を元にSolidWorks上でCADモデルを作成しています。
CADモデルは詳細部品まで作り込んでおくことを推奨します。シミュレーション上で現実の動作を再現するには、重量・重心・慣性モーメントといった物理情報をモデルに付与する必要がありますが、これらを実測するのは容易ではありません。CADソフトによっては、組み付けられた部品構成と各部品に設定した材料特性からこれらの数値を計算できます。より実物に近い数値を得るためにも、実際に組み付いている部品構成を忠実に再現し、各部品に対応する材料特性を設定しておくことが重要です。
ここまで準備ができたら、CADファイルをIsaacSimへインポートします。IsaacSimは各種CADファイルのインポートに対応しております。
物理特性の付与
インポートしたロボットモデルに、物理特性(重量・重心・慣性モーメント)を設定していきます。CADソフトによっては、設定した部品構成と材料特性の情報からこれらの物理特性を自動計算する機能を備えています。CADソフト側で計算された物理特性の値を、IsaacSim上のモデルに反映します。

関節(joint)の設定
CADファイルをインポートした直後は、ロボットの各リンクがそれぞれ単体の部品としてインポートされた状態です。このままだと、各リンクがバラバラに崩れてしまいます。そこで、各リンクがどのような関係で接続され、どちらの方向に可動することができるのかを関節(Joint)として設定していきます。
IsaacSimでは、稼働の種類(回転・直動など)に応じて関節を設定できます。今回のDOGZILLA S2は全ての関節が回転動作のため、回転系の関節を付与しています。

システム同定
設定した関節が実機のモーターと同様の応答になるよう、IsaacSim側の関節パラメータを調整していきます。
まず、DOGZILLA S2のモーターを実際に動作させ、入力信号とそのときの出力(応答)を取得します。次に、シミュレーション上に作成したモデルへ実機と同じ入力信号を与え、そのときの出力を取得します。このシミュレーションでの出力が実機に近づくように、関節のパラメータを調整していきます。

強化学習の実施
強化学習の設定や報酬はPythonスクリプトで作成します。作りこみの必要なスクリプトは大きく3つあり、環境設定スクリプト、報酬設定スクリプト、ロボット設定スクリプトになります。

ロボットの設定
ロボットの設定スクリプトでは、使用するロボットのUSDファイルの選択や、関節のパラメータの上書き設定などを行います。
学習環境の設定
学習環境設定スクリプトでは、使用するロボットや動作させる周辺環境、また使用する報酬関数の設定およびその報酬の重みの設定を行います。
報酬関数の作成
報酬関数は、シミュレーション環境中で観測されたロボットの動作に対し、得点を与える機能を持ちます。今回のDOGZILLA S2向けの報酬は、IsaacLabに用意されている四足歩行ロボット(Spotなど)向けの報酬をベースに、DOGZILLA S2向けの項目を追加して作成しています。歩行に必要な基本的な報酬として、主に次のような項目を組み合わせています。
報酬関数 | 内容 |
速度追従報酬 | 指令した前後方向・旋回方向の速度にどれだけ追従できているかを評価し、目標通りに歩行・旋回する動作を促す。 |
姿勢維持・安定化のペナルティ | 上下方向の速度や、ロール・ピッチ方向の傾きを抑えることで、ふらつきの少ない安定した姿勢を維持させる。 |
滑らかな動作のペナルティ | 関節トルクや関節加速度、行動の変化量(アクションレート)を抑えることで、過度に激しい・不自然な動きを抑制する。 |
接地・遊脚に関する報酬 | 足の滞空時間を評価し、望ましくない部位(胴体や大腿部など)の接地にはペナルティを与えることで、自然な脚の運びを促す。 |
これらの重みバランスを調整しながら、目標とする動作に近づけていきます。
学習の実施
強化学習の進捗は報酬の推移から確認することができます。(IsaacSim上で学習の進捗をロボットの動作の様子から確認することもできますが、計算時間が長くなるため基本は報酬の推移を見ています。)途中経過として生成されたポリシーを用いてロボットの動作を確認しつつ学習の進捗を確認します。
目標とする動作に近づくよう、重み付けを変更したり、必要に応じて報酬関数自体を見直したりしながら、学習を繰り返していきます。

実機へデプロイし動作確認
生成されたポリシーを用いてシミュレーション上で動作確認を行い、目標とする動作になったら実機へ転送し、実機での動作を確認します。
ここで動作がシミュレーションと異なる場合は、実機とシミュレーションモデルの間に何らかの差異(Sim2Realギャップ)があると考えられます。そのため、モデルやパラメータの調整を行い、再度ポリシーを生成し直す、というサイクルを繰り返していきます。
おわりに
ここまで、強化学習で使用するロボットモデルの作成から、強化学習の実施、実機デプロイまで、実際に行った事例を紹介してきました。
実機ロボットの特徴(サーボの応答特性やセンサーのサンプリング特性など)をいかにシミュレーションモデルへ組み込むかが、Sim2Realの成否を左右する重要なポイントになると考えられます。
実際に取り組んでみると、全体の仕組みを理解するまでには相応の試行錯誤が必要になるかと思います。これから強化学習の活用を検討したい方などいらっしゃいましたら、以下のリンクからお気軽にお問合せください。 https://www.idxl.co.jp/contact








