こんにちは。バイトの鍬形です。
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はこれらの機能をシミュレーションできるので、ロボットの動作確認や機械学習用のデータセットを作成する際に強力に効果を発揮できそうです。
システム要件
ドキュメントによると、下記スペックが最小要件のようです。
- 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のアカウントを作成します。
Unreal Engineのページへ行き、右上のサインインボタンからサインインします。
右上のユーザーネームにマウスオーバーし、表示される開発者情報という項目をクリックします。
左側の接続済みアカウントをクリックするとGitHubの欄があるので「接続する」をクリックして案内に従って接続します。
これで下記リポジトリにアクセスできると思います。
下記コマンドでCloneします。
$ git clone https://github.com/NvPhysX/UnrealEngine
$ cd UnrealEngine/
$ git checkout IsaacSim_1.2
IsaacSimProject_1.2_Core.gitdeps.xmlを下記リンクからダウンロードしたものに置き換えます。
$ 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.json
とcarter_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のモデルを作成し、シミュレータ上に表示します。