Windows11環境下においてIsaac Sim+ROS2を試してみる　ロボット回転編

# 1. はじめに
　先日、[Windows11にROS2をインストールしてみた](https://qiita.com/bebebefu/items/8c2c82d095f47b24088b)の記事にてWindows11へのROS2のインストールに成功しました。ただ、あれだけですと本当にロボットを動かせるのか?という不安に駆られ、何かロボットを動かすデモでもしてみたいと思っていました。
 　普通にgazeboを使ってシミュレーションするのもよいのですが、何か他のことをしたいなと思って調べていたところ[[1]](#参考記事やサイト)、[[2]](#参考記事やサイト)という記事からIsaac SimというのがありWindowsにも対応しているということでやってみよう!!と試行したのが本記事の内容になります。

# 2. 実行環境
- CPU: CORE i7 7th Gen
- メモリ: 32GB
- GPU: GeForce RTX 2070
- OS: Window11 22H2
- ROS2: Humble

# 3.手順
手順は[[2]](#参考記事やサイト)の記事である[WindowsでROS 2を頑張って使う ~Isaac Sim+ROS 2~](https://zenn.dev/fjkei/scraps/48149a4dc96248)にほぼ沿って行いました。しかし私の環境に合わせて変えたところもありますので、どのような手順を踏んだかを紹介していきたいと思います。

# 3.1 Isaac Simのインストールの手順
## 3.1.1. Omniverseのインストール
[WindowsでROS 2を頑張って使う ~Isaac Sim+ROS 2~](https://zenn.dev/fjkei/scraps/48149a4dc96248)の記載の通り、[https://docs.omniverse.nvidia.com/](https://docs.omniverse.nvidia.com/)からインストーラをダウンロードしてインストールします。
## 3.1.2. Isaac Simのインストール
インストールしたOminiverse起動させます。そしてメニューの「更新」→「Isaac Sim」を選択してインストールをクリックすればインストールが始まりました。
なお、[WindowsでROS 2を頑張って使う ~Isaac Sim+ROS 2~](https://zenn.dev/fjkei/scraps/48149a4dc96248)では「バージョンは2022.02以降。それ以前はWindowsではROSは動かないので注意。」とありましたので、私は以下のように2023.1.1のバージョンを選択しました。
![スクリーンショット 2024-01-28 093737.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/ff5e84cf-86fc-ef32-a8ab-1966ee10137f.png)

# 3.2 Nucleus のサービスの環境構築
3.1節の手順だけでIsaac Simは使えるようなのですが、サンプルファイルを使ってデモをしたかったので[[3]](#参考記事やサイト)の記事の「3. Nucleus のサービスをローカル環境に作成する」の章を参考にNucleus のサービスをローカル環境に構築しました。以下の手順で行いましたが、ほぼ参考記事の手順のままです。

まずヘッダーの「NUCLEUS」を選択し、「ローカルNUcleusサービスを追加する」を選択します。
![スクリーンショット 2024-02-04 073456.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/285c8c42-09cf-e6a3-12e7-fae8f7a691d2.png)

そして管理者情報を入れます。
![スクリーンショット 2024-02-04 073532.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/55d7b67e-6c0f-353b-8b6c-58c9a43283a3.png)

インストール中は以下の画面が出てきます。
![スクリーンショット 2024-02-04 073825.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/596ba3a2-5d5b-b568-9f71-160b0f044f00.png)

インストールが完了するとOminiverseのタブの下にサービスが立ち上がっていることが確認できました。
![スクリーンショット 2024-02-04 073854.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/766b8357-c914-57cb-37cd-41f722a4f4ca.png)


# 3.3 ROS2_Bridgeについて
Isaac Simをスタートさせるとまず以下の画面が出てきます。
![スクリーンショット 2024-02-04 072848.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/91afa3ad-b037-1f82-9130-d82e2ef084b5.png)

ROS2 Bridgeを有効にするには、以下の図で赤枠で囲んだExtensionを選択し
![extensionROS2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/e8436d66-477f-b34b-4be3-c51159e2a97b.png)

次に以下の図の赤枠のところに「ROS2」と打って検索すると、黄枠で囲んだ「ROS2 BRIDGE」が出てきますのでスライドバーを動かすことにより有効にします。ただ、私の環境ではデフォルトで有効になっていました。
![ROS2有効.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/41ec8065-1fa2-b176-3f3e-4edd3ab3dcec.png)

## 3.4 サンプルファイルの読み込み
サンプルファイルとしては[[4]](#参考記事やサイト)と[[5]](#参考記事やサイト)の記事でも用いられているcarter_warehouse_apriltags_worker.usdを使います。
手順は以下です。

- 以下の図の赤枠のところに「omniverse://localhost/NVIDIA/Assets/Isaac/2022.2.1/Isaac/Samples/ROS2/Scenario/carter_warehouse_apriltags_worker.usd」と打ちます。(これは[[5]](#参考記事やサイト)の記事を参考にしました。)

- 以下の図の黄枠のcarter_warehouse_apriltags_worker.usdを選択します。
- 以下の図の青枠の「Open Original File」をクリックします。

![サンプルファイルの読み込み.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/f848435e-60e4-d4a5-f32c-963d961b647f.png)

そうすと以下のようにサンプルファイルが読み込まれます。
![スクリーンショット 2024-02-04 084654.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/03fd9020-3cbd-7478-f2bd-db1f59415d9f.png)

## 3.5 rostopicを投げロボットを回転させる
まずはrostopicを投げてロボットをゆっくりと回転させたときの動画をお見せします。カメラの映像はロボット視点になっています。
<iframe width="560" height="315" src="https://www.youtube.com/embed/IO86uZs7P6g?si=FcI0fsrhNP4MBFfe" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

手順としてはまず以下の図のIsaac Simの画面で赤枠で囲んだ再生ボタン（と言っていいかわかりませんけど、、）をクリックします。

![再生ボタン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/c2cec62b-4ee4-64da-5deb-46535ab2c73d.png)

そしてコマンドプロンプトを開き以下のコマンドを打ちます。（Isaac Sim内の話ではなく、普通にWindowsのスタートなどから開きます。）
```:コマンドプロンプト
call C:\dev\ros2\local_setup.bat
ros2 topic pub /cmd_vel geometry_msgs/Twist '{linear:  {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.05}}'
```

そうすると👆の動画のようにロボットがゆっくりと回転していきます。

# その他：
ros2 topic pub /cmd_vel geometry_msgs/Twist '{linear:  {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.05}}'のコマンドを打った際に、次の2つのエラーが出ましたので、その解決方法についても記載します。

- Failed to load entry point 'pub': No module named 'netifaces'
以下のコマンドを実行することで解決しました。
    ```:管理者権限のwindows powershell
    python -m pip install netifaces
    ```
    
- Failed to load entry point 'pub': No module named 'yaml'
以下のコマンドを実行することで解決しました。
    ```:管理者権限のwindows powershell
    python -m pip install pyyaml
    ```

# まとめ
上記の手順にて、Windows 11上で構築したIsaac Sim内で読み込んだロボットを、Windows 11上で構築したROS2からのrostopicで、簡単な制御を行うことに成功したと考えられます。これからは、この環境でロボットの自律走行や四足歩行ロボットの制御などを試してみたいと考えています。

# 参考サイト
[1][WindowsでROS 2を頑張って使う ~Isaac Sim+ROS 2~](https://zenn.dev/fjkei/scraps/48149a4dc96248)
[2][Isaac Sim 2022.2でROS2関連にアップデートが入った話](https://qiita.com/TakanoTaiga/items/1f35fde63088a481451e)
[3][NVIDIA Isaac Sim: インストール](https://zenn.dev/sotahi/articles/2ee0fcf7bc4e7b)
[4][Isaac SimでVisual SLAMを動かしてみる](https://zenn.dev/hardbake/articles/bd9c7757ad0415)
[5][Isaac Sim ile SLAM ve Haritalandırma](https://blog.openzeka.com/ai/isaac-sim-slam/)