何も新しいことはありませんが、とりあえずやってみたら結構「おおっ」って感じだったのでメモしておきます。
Gazeboはオープンソースの物理シミュレータ、TurtleBot3は実際に販売されている教育用ロボットですが、シミュレータモデルが提供されています。ROS1ではお馴染みでしたが、ROS2にもすでにちゃんと移植されているようでした。
ROS2 galacticがセットアップされていることを前提にしています。
必要なパッケージをインストールする
sudo apt update
# GazeboとROS2コネクタ
sudo apt install ros-galactic-gazebo-ros
# TurtleBot3のシミュレータモデルとキーボード操作パッケージ
sudo apt install ros-galactic-turtlebot3-gazebo ros-galactic-turtlebot3-teleop
「世界」を起動する
以下でシミュレータとその中の環境、シミュレータモデルが起動されます。
TurtleBot3にはいくつかのモデルがあるようで、環境変数でそれを指定しなければいけないようでした。
TURTLEBOT3_MODEL=burger ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
キーボード操作してみる
別な端末でキーボード操作ノードを起動します。
TURTLEBOT3_MODEL=burger ros2 run turtlebot3_teleop teleop_keyboard
waxdキーを十字ボタンのように使い、sかスペースで停止という操作みたいです。昔のゲームっぽいですかね。
これだけでGazebo中のロボットを操作できるはずです。
せっかくなのでRviz2で点群を表示してみる
Rviz2を起動します。
rviz2
左下のAddを押します。
By topicから /scanトピックを選びます。これがGazeboの仮想LiDARから配信されているレーザースキャンのTopicです。
これでLaserScanのTopicが追加されます。
しかし、まだ表示されません。左の表示設定「Displays」からいくつか設定が必要です。
まず、基準座標系であるGlobal Options – Fixed Frameをbase_linkに設定します。詳しい説明は省きますが、これはロボットに固定された座標軸です。
次にLaserScan – Topic – Reliability PolicyをBest Effortに設定します。これはROS2からの概念で、送受信側で通信の品質(QoS)に関するポリシーがあっていないと通信できないようになっています。LiDARなどのセンサは1フレームごとのデータを確実に送り届けるよりは、多少の欠落を許しても最新のものを早く送り届けるほうが重要なので、BestEffortというポリシーが採用されています。Rviz2の表示側でもこれに合わせる必要があります。
あとは表示の見え方であるStyleをPointsにしてSizeなどを適当に設定すれば、以下のように点群が見えると思います。
ただ、GazeboとRviz両方を動作させると、低スペックのPCでは多少きついかもしれません。私はちょうど最近手に入れたMac Pro (2009)を使っていますが、古いわりにコアが12もあるのでなんとかなってるかもしれません。
さて、何に使うか
さて、これを何に活かすかですが、ここまでだけで2DのSLAMや自己位置推定などのプログラム開発などの実験ができるようになりました。
ROS上ではシミュレータは本物のロボットとその上に取り付けられたLiDARセンサと同じように振る舞うため、これら実験機材と広い実験スペースが手に入ったようなものです。高価なセンサやロボットが買えなかったり、一人暮らしの狭い部屋であってもロボ開発の学習ができるようになりました。
私も入門書を見ながらトライしてみたいと思います。