Windows で ROS2 のシミュレーションを行う (6)
TurtleBot3 でナビゲーションを行う

前ページで作成した地図を用いて、TurtleBot3 のナビゲーションを行ってみよう。
シミュレータ上で指定した位置に TurtleBot3 が自動で移動するようになる。

TurtleBot3 のナビゲーション

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

次に、ターミナルで新しいタブを開き、ナビゲーションを行うための以下のコマンドを実行する。
ホームディレクトリ ($HOME) 上の地図 (map.yaml) が読み込まれていることに注意。
もちろん、前ページで作成されたものである。
 ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=$HOME/map.yaml
すると、RViz 上に白い地図と、TurtleBot3 の初期位置を表す赤と緑(と青)の座標軸が表示される。



なお、白い地図が現われない場合、Turtlebot3 のパラメータに修正が必要な場合がある。
ターミナルで以下の 3 つのコマンドを一つ一つ順番に実行してからもう一度試してみよう。
 cd 

 wget http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/ROS2/tb3_nav2_param.diff

 cd /opt/ros/humble/share/turtlebot3_navigation2/param

 sudo patch -p1  -i ~/tb3_nav2_param.diff 
最後のコマンドではパスワードを要求されるので入力すること。終了したらそのタブは閉じて構わない。

なお、上の画像はマウスで表示位置や角度を変更している。前ページと同様、以下の操作を用いている。 ここまでを確認したら、次は地図内の TurtleBot3 の正しい位置をマウスで指定しよう。下図のように 「2D Pose Estimate」ボタンをクリックし、
その後 TurtleBot3 の正しい自己位置を することで指定する。このシミュレータの場合、赤と緑(と青)の座標軸の赤い線に沿って指定すれば良いだろう。



下図のような表示に変わる。地図上に薄い色で表示されているものを Global Costmap、
TurtleBot3 の周囲に濃い色で表示されているものを Local Costmap という。
Costmap とは、その場所を TurtleBot3 が通れるどうか、そこが障害物かどうかを数値で表現したものである。



いま、TurtleBot3 の初期位置を手動で設定したので、Global Costmap と Local Costmap は微妙にずれていることがわかる。
例えば、9 本の柱に着目すれば、 Global Costmap の黒で表現された柱と、Local Costmap のピンクで表現された柱がずれている。

ここで、ターミナルの新しいタブでキー操作用のノードを起動し、TurtleBot3 を少し操作すると、これらは徐々に一致していく。
試してみよう。ターミナルの新しいタブで以下のコマンドを実行する。
 ros2 run teleop_twist_keyboard teleop_twist_keyboard
下図は、TurtleBot3 その場で二回転させた様子である。
TurtleBot3 の自己位置が正しく認識され、Global Costmap と Local Costmap が自動的に揃ったことがわかる。
キー操作用のプログラムを実行したターミナルにフォーカスが合っていることにも注意すること。

なお、自己位置が正しく認識されるに伴い、Amcl Particle という緑色の細かな矢印の存在範囲がより密集してきていることもわかるだろう。
これは、TurtleBot3 が存在する確率が高い領域を表現している。



さて、以上の状態になったら、まず、k キーを押して TurtleBot3 の動きを止める。
そして、キー操作を受け付けるノードを起動したタブで Ctrl-c を実行し、キー操作を終了しよう

そして、次図のように「Navigation2 Goal」ボタンを押し、 マウスのドラッグにより、TurtleBot3 の目標到達地点を設定しよう。
矢印は、最後に TurtleBot3 が向くべき方向を表す。



うまくいけば、下図のように動作の計画が立てられ、TurtleBot3 がそれに従って動き始める。



TurtleBot3 が目標地に到達して TurtleBot3 が静止した様子が下図である。



目標を色々な場所に設定してナビゲーションを繰り返してみよう。



なお、いつも通り、新たなタブで下記コマンドを実行してノード間の関係を表示すると下図のようになる。
 ros2 run rqt_graph rqt_graph
「Nodes only」の場合。



トピックも表示した場合。非常に規模の大きなプログラムであることがわかる。





おわりに

以上で、用意した ROS2 の演習は終了である。

この演習では25.00 GB のストレージを消費した。
削除したい場合は、まず下図のように Virtual Box マネージャーで ubuntu 22.04 を右クリックして「除去」を選択する。
そして、現れたウインドウで「すべてのファイルを削除」をクリックすること。
そうしないと 25.00 GB の領域が消えずに残ってしまう。



その後、VirtualBox を削除すれば良い。



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

トップページに戻る