1. はじめに
今までIsaac Simで色々遊んできましたが[1][2]、使用したロボットモデルはNVIDIA Carterだけでしたので、少し物足りなくなり他のロボットモデルも試したみたいなと最近考えていました。
そこで最近購入検討してましたLIMOというロボットについてIsaac Sim向けのモデルがgituhbで公開されているのを以下のリンクで見つけましたので、Isaac Simに取り込んでまずは遠隔操作してみたのが本記事の内容になります。
👇LIMOについて説明されているサイトのリンク[3]
👇Isaac Sim向けLIMOモデルを公開しているgithubのリポジトリのリンク[4]
なお、上記のIsaac Sim向けLIMOモデルを公開しているgithubのリポジトリではROS1のみの記載となっております。本記事ではそれを参考にROS2に対応させた上で遠隔操作しましたので、その手順も本記事で紹介したいと思います。
注: よくよく調べてみるとIsaac SimのロボットアセットのラインナップにLimoもありましたが(リンク)、この記事で各種設定を勉強することができたので良かったと思います。
2. 実行環境
- CPU: CORE i7 7th Gen
- メモリ: 32GB
- GPU: GeForce RTX 2070
- OS: Ubuntu22.04(WSL2ではなくPCに直接インストール)
- ROS2: Humble
- Nvidia Driver: 535
3. 手順
基本的には[4]で紹介されている内容を追ってきますが、Isaac SimやROS2の起動については、Ubunutu22.04の環境下においてIsaac Sim+ROS2を試そうとしてハマったところで記載してますので、この部分については本記事では飛ばします。
3.1 リポジトリのクローン
[4]ので紹介されているように以下のコマンドで対象のリポジトリをクローンしてきます。
git clone https://github.com/agilexrobotics/Limo-Isaac-Sim.git
そして以下のコマンドでクローンしてきたLIMOのモデルを解凍します。
cd Limo-Isaac-Sim/limo_description
unzip meshes.zip && unzip urdf.zip
3.2 Isaac SimへのURDFのインポート
[4]の3.2節から3.3節で紹介されている方法をそのまま実行しまして、特にハマったところはありませんでした。
ただ、3.3節で記載されていた「Set the Joint Drive Strength to the desired level. Note that this will be imported as the joint’s damping parameter. Joint stiffness are always set to 0 in velocity drive mode.」という部分は、私の勉強不足のためよくわかりせんでしたので、ここはデフォルトの数値のままにしました。
ちなみにデフォルトで用意されている環境のcarter_warehouse_apriltags_worker.usdの中にLIMOを読み込んでみた様子は以下です。フォークリフトとNVIDIA CarterとLIMOの大きさの違いがよく分かります。
3.3 LIMOモデルの保存
独立した節として書くほどではないのですが、LIMOモデルの保存については[4]の4章で紹介されている方法そのままで保存できます。
3.4 Ground Planeの追加
Ground Planeを追加しないとIsaac Simの▶(Playボタン)を押した瞬間にLIMOが自由落下してきます。3.3節で保存したLIMOを読み込んだのちにEnvironment Setup[5]のAdding a Ground Planeを参考にメニューバーのCreate > Physics > Ground Plane からGround Planeを追加しました。追加した後の様子が以下です。追加したGround Planeを赤枠で示しています。
3.5 Action Graphの構築 (ROS2でメッセージを受け取れるようになるための準備)
[4]ではROS1に対応させていますが、本記事ではROS2で動かせるように以下のように Action Graphを設定しました。
[4]との違いはROS1 Subscribe TwistをROS2 Subscribe Twistにしたぐらいですが、以下で設定手順や詳細設定を記載してきます。
3.5.1 Action Graphの編集画面の起動
メニューバーからWindow > Visual Scripting > Action Graph を選択します。
次に以下の図で赤枠で囲んだ"New Action Graph"を選択すると、Action Graphの編集画面が開きますので、👆で示したAction Graphを作成してきます。
3.5.2 Topicの設定
ROS2 Subscribe TwistのTopic名を/cmd_velを設定する必要がありますが、デフォルトで以下の図の赤枠で示したところのように/cmd_velと設定されていましたので、追加設定の必要はありませんでした。
3.5.3 Differential Controllerの設定
作成したAction Graphの"Differential Controller"の項目での設定は[4]の6.1節に記載の内容を踏襲し以下の設定を反映しました。
- Max Linear Speed: 0.22
- Wheel Distance: 0.16
- Wheel Radius: 0.025
3.5.4 Articulation Controllerの設定
作成したAction Graphの"Articulation Controller"の項目での設定は[4]の6.1節に記載の内容を参考に、以下の図で赤枠で囲んだ"targetPrim"のところにLIMOのモデルの"base_footprint"を読み込みました。また"Use Path"のチェックを外すところも忘れがちなのでここも注意が必要です。
3.5.5 Constant Tokenの設定
作成したAction Graphの"Constant Token"のそれぞれの項目の設定は[4]の6.1節に記載の内容を参考に、以下の図のように設定しました(赤枠で示したところ)。
3.6 ROS2 topicよりメッセージを投げてLIMOを動かす
Isaac Simの"Play"ボタン▶を押します。
そしてターミナルを新たに開き以下のコマンドを打ちます。
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}}'
そしてこのコマンドを打った時のLIMOの様子がこちらです。
ちなみに以下のコマンドを打たないとLIMOは止まりません。
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.0}}'
おまけ
以下のコマンドを打って回転させようとしたときの動画は以下です。私の設定がうまくいっていないようで、LIMOは頑張っているのですが、回転がうまくできません。
source /opt/ros/humble/setup.bash
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: 1.0}}'
4. まとめ
[4]の記事の手順を参考に、私の環境でもLIMOのロボットモデルを読み込みros2 topicを投げて動かすことができました。今後はIsaac Sim上でLIMOをROS2により自律走行させることができるのかや、四足歩行ロボットなどの他のロボットモデルを読み込んで動かすことについて取り組んでいきたいと考えています。
参考記事やサイト
[1]IsaacSimのROS2 Navigationを試してみる
[2]IsaacSimでロボット走行用の2D地図を作ってみる
[3]AgileX Robotics LIMO
[4]agilexrobotics/Limo-Isaac-Sim
[5]Environment Setup