ROS2とIsaacSIMの連携でハマらないように1

#目次
[1.準備](#1-準備)
[2.Omniverse開始前作業](#2-omniverse開始前作業)
[3.IsaacSIM実行](#3-isaacsim実行)
[4.チュートリアル1を進める](#4-チュートリアル1を進める)
[5.おわりに](#5-おわりに)

# 1. 準備
***
## 事前準備
* ROS/ROS2のインストール
    * 最後に使用するIsaacSIMの(Nvidia Omniverse環境が ROS2 Foxy連携でチュートリアルを作っていますので、そちらに従います。
    * ROSですが、こちらはROS2のみで環境をつくるとcatkin_pkgがないと怒られたので、環境だけ構築しています（noetic)

* 参照記事（
    * ROS @porizou1　さん、ありがとうございました。
    
https://qiita.com/porizou1/items/7c2c4b33126cfad05944



　　* ROS2 @Yuya-Shimizu　さんの記事が無かったらIsaacSIM連携に思い至りませんでした

https://qiita.com/Yuya-Shimizu/items/76d3e70d23d599be91ae

　　* Omniverseのダウンロードページ（個人なので無料版で・・・）

https://www.nvidia.com/ja-jp/omniverse/download/

　　* OmniverseにIsaac SIMを実行するにあたって必要な環境づくり（hardbakeさんの記事を参考にしました）

https://zenn.dev/hardbake/articles/237b5ec729f816



* 当方の環境
　　*  Ryzen5 5600G
　　* メモリ32GB・・・最低限の容量です
　　* SSD 1TB・・・Omniverseの資料領域が大きい
　　* RTX3090
　　* 上記が普通に動く電源やマザー、冷却は空冷です。

:::note info
インフォメーション
チュートリアルではサラッと流してすすめていますが、所々ハマったのでそれを社内資料的な感じで載せていますので、技術レベルが低い点はご了承ください。

:::



# 2. Omniverse開始前作業

* ROS環境のコメントアウト(bashrc)
    * bashrcにnoetic関係のパス等があればコメントアウトします
```
#例
#source /opt/ros/noetic/setup.bash

```

* ROS2環境のコメントアウト(bashrc)
    * ROS2ではTurtlebot3を動かす事が無事にできましたが、こちらもいくつかエラーの原因となるのでコメントアウトしておきます。

```
#例
#export TURTLEBOT3_MODEL=burger
#alias nb='nano ~/.bashrc'
#alias sb='source ~/.bashrc'
#alias gs='git status'
#alias gp='git pull'
#alias cw='cd ~/colcon_ws'
#alias cs='cd ~/colcon_ws/src'
#alias cb='cd ~/colcon_ws && colcon build --symlink-install && source ~/.bashrc'
source /opt/ros/foxy/setup.bash
source ~/colcon_ws/install/local_setup.bash

```

:::note info
Isaac SIMで実行時の注意
チュートリアルを進めると分かるのですが、ソースが重複していると怒られてしまいます。
![Screenshot from 2022-07-04 10-43-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/f276a2b1-3ca3-6cfe-7c62-5a3edf327e54.png)

:::

* Omniverseインストール
    * ダウンロードファイルomniverse-launcher-linux.AppImageを実行できる様にターミナルで変更しておきます

```
chmod +x omniverse-launcher-linux.AppImage

```

https://docs.omniverse.nvidia.com/prod_install-guide/prod_launcher/installing_launcher.html#launcher-setup


* アイコンダブルクリック
    * インストール画面が始まりますので、流れにそってインストールします。
    * Install cacheのところは基本出来には作って進めておくといいです。

:::note info
Omniverse画面が起動した後のNucleus画面でhardbakeさん記事通りに[IsaacをMount](https://zenn.dev/hardbake/articles/237b5ec729f816)します
:::

* Omniverseメニュー
    * Isaac SIMを実行します。
    * 雑ですいませんが公式のドキュメントで問題なく起動できるかと思います。

https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/install_basic.html


# 3. IsaacSIM実行(ROS2)
* 2章でも書いていますが、ネイティブ?のROSの設定がIsaac SIMにとって邪魔になる記述もあるので、最低限にとどめておきます。
    * 後々慣れてきて別のワークスペースを作成する場合、それはbashrcに追加します。

1. ROSからROS2bridgeへの変更(必須)
* Isaac SIM画面のメニュー：Window＞Extensionsを選択
    * 画面左上の検索窓に"ros"を入力するとROS BRIDGEとROS2 BRIDGEがでてきます。　
    * ROS BRIDGEを無効化してROS2 BRIDGEを有効にしてウィンドウを閉じます

![Screenshot from 2022-07-12 11-05-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/8442a129-0be5-9760-4e9e-f675badd303a.png)
 

:::note warn
注意
この設定を忘れると後の作業に支障が生じるので注意してください
:::


# 4. チュートリアル1を進める
* 基本的にこちらに従っていきます

https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/tutorial_ros2_turtlebot.html

* 概要を記載すると
1. 目的
    * 1の準備でインストールしたturtlebot3を活用する
    * シーン（シミュレーション）する場所はIsaac SIMのものを使用

* URDFデータのインポート
   * チュートリアルの通りにインポートするとムービーの通りでません。
   * Urdfファイルの中はXMLなのですが、サイズが0.001で、部屋のサイズとあっていない様です。
   * このため、取り込んだ後にScaleのX,Y,Zを100にしています。

:::note info
インフォメーション
公式では自分で調整してくれみたいな文言も見られます(Import Options)

https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/ext_omni_isaac_urdf.html#isaac-sim-urdf-importer

:::
* 当方は工数の関係上Turtlebot3を100倍にすることで対処しました。


2. ロボットが動くようにする
    * Action Graphでブロック感覚？でロボットのアクションをビジュアル的に構築
    * 最終的にはターミナルを叩きますが、チュートリアルを進めている分にはソースの変更はなくても大丈夫
    * Action Graphに登録したグラフにパラメータを入力

:::note info
関連付けを実際に合わせる(ハマリどころ)
チュートリアルではシレっとturtlebot3_burgerを”turtle”としている場合がありますが、どちらかにあわせないとうごかなかったりします。

![メニュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/31e43912-0f05-d889-b6ad-a36acd8fdc0e.png)

:::
     
3. チュートリアル「1.4.3. Verify ROS connections」について
    * ターミナルを確認用、動作用、操作用の3つ開きます（確認用は必ずしも独立でなくてもよいです）
     

```
#terminal 1
ros2 topic list

#次の値が返ってくること
/rosout  
/parameter_events

#terminal 2
#Isaac SIM画面でスタートボタンを押した後に実行 

ros2 topic pub /cmd_vel geometry_msgs/Twist '{linear:  {x: 0.2, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'


#terminal 3
ros2 run teleop_twist_keyboard teleop_twist_keyboard

```
## 久々に利用するとGPUが読み込まれない(2023年5月追記）


:::note info
インフォメーション
- Omniverse起動時にGPUが読み込まれていないエラーが出てくる場合があります。
- そのような場合、ドライバの有無を確認して必要に応じて再インストールしてください。

```Ubuntu:terminal
nvidia-smi
```

:::



# 5. おわりに
* これでTurtlebot3_Burgerがキーボードで操作できる様になりました。
    * スケールの変更があるのでちょっとぎこちないところはありますが・・・      
* 記事が長くなるのでその２に続きます