Isaac Sim ってどうなの？

# はじめに
この記事ではIsaac SimやOmniverseを導入したいと考えている人に向けてIsaac Simで出来ることや要求される環境について解説していきます。

注意：Isaac Simの使い方やインストール方法はこの記事では解説していません。

# そもそも Isaac Sim とは?
NVIDIAが開発しているロボットシュミレーション向けの**Omniverse App**(ここ重要)です。RTXを利用したフォトリアルなグラフィックスやROS2への対応など様々な特徴があります。

:::note warn
IsaacSim以外にもIsaacROSやIsaacSDKがありますが全て別物です。
:::

# 検証環境
- インストール実行環境
CPUはHyper Threadingや省電力系の機能を無効化し、クロックは3.2GHzに固定しています。

| unit | specification |
|:-----------:|:------------:|
| CPU       | i9 7980XE        |
| GPU       | RTX3090     |
| RAM       | 128GB        |
| SSD | WD BLACK SN750 |
| OS         | Ubuntu 22.04 |

- NVIDIA Driver バージョン
    - 535
- Isaac Sim バージョン 
    - 2022.2.1
- ROS2 バージョン
    - ROS 2 Humble




# Isaac Simで利用できる機能
### 各種センサのシュミレート
- IMU
- LIDAR
- 接地センサ
    - 4足ロボットなどに使うような足裏センサ
- 超音波センサ
### ROS2
ROS2メッセージをpub/subすることができます。コードを書いて実装することはなくOmniGraphというVisual Scripting Toolを利用する形になります。Pythonで書くisaac sim launchファイルのようなもので指定することもできます。

**デフォルトで用意されているPublish可能なメッセージ**
この他にも多数あります。
- Point Cloud
- Laser Scan
- IMU
- Image

**Subscribe可能なメッセージ**
この他にも多数あります。
- Joint State
- Twist

### Replicator
機械学習に必要なデータセットを生成できます。実際にNVIDIAが出しているAIモデルにはReplicatorを使って生成されたデータを使って学習したモデルがあります。
- Depth Map
- SemanticSegmentation用のマスク画像
- 3D Bounding Box
- 2D Bounding Box
- RGB画像

### Profiler
アクチュエータの動きなどを記録し再生することができます。イメージはRosbag。

### Isaac Assets
高品質なロボットモデルが利用できます。この他にもOmniverse側のAssetsも利用できます。

![Screenshot from 2022-12-10 21-54-35.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/899689/bc713e3f-ff6a-b2d0-4d24-74ea6dd7f3ff.jpeg)
- Unitree Go1 (４歩行ロボット)
- Franka (ロボットアーム)
- O3Dyn (４輪メカナムロボット)
- Transporter (４輪台車ロボット)
- Kaya (小型3輪オムニロボット)
- Carter V2 (２輪ロボット)


### Isaac Example
![demo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/899689/4cf6bd06-7f17-5133-45b0-7529e5dffd87.jpeg)
IsaacSimの機能を試せるDemoが用意されています。(画像Leonardo Demo)
- Import Robots (URDFを読み込む)
- Sensors (各種センサーを試せる)
- Input Devices (Gamepatやキーボードからの入力を試せる)
- Manipulation (経路計画や動作計画(IsaacSDK関連のDemo))
- Multi-Robot
- ROS
- Quadruped (４足歩行ロボット(A1)の動作サンプル)

### 各種ファイルのインポート
読み込めるファイル形式
- USD
- URDF

# 要求されるPC性能

### RTX3090 Power limit = 350W & RTX-Real-Time
 **Leonardo Demo**
ロボットアームのシュミレーション。環境に対する負荷は平均的。

| Viewport解像度    | フレームレート(FPS) | VRAM使用量(GiB) | RAM使用量(GiB) |
|:-----------:|:------------:|:------------:|:------------:|
| 1280x720    | 82 | 3.8 | 23.2 |
| 1920x1080   | 73 | 4 | 23.4 |
| 3840x2160   | 26  | 5.7 | 23.7 |

 **BrownstoneDemopark**
3Dオブジェクトが大量にあるシーン。
| Viewport解像度    | フレームレート(FPS) | VRAM使用量(GiB) | RAM使用量(GiB) |
|:-----------:|:------------:|:------------:|:------------:|
| 1280x720    | 53 | 8.8 | 23.3 |
| 1920x1080   | 30 | 9.2 | 23.4 |
| 3840x2160   | 9 | 12.1 | 31.9 |

**Quadruped Example**
A1の動作サンプル。物理演算が多いシーン。

| Viewport解像度    | フレームレート(FPS) | VRAM使用量(GiB) | RAM使用量(GiB) |
|:-----------:|:------------:|:------------:|:------------:|
| 1280x720    | 13 | 3.8 | 23.2 |
| 1920x1080   | 13 | 4 | 23.3  |
| 3840x2160   | 13 | 5.6 | 23.8  |

**考察**
- 全体的に4K解像度にすると一気にパフォーマンスが低下します。
- Leonardo DemoはView Portの解像度を192x1080程度にすれば、ほとんどの環境で動作することがわかりました。
- Quadruped Exampleでは、4脚の制御がボトルネックになっていると考えられます。

# シーンの読み込み時間
Omniverse関連は読み込み時間が長いのでフリーズしたかと不安になる。だがNVIDIAを信じてゆっくり待とう。

| 読み込んだもの | 読み込み時間(s) |
|:-----------:|:------------:|
| Leonardo Demo | 11.7 |
| UR10 Palletizing | 30.4 |
| ROS/Office Scene | 114.6|
| BrownstoneDemopark_Night | 66.13 |

# まとめ
**IsaacSimとは**
NVIDIAが推進するOmniverseを用いて構築されたロボットシミュレーションアプリです。NVIDIAによると、"Omniverseを使用すれば、多彩な機能を活用できます"とのこと。

**IsaacSimの対象者は？**
主にロボット研究を行っている人々が対象なのかなと思います。VRAMの使用量が増加するとフレームレートが下がる傾向があり、大規模なシーンでの使用は現実的とは言えません(この傾向がOVXなどのサーバーでは変わると思います)。しかし、**ロボットと機械学習を組み合わせた研究**や、制御理論を現実に適用する研究を行っている人々にとっては、大変有効なツールとなります。また、**機械学習のデータを生成したい方**にもおすすめです。

**企業はどうすべきか？**
企業には、リソースがあるならば**OmniverseAppを一から構築する**ことも視野に入れた方がいいと思いますがIsaac Simをそのまま使うor拡張するでもありだと思います。個人的にはUnityやUEよりも、シミュレータとしての相性は良いと思います（UnityやUEはゲーム向けの機能が多すぎるため）。

**必要なPC性能**
- VRAMが8GB以上あれば、初めて使う人でも問題ないでしょう。フレームレート制限やAsyncシミュレーションのオプションを使用すれば、VRAMが少ない環境やGPU性能が低い環境でも利用可能です。
- 自動運転や大規模な施設等をシミュレーションする場合は、[**NVIDIA OVX Server**](https://www.nvidia.com/en-us/omniverse/platform/ovx/)や**NVIDIA RTX A6000**の導入を検討すべきです（旧Tesla系GPU環境のDGX Stationでは動作しません）。
- 物理演算が非常に多い、四足歩行ロボットのシミュレーションなどでは、CPUのパワーが不足する可能性があるため、高価なGPUは必要ありません。クロック周波数の高いCPUを選択するとより良い結果が得られます。
- 補足として、筆者の環境では、RTX3090とRTX3060 Max-Qの両方で動作確認を行っています。