ロボットを配置して走らせるこんにちは。Mouseを走らせるまでの手順をご紹介します。Simの概要とセットアップ手順、サンプルプロジェクトの動作確認まで行いました。Mouseをシミュレータ上で走らせます。EngineからUnityに変更されました。2019.3以降に対応しておりません。2019.2パッケージのダウンロード今回使用するパッケージをGitHubに公開しました。Mouseを走らせるための各種設定ファイルになっています。下記コマンドでappsディレクトリにリポジトリをクローンしてください。SDKではJSONによってアプリケーションの設定をします。詳細は省きますがここで簡単にご紹介します。SDKのJSONは主にgraphとconfigによって構成されています。graphには起動するnodeとnode同士の接続を設定するedgeを記述します。configにはそれぞれのnodeに関する設定を記述します。Mouseの速度制御を行うnodeと、ジョイスティックで目標速度を指定するnodeがあり、それぞれedgeで接続しています。Mouseのトレッドやタイヤ半径を記述しておくといった具合です。実際のフォーマット等は公式ドキュメントをご覧ください。SIMはROSでお馴染みのURDFを読み込むことができます。読み込みに関する設定方法として、Blueprintと呼ばれるノードベースのインターフェースを使用する方法と、JSONファイルに記述する方法があります。Blueprintの方が操作が直感的かもしれませんが、説明や共有のしやすさから今回はJSONファイルを使用しています。公式ドキュメントのこちらの手順に沿ってURDFを読み込みます。https://docs.nvidia.com/isaac/isaac_sim/plugins/robot_builder/urdf.html#configuring-robots-using-jsonURDFの準備マテリアルやアクチュエータの設定は別のファイルに記述するため、LinkとJointだけのシンプルなURDFが必要です。GAZEBO等の要素が入っているとエラーになってしまうためご注意ください。今回はセンサの例としてカメラ映像を取得したいので、RealSenseD435iを搭載したモデルを作成しました。Sim用のURDFの置き場所は決まっています。下記コマンドでダウンロードしたパッケージ内にあるURDFをコピーします。~/UnrealEngine/IsaacSimProject/Content/URDFbridge_configの準備パッケージ内にbridge_configというディレクトリがあります。その名の通りシミュレータとアプリケーションをつなぐ設定ファイルが置いてあります。前回のサンプルプロジェクト同様、raspimouse_full.jsonにraspimouse_full_graph.jsonとraspimouse_full_config.jsonのパスを記述します。[username]を使用しているユーザー名に書き換えてください。["/home/[username]/isaac/apps/RaspberryPiMouse_IsaacSIM/bridge_config/raspimouse_full_config.json"]}raspimouse_full_config.jsonにはURDFの読み込みと搭載するカメラに関する設定が書かれています。referenseはURDFのパス、poseはロボットの初期位置です。spawn_configにはどのLinkとJointがホイールに関するものなのか記述しています。その他にも様々な設定項目があるので詳しくは公式ドキュメントをご覧ください。Mouseが走り回るためのフィールドを作成します。Engineのエディタを起動します。-vulkanチェッカーボードのようなものが配置されただけのフィールドが表示されたと思います。Engineではこうしたフィールドのことをレベルとよびます。Engineと変わりません。建物や家具の3Dオブジェクトなどを自由に配置することができます。Engineではアクタとよびます。今回はとりあえず走り回ることができればいいので、このシンプルなチェッカーボードのまま使用したいと思います。Engineの公式ドキュメントをご覧ください。新規作成したレベルは最初に少しだけ設定が必要になります。公式ドキュメントだとこちらのページです。https://docs.nvidia.com/isaac/isaac_sim/content/maps/index.html#adding-new-environments画面左上のウィンドウをクリックし、ワールドセッティングを開きます。OverrideからIsaacSimGameModeBaseを選択します。Sim起動時にJSONファイルが読み込めるようになります。レベルの保存Ctrl+sを入力してレベルを保存します。レベルはMapsフォルダ内に保存します。今回はFlatMapというフォルダを作成し、その中にFlatMapという名前でレベルを保存しました。Engineを終了してください。Engineを起動できます。Mouseが配置されます。Eキーで上下移動ができます。Mouseがあるはずです。ビューポートからマウスカーソルを外したい場合はShift+F1を入力してください。ロボットを操作するそれではロボットをブラウザ上のゲームパッドで操作したいと思います。下記コマンドでアプリケーションを実行しましょう。Sightが起動します。左のChannnelsタブのraspimouseにチェックを入れると搭載されたRealsenseD435iの画像と深度画像を見ることができると思います。Gamepadウィンドウが開きます。BACKENDをクリックし、ウィンドウ下のMousepadを選択します。ウィンド上部に表示される緑の丸をマウスでドラッグすることで、前後移動と左右旋回ができます。Mouseのシミュレーションについてご紹介しました。Engine版の廃止という驚きの結末を迎えることとなりました。Navigationとしてナビゲーションに特化することとなり、シミュレータはUnityベースになったようです。Manipulationも開発中とのことで楽しみな要素が盛りだくさんとなっています。詳細は公式ホームページをご覧ください。Simについて記事を書くか未定ですが、今後も注目していきたいです。セットアップ編こんにちは。Mouseのモデルを走らせることができたので、その記録をブログに書いていきます。今回はSDKのインストールと、シミュレータのサンプルプロジェクトを動作させるところまでご紹介します。SIMはNVIDIAが提供しているロボットシミュレータです。EngineとGemsがあります。EngineはROSのようなフレームワークで、ロボットの動作に必要な様々なプロセスがモジュール形式で管理できます。Gemsはナビゲーションや物体認識など、NVIDIAが提供するパッケージ群の名称です。SIMはこれらの機能をシミュレーションできるので、ロボットの動作確認や機械学習用のデータセットを作成する際に強力に効果を発揮できそうです。