Gazebo simulation with ROS2 humble
今日はROSのお話。
前回Ubuntu22.04 LTS + ROS2 humbleは入れたので、まずはTurtleSimやPublisher & Subscriber(クライアントとサーバーみたいなもん。信号を送信して受信側で受信して表示させるだけのプログラム)などをちまちまと動かしてみた。
下図はTurtleSimのイメージ図。ROS2はROS1と違い、ros coreとか言うのを立ち上げなくて良いので、TurtleSimとTeleOpeというTurtleSimをキーボードで操作するNode(それぞれの役割をもったROSプログラムの1単位のこと)を実行してやればOK。後はキーボードで操作すると画面上の亀が動く。
「おぉー、これでおれもROSプログラマーだぜ」という事でその日は終了。多分、ROS初心者はほぼ全員これやってるんじゃないかな?
詳しい方法は割愛。メモ程度にコマンドだけ残しておく。
んで、次はシミュレーションやってみたいと言う事でGazeboに挑戦。
Turtlebot3とかでやるのも良いんだけど、あちらはちょっと事前準備だのコードの中身があまりにブラックボックスだの…で若干不親切な気がしたのでとりあえず後回し。(また後でやるかも?)
今回は下記のサイトを参考にGazeboシミュレーション実施してみた。
中身もちょっとは理解しながら進めたい人はこちらのほうが良いんじゃないかな?(見た目重視でなんか動かしたいならTurtlebot3の方が良い)
Gazebo を使い始めるには?— Gazebo のハーモニック ドキュメンテーション (gazebosim.org)
ここでGazebo Harmonicのインストール(gz simコマンド使うため)とチュートリアルを実施。チュートリアルはとりあえず、"ロボットの移動"のトコまで実施すればSDFの書き方(モデル、ワールド、プラグインの設定)やロボットのTeleOpe移動くらいは分かる感じ。内容の詳細は分かんなくても、なんとなくこの中でこんな事してんだなーくらいは掴めるはず。現状はそれでOKだと思う。(あんま潔癖にやろうとすると全然進まないと思うので)
そこまで終わったら、”SDFの世界”の部分も一応目を通す。
"センサー"の部分も時間あればやっても良いかも。でも、こちらはURDFでやりたいので私はやらずに次に進んだ。
お次はURDF+Gazeboのシミュレーション。SDF使うとGazebo単体でのシミュレーションになる。それはそれで良いトコもあるのだが、Gazebo内で閉じているため、ROS+GazeboやるならURDF+Gazeboに慣れておく事も必要らしい(と、私は師匠から教わった)。
こちらは、下記のURLから実施していく。
↓ メインはこっち。
ロボティクスグループ - 移動ロボットのモデル (google.com)
↓ Navigationパッケージの公式ページ?補足にどうぞ。
URDF のセットアップ — Nav2 1.0.0 ドキュメント
URDFはxacroという書き方?で書くのが主流らしく、まずそれらのパッケージをインストールする。
その後、ros2 pkg create…というコマンドでROS2用の実行プログラムパッケージのひな型を自動生成し、URDFを作成していく。
次に、自動生成されているpackage.xml、CmakeLists.txtファイルを編集したり、launch用のファイルやrvizファイルを生成したりする。(ここら辺は頭の中???だったが無心で打つ。考えるな、感じろ!)
ここで注意点。rvizファイルだがサイト通りにやるとrvizフォルダの1つ上にファイルができてしまい、最初のrviz(モデルを表示させるプログラム)の表示でエラーが出てしまう。そこまで目に見えた成果がない分、ここのエラーは”うっ”と来てしまった。(全体見直してもどこが悪いか分かんないし、修正しようもなかった…)
最終的には、Navigationパッケージの公式ページと見比べて気付いた。
分かってしまえば単純なんだが、危うく詰まりそうになったのでメモとしてきちんと残しておく。
ここまでやるとrviz上で三輪車(二輪車?)が表示されて一息つける。
その後は物理パラメータの設定などガリガリと書いていく。
そうすると、Gazeboモデルが表示された。私が問題なくいけたのでみんなも問題なくいけると思う。
下図が「GazeboでURDFモデルが表示されたぜー!」の図。
外力は与えていないが、左右の車輪の力が完全に釣り合っていないようで、しばらく待つと微小に後退していく。
一応シミュレーションできているようだ。
と、今回はここまで。
次回はセンサーとかNavigationとかの部分をやっていきたい。
その後、こいつにもTeleOpe繋げて動かせれば良いのだけど、表示だけのRvizと違ってGazeboはシミュレーションしているので厳しいかも?(少なくともリアルタイムでは動かないと思われる)
まぁ、いいや。
疲れたので終わります。また次回。