1. はじめに
IsaacSimでLIMO(無人走行UGV)にカメラを追加してみたの記事[1]ではLIMOのロボットモデルにカメラを追加し、そのカメラで周辺環境を確認することに成功しました。今回はIsaac Sim向けLIMOモデルを公開しているgithubのリポジトリ[2]でリンクが張られている[3]のサイトの内容を参考にLidarの追加をやっていきたいと思います。
👇Lidarの追加について紹介されているサイト[3](Isaac Sim向けLIMOモデルを公開しているgithubのリポジトリでリンクが張られている)
なお、上記の[3]のサイトはROS1のみの記載となっております。本記事ではそれを参考にROS2に対応させてLidarを追加しましたので、その手順も本記事で紹介したいと思います。
2. 実行環境
- CPU: CORE i7 7th Gen
- メモリ: 32GB
- GPU: GeForce RTX 2070
- OS: Ubuntu22.04(WSL2ではなくPCに直接インストール)
- ROS2: Humble
- Nvidia Driver: 535
3. 手順
基本的には[3]で紹介されているLidar追加の手順を追ってきます。なお、Isaac SimやROS2の起動については、Ubunutu22.04の環境下においてIsaac Sim+ROS2を試そうとしてハマったところで記載してますので、この部分については本記事では飛ばします。
3.1 LIMOモデルの読み込み
まず[1]で作成したLIMOのモデルを読み込みます。カメラやROS2で動かせるようにしたAction Graphなどの設定はそのまま維持しています。以下が、モデルを読み込んだ際の様子です。
3.2 PhysX Lidarの追加
以下の図のCreate(赤枠)> Isaac(黄枠)> Sensors(青枠)> PhysX Lidar(緑枠)> Rotating(ピンク枠)をクリックします。
そうすると以下の図の赤枠で囲んだところのように"Lidar"が追加されます。
次に"limo_xacro"をクリックした際に表示される"base_link"(図の赤枠部分、ちょっと隠れています)のところを右クリックすると以下の図で黄枠で囲んだウィンドウが出ますので、そこで"Create"(図の緑枠部分)をクリックします。そうするとまた別のウィンドウが出てきますので、そのウィンドウにある"Xform"(図の青枠部分)をクリックします。
"Xform"を押して追加されたオブジェクトの名前を"base_scan"という名前にして、先ほど追加したLidarをその直下に移動させます(図の赤枠部分)。操作はドラッグアンドドロップでできます。
3.3 PhysX Lidarの追加の調整と確認
先ほど追加したLidarを選択すると以下の図に示す"Property"という画面が出てきますので、[3]のサイトの設定を参考に"drawLines"にチェックを入れます(図の赤枠部分)。これでシミュレーションを開始するとLidarから出るレーザーが可視化されます。そして黄枠で囲んだ"maxRange"を[3]のサイトの設定値と同じ"25.0"に設定します。
次にLimoの両側に設置している壁にcolliderを設定します。これを設定しないとLidarのレーザーが通り抜けてしまって障害物として検知されません。まず下図で赤枠で囲んだ壁をクリックして選択した後に、"Property"の画面で+Add(黄枠)> Physics(緑枠) > Collider(青枠)を選択します。
そして、 Colliderを選択した後に下図で赤枠で囲んだ"Collision Enabled"にチェックをいれてColliderを有効にします。
ここでIsaac Simの▶ボタンを押してシミュレーションを開始すると以下の図のようにLidarの見えるようになり、障害物に当たっているところは赤く表示されるようになります。
動画にすると以下のようになります。
3.4 Action Graphの構築
まず[1]で構築したAction Graphを読み込みます。そして、[3]の記事を参考にAction Graphにオブジェクトを追加して以下のように構築しました。
[3]との違いは"ROS1 Publish Laser Scan"を"ROS2 Publish Laser Scan"としているとこです。
次に"Isaac Read Lidar Beams Node"(図の赤枠部分)をクリックします。その後、Inputセクションにある"Add Target"(図の黄枠部分)をクリックします。続いて、"base_scan"直下にあるLidar(図の緑枠部分)を選択します。最後に、青枠で示されているSelectボタンを押します。
次に"ROS2 Publish Laser Scan"(図の赤枠部分)をクリックします。そして"inputs:frameId"を"map"(図の青枠部分、ただこの設定は必須ではありません)、"inputs:topicName"を"/laser_scan"(図の黄枠部分、この設定は必須です)とします。
4. シミュレーション結果
Isaac Simの▶ボタンを押してシミュレーションを開始した後に、以下のコマンドでrviz2を立ち上げます。
source /opt/ros/humble/setup.bash
rviz2
そしてrviz2の以下の画面で"Add"(図の赤枠部分)>"By topic"(図の黄枠部分)>"LaserScan"(図の緑枠部分)を選択して"OK"をクリックします。
そうすると以下の図のようにLidarからの情報が赤い点で示されますが、
非常に小さくて見えずらいため、以下の図で赤枠で囲んだ"Size (m)"を"0.1"とすると以下の図のようになり、ある程度は見えやすくなります。
そしてシミュレーションした結果が以下です。LIMOに以下の前進のコマンドを送信して動かしつつLidarの情報を取得することもしています。
source /opt/ros/humble/setup.bash
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}}'
5. まとめ
[3]の手順を参考に、私の環境でもLIMOのロボットモデルにLidarを追加し、そのLidarで周辺環境を確認することができました。この件は今後、Lidarを用いた2D SLAMにつなげていきたいと思います。
参考記事やサイト
[1]IsaacSimでLIMO(無人走行UGV)にカメラを追加してみた
[2]agilexrobotics/Limo-Isaac-Sim
[3]PhysX Lidar Sensors