Windows で ROS2 のシミュレーションを行う (5)
TurtleBot3 で地図を作成する

ここからは、TurtleBot3 で部屋の地図を描くシミュレーションを行う。

TurtleBot3 には 360 Laser Distance Sensor LDS-01 という LiDAR が搭載されている。
LiDAR は測域センサーやレーザースキャナーなどとも呼ばれ、レーザーを照射してセンサ周囲の物体までの距離を測定するセンサーである。
LiDAR の出力とロボットのオドメトリ (タイヤの回転角度に基づく位置推定) をもとに地図作成を行う演習を解説する。

ここで行われる位置推定と地図作成を同時に行う技術を SLAM (Simultaneous Localization and Mapping) という。

本ページの内容は以下の通りである。

TurtleBot3 での地図作成

仮想空間内の TurtleBot3 を用いて、地図作成の演習を行おう。

ターミナルの一つ目のタブで以下のコマンドを実行し、仮想空間上の TurtleBot3 のシミュレーションを開始しよう。
 ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
これまでと同じく Gazebo によるシミュレーション画面が現れる。
なお、Gazebo の画面が現われない場合、「ROS2 のセットアップ」で行った「source /usr/share/gazebo/setup.bash を ~/.bashrc に取り込む」という作業を行っていないのかもしれない。確かめてみよう。
なお、検索すると「GAZEBO_MODEL_PATH の設定が必要」というアドバイスが見付かるが、2024年5月現在 GAZEBO_MODEL_PATH の設定は不要だった。

次に、ターミナルの二つ目のタブで地図作成を行う以下のコマンドを実行しよう。
 ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
表示されているのは、ロボットが認識している仮想空間の様子である。
赤色の点は TurtleBot3 上の LiDAR が得た周囲の物体までの距離をもとにプロットされた点である。



ただし、このままの表示では Gazebo との対応がわかりにくい。
下図のように、Gazebo の向きと合わせるのが良いだろう。 以下の二つの操作で行える。


なお、LiDAR の出力である赤い点の他に、緑色の点も存在する。
緑色の点は、Cartographer という SLAM 用のライブラリが出力しているデータ (scan_matched_points2) で、
書きかけの地図上で、LiDAR の出力にマッチする位置を出力していると思われる。
そのため、緑色と赤色の点が重なっている状態が正常である。

ただし、デフォルトの設定では、緑色の点は小さくて見にくいように思われる。
下図のように Cartgrapher → scan_matched_point2→Size を 0.01 から 0.02 に変更することで、
緑色の点がわかりやすくなる。



ここで、ターミナルの新しいタブでキー操作用のノードを実行しよう。i/</j/l で上下左右、q/z で速度の増減なのだった。
 ros2 run teleop_twist_keyboard teleop_twist_keyboard
そして、これまで体験してきたように TurtleBot3 をこの空間内で操作してみよう。

Turtlebot3 を空間内で移動させると、下図のように地図が完成していく。
下図のように、teleop_twist_keyboard を実行したタブにフォーカスがあっていないと操作できないので注意すること。



ところで、Turtlebot3 を空間内で移動させていると、赤色の LiDAR の出力した点と緑色の地図上の点がずれたり、
地図上でロボットが進んだり戻ったりしているように見えることがある。これらについて簡単に解説しておく。

赤色の点と緑色の点が一致していないということは、地図上で推定されたロボットの自己位置が正しくないということを意味する。
それを補正し、正しい自己位置を推定するわけであるが、その際、画面上ではロボットが進行方向に対して戻ったように見える、ということである。

すなわち、実際には Turtlebot3 は一定の速さで進んでいるのであるが、画面上では地図が固定されているので、
Turtlebot3 が戻ったように見える、ということである。

ちなみに、このように赤色の点と緑色の点が時おり大きくずれるのは、Turtlebot3 の操作速度 (直進 0.5、回転 1.0 ) が大きすぎるためである。
直進速度を 0.2 程度に落すと、赤色の点と緑色の点がずれる頻度は小さくなるだろう。

どのような速度で TurtleBot3 を動かすにせよ、ある程度地図が描けたと思ったら、ターミナルの新しいタブで以下のコマンドを実行しよう。
 ros2 run nav2_map_server map_saver_cli -f ~/map
このコマンドにより、ユーザのホームディレクトリに二つのファイル map.pgm と map.yaml が保存される。
ファイルマネージャ (左上から3つめのアイコン、またはデスクトップのユーザー名のアイコン) から map.pgm をダブルクリックして表示してみると下図のようになり、
確かに地図が保存されていることがわかる。



これまで通り、ノード間の関係を下記コマンドで表示することができる。
 ros2 run rqt_graph rqt_graph
「Nodes only」に設定して再読み込みボタンを押した場合はこちら。なお、何度か試行しないと全てのノードが表示されないことがあった。



「Nodes/Topics (all)」に設定してトピックも表示させた場合はこちら。LiDAR による計測結果が /scan であり、オドメトリ /odom から推定された自己位置の座標が /tf に含まれている。
こららを統合して地図 /map が作らる。



以上が終ったら、全てのタブで Ctrl-c を実行し、全てのプログラムを終了しよう。



前のページ「Windows で ROS2 のシミュレーションを行う (4) TurtleBot3 をプログラムで制御する」/
次のページ「Windows で ROS2 のシミュレーションを行う (6) TurtleBot3 でナビゲーションを行う

トップページに戻る