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

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

TurtleBot3 のナビゲーション

これまで通り、ターミナルの一つのタブで以下のコマンドを実行し、仮想空間における TurtleBot3 のシミュレーションを開始しよう。
Gazobo のシミュレータが起動する。
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch
次に、ターミナルで新しいタブを開き、ナビゲーションを行うための以下のコマンドを実行する。
ホームディレクトリ ($HOME) 上の地図 (map.yaml) が読み込まれていることに注意。
もちろん、前ページで作成されたものである。
$ roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml
すると、RViz 上に以下のような表示が現れる。
この図には、読み込んだ地図に基づく Global Map と、LiDAR に基づく Local Map の二種類が表示されている。
黒い点で表示されているのが Global Map であり、ずれた位置に表示されているのが Local Map である。

これらは一致すべきなのだが、TurtleBot3 の自己位置が正しく認識されていないので、二つの地図がずれて表示されている。
正しい自己位置は Gazebo の画面を見るとわかるが、空間内の右下あたりである。
それに対し、下図では空間の中央にいると認識されている。



そこで、地図内の TurtleBot3 の正しい位置をマウスで指定しよう。下図のように 「2D Pose Estimation」ボタンをクリックし、
その後 TurtleBot3 の正しい自己位置を することで指定しよう。



すると、下図のように Global Map と Local Map が近付いた。
なお、以下の解説がわかりやすくなるよう、わざと Global Map と Local Map がぴったり揃わないよう指定した。
このあと自動でこの二つの Map は揃うので、無理にぴったり揃える必要はない。

もしやり直したければ「2D Pose Estimationボタンをクリック」→「マウスで指定」を繰り返そう。



ここで、ターミナルの新しいタブでキー操作用のノードを起動し、TurtleBot3 を少し操作してみよう。
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py  _speed:=1.0 _turn:=1.0
なお、ここでの数値 1.0 はシミュレーター用にかなり大きな値を設定している。
この命令を TurtleBot3 実機で行うときは、1.0 では動作が速すぎるので、0.1 や 0.2 など、まずは小さい値から試すべきである。

下図は、TurtleBot3 その場で一回転させた様子である。
TurtleBot3 の自己位置が正しく認識され、Global Map と Local Map が自動的に揃ったことがわかる。
なお、Global Map の上半分にまだら模様状に障害物があるように表示されているが、これも TurtleBot3 を動き回らせるときれいな地図になる。
ただし、シミュレータの動作が重いことと、あとでこのまだら模様状の障害物は自然に消えることがわかるので、ここではそのまま演習を続ける。

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



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

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



すると、下図のように動作の計画が立てられ、TurtleBot3 がそれにしたがって動き始める。
この時点では、上半分のまだら模様状の障害物も避けるような計画が立てられていることが分かる。
TurtleBot3 が動き始めない場合、キー入力用のノードが終了されていないことが考えられる。



TurtleBot3 が移動するに伴い、まだら模様状の障害物が存在した Global Map が更新され、きれいな地図となっていくことがわかる。
それに伴い、移動の計画も滑らかな軌道に変更されていることがわかる。



最終的に、指定した場所と向きに到達したら TurtleBot3 は停止する。



このとき、ナビゲーション用のプログラムを実行したターミナルには 以下のように「Goal reached」と表示されているだろう。
(略)
[ INFO] [1588213667.273562456, 122.804000000]: Got new plan
[ INFO] [1588213669.268169625, 123.004000000]: Got new plan
[ INFO] [1588213671.522493071, 123.204000000]: Got new plan
[ INFO] [1588213673.605021472, 123.404000000]: Got new plan
[ INFO] [1588213675.703145197, 123.604000000]: Got new plan
[ INFO] [1588213676.742028018, 123.704000000]: Goal reached
なお、いつも通り、新たなタブで下記コマンドを実行してノード間の関係を表示すると下図のようになる。
$ rosrun rqt_graph rqt_graph
「Nodes only」の場合。



トピックも表示した場合。





おわりに

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

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



その後、VirtualBox を削除すれば良い。
なお、macOS の場合、VirtualBox をインストールしたままだと OS の更新ができない、という経験をしたことがある。



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

トップページに戻る