Isaac SIMで走るRasPiMouse [1] – セットアップ編

こんにちは。バイトの鍬形です。
Isaac SIMというロボットシミュレータでRaspberry Pi Mouseのモデルを走らせることができたので、その記録をブログに書いていきます。今回はSDKのインストールと、シミュレータのサンプルプロジェクトを動作させるところまでご紹介します。

Isaac SIMについて

Isaac SIMはNVIDIAが提供しているロボットシミュレータです。Isaac SDKというロボット向けプラットフォームの一部で、他にはIsaac Robot EngineとGemsがあります。Isaac Robot EngineはROSのようなフレームワークで、ロボットの動作に必要な様々なプロセスがモジュール形式で管理できます。Gemsはナビゲーションや物体認識など、NVIDIAが提供するパッケージ群の名称です。

今回注目するIsaac SIMはこれらの機能をシミュレーションできるので、ロボットの動作確認や機械学習用のデータセットを作成する際に強力に効果を発揮できそうです。

https://developer.nvidia.com/isaac-sdk

システム要件

ドキュメントによると、下記スペックが最小要件のようです。

https://docs.nvidia.com/isaac/isaac_sim/setup.html#machine-configuration

  • CPU: Intel i7-6800K
  • GPU: Nvidia GeForce GTX 1080 (minimum), NVIDIA Titan XP(recommended)
  • Memory: 32 GB
  • Storage: 512 GB
  • OS: Ubuntu 18.04, 64-bit

使用環境

今回は下記環境を使用しました。

  • CPU: Intel i7-7700HQ
  • GPU: Nvidia GeForce GTX 1080
  • Memory: 32GB
  • OS: Ubuntu 18.04.2 LTS
  • Isaac SDK: 2019.2

Isaac SDKのインストール

公式のドキュメント通りインストール作業を進めていきます。

https://docs.nvidia.com/isaac/isaac/doc/setup.html#installing-dependencies-on-the-desktop

まずは下記リンクからIsaac SDKをダウンロードします。ダウンロードにはNVIDIA Developerアカウントが必要です。アカウントを作成してログインできたら、ISAAC Version 2019.2のSDKをダウンロードします。

https://developer.nvidia.com/isaac/downloads

ワークスペース用のディレクトリを作成し、先ほどダウンロードしたファイルを展開します。ダウンロードしたファイルの保存場所やファイル名は異なる場合があるので、適宜変更してください。

$ mkdir ~/isaac
$ cd ~/isaac
$ tar -xf ~/Downloads/isaac-sdk-2019.2-30e21124.tar.xz

install_dependencies.shを実行すると、必要なライブラリ等のインストールが始まります。Installation Succeededと表示されれば終了です。

$ engine/build/scripts/install_dependencies.sh

サンプルアプリケーションの実行

Isaac SDKが正常にインストールされたか確認するためにサンプルアプリケーションをビルド、実行してみます。

$ bazel build //apps/samples/stereo_dummy
$ bazel run //apps/samples/stereo_dummy

ちなみにビルドしてない状態でrunコマンドを実行しても勝手にビルドを始めてくれるので、基本的には2行めのrunコマンドだけで大丈夫です。

ブラウザからhttp://localhost:3000 にアクセスするとIsaac Sightが起動します。ROSでいうところのRvizみたいなもので、カメラ映像やセンサー値、地図などを見ることができます。左のChannnelsタブのstereo_dummyにチェックを入れるとダミーカメラの映像が見えます。オレンジ色のモヤモヤとした映像が確認できればIsaac SDKのインストールは成功です。

Isaac SIMのインストール

いよいよ本題のIsaac SIMをインストールします。Isaac SDK同様、公式のドキュメントに沿って作業します。別途CUDA 10.0と、対応するNVIDIA GPU driverが必要なので、事前にインストールしてください。NVIDIA GPU driverのバージョンは418.74以降推奨とのことです。

https://docs.nvidia.com/isaac/isaac_sim/setup.html

Vulkan sdkのインストール

Isaac SIMの動作にはVulkanが必要です。こちらからValkan SDKをダウンロードし、インストールします。

https://vulkan.lunarg.com/sdk/home#linux

ダウンロードしたファイルを展開します。Vulkanのバージョンが異なるとファイル名も異なるので、適宜書き換えてください。

$ mkdir ~/vulkan
$ mv vulkansdk-linux-x86_64-1.1.101.0.tar.gz ~/vulkan
$ cd ~/vulkan
$ tar -xvf vulkansdk-linux-x86_64-1.1.101.0.tar.gz
$ echo "source ~/vulkan/1.1.101.0/setup-env.sh" >> ~/.bashrc

新しくターミナルを開き、下記コマンドを実行します。

$ export | grep VK_LAYER_PATH

リポジトリのクローンとビルド

Isaac SIMはベースとなっているUnreal Engineのリポジトリをフォークしています。Unreal Engineのリポジトリはプライベートになっており、Epic GamesのアカウントとGitHubを連携させることでアクセスできるようになります。まずは下記リンクからEpic Gamesのアカウントを作成します。

https://www.unrealengine.com/register

Unreal Engineのページへ行き、右上のサインインボタンからサインインします。

https://www.unrealengine.com/

右上のユーザーネームにマウスオーバーし、表示される開発者情報という項目をクリックします。

左側の接続済みアカウントをクリックするとGitHubの欄があるので「接続する」をクリックして案内に従って接続します。

これで下記リポジトリにアクセスできると思います。

https://github.com/NvPhysX/UnrealEngine

下記コマンドでCloneします。

$ git clone https://github.com/NvPhysX/UnrealEngine
$ cd UnrealEngine/
$ git checkout IsaacSim_1.2

IsaacSimProject_1.2_Core.gitdeps.xmlを下記リンクからダウンロードしたものに置き換えます。

https://developer.nvidia.com/isaac/downloads

$ rm Engine/Build/IsaacSimProject_1.2_Core.gitdeps.xml
$ tar -xvzf ~/Downloads/IsaacSimProject_1.2.1238533.gitdeps.tar.gz -C Engine/Build/

下記コマンドを順に実行していくとインストール完了です。Setup.shとmakeは結構時間がかかるのでご注意ください。

$ ./Setup.sh
$ ./GenerateProjectFiles.sh
$ make && make IsaacSimProjectEditor

サンプルプロジェクトの実行

Carterという移動ロボットのサンプルプロジェクトを実行してみます。公式ドキュメントではこちらのページになります。

https://docs.nvidia.com/isaac/isaac_sim/quickstart.html

Carterついて詳しくはこちら。

https://docs.nvidia.com/isaac/isaac/doc/tutorials/carter_hardware.html

まずはcarter_full.jsonをちょっと編集します。

$ cd ~/isaac
$ vim apps/carter/carter_sim/bridge_config/carter_full.json

下記のようにcarter_full_graph.jsoncarter_full_config.json のパスを記述します。ユーザー名がubuntuでない場合は適宜書き換えてください。

{
  "graphs": ["/home/ubuntu/isaac/apps/carter/carter_sim/bridge_config/carter_full_graph.json"],
  "configs": ["/home/ubuntu/isaac/apps/carter/carter_sim/bridge_config/carter_full_config.json"]
}

以上で準備完了です。下記コマンドでアプリケーションを起動させます。

$ bazel run apps/carter/carter_sim:carter_sim -- --config="apps/assets/maps/carter_warehouse_p.config.json" --graph="apps/assets/maps/carter_warehouse_p.graph.json"

次にシミュレータを起動させます。こちらもユーザー名は適宜書き換えてください。

$ ~/UnrealEngine/Engine/Binaries/Linux/UE4Editor IsaacSimProject CarterWarehouse_P -vulkan -isaac_sim_config_json="/home/ubuntu/isaac/apps/carter/carter_sim/bridge_config/carter_full.json"

Unreal Engineが起動するので右上の実行ボタンを押すとシミュレータが動作します。初回起動時はシェーダーのコンパイルが実行されるため動作が重かったり描画されたシミュレータの色合いが変だったりしますが、コンパイルが終了すれば正常になります。

実行と同時に走り出します。ランダムに設定された目的地へ向かって人や障害物を避けつつナビゲーションしています。

ブラウザからhttp://localhost:3000 にアクセスするとIsaac Sightが起動し、左のChannnelsタブのcarter_simにチェックを入れるとカメラ画像や地図、自己位置などが表示されます。

右側には単なるカラー映像だけでなく、セグメンテーションやバウンディングボックスも表示されています。これらは予めシミュレータ上のオブジェクトにタグ付けを行うことで勝手に生成してくれます。僕はまだ試せてないのですが、機械学習用のデータセットとして活用できるそうです。

まとめ

今回はIsaac SDK、Isaac SIMのインストールの手順をご紹介し、サンプルプロジェクトを実行しました。次回はRaspberry Pi Mouseのモデルを作成し、シミュレータ上に表示します。