TurtleBot3 はROBOTIS社の製品ですが2輪走行型ロボットの標準のようなものです。
TurtleBot3 e-Manual のSimulation パッケージをインストールしてシミュレーション環境を使ってみます。
このシミュレーション環境もある種標準のようなもので、自作のロボットやセンサーがどういう動きをするか見るのに絶好の環境になっています。
で、この環境で自作の空間(my_room.world)の地図を作成してみます。
(3/5)地図の作成ではgmapping slam という手法を使いましたが、ここではhector slam を使って地図を作成します。
ROS1(Melodic) の環境に 事前に以下をインストールしておきます。
gmappingなど先行ページと重複するものもありますが、気にしない。
rospkgはpip3を使ってインストールを行います。pip3がまだの場合は以下を実行。
インストール
シミュレーションパッケージをインストールします。
TurtleBot3はWaffleというモデルを使います。my_robotはだいたいこのサイズで作成しています。
各ターミナルを開くごとに必要になるので、~/.bashrc に追記しておいたらいいかもしれません。
キーボードを使ってTurtleBot3を動かしてみます
Gazeboに表示
まずはデフォルトで用意されている仮想空間を使ってみます。
turtlebot3_worldという亀の形をした変な仮想空間にTurtleBot3が置かれています。
移動にはキーボード制御用のteleoperationを使います。このtelopはBot3シミュレーション用に用意されているものです。
別ターミナルで以下を実行
ターミナルを前面に出してフォーカスした状態でキーを押せばTurtleBot3が前後左右に移動します。sキーで停止。
最初はゆっくりでしか動きませんが、何回か押下すれば速度が上がります。
何もない空間で動かす場合は以下を実行
Rvizで表示
Waffleを起動して動かしてみます。
turtlebot3_fakeパッケージを使用します。turtlebot3_fakeは、実際のロボットがなくても実行できる非常に単純なシミュレーションノードです。
赤い矢印はodometryです。TFにチェックを入れればBot3の車輪やLiDARの座標系(frame)が表示されます。
odometryを消して、TFにチェックを入れてteleoperationで動かしてみてください。
Bot3に搭載されているLiDARのレーザースキャンの様子をみてみます
レーザースキャンは届く周囲にある物体を赤い点群で表示します。
ちょっと見づらいですが、壁が赤くスキャンされています。
Gazebo 起動
visualize Simulation data(RViz)起動
teleoperationでBot3を動かしてもいいですが、 自律動作をさせてみてます。Bot3は「前進ー>接近ー>回転」の3つがループしながら部屋の中を動き回り、障害物や壁への衝突を回避します。
おまじない
起動
なお、回転角はある範囲内でランダムに取られるようです。
また途中に突然障害物が出現しても、それがスキャンされたら回避行動を行います。
かなり見辛いですが、スキャンされるものが変化しています。障害物の先にあるものはスキャンされていません。
TurtleBot3のシミュレーション環境で地図作成
gmapping slamやhector slamなどが可能です。
ここではhector slamをやってみます。
対象の空間は2/5で作成した空間。
turtlebot3_my_room.launchを作成
自作空間(my_room.world)でTurtleBot3を使います。worldファイルはmy_robotパッケージのフォルダーに入れてますので、includeは以下(8行目)のようになります。
2/5で作成した空間ですので、worldファイルは ~/catkin_ws/src/my_robot/worlds に格納されているはずです。
起動
別ターミナルで以下を実行してteleoperationを起動
前面に出して常にフォーカスして使います。
さらに別ターミナルでhector slam を実行
ちなみに、gmapping slamをやりたい場合はhector の代わりに gmapping を指定します。
teleoperationで満遍なく移動して地図を完成させます。
完成した地図を保存
2つのファイルが作成されます。
my_room_hector_map.pgm
my_room_hector_map.yaml
地図に汚れがある場合
こんなふうに、余計な線のような汚れがあると障害物と誤認されることがあります。
地図のpgm画像から、GIMPなどで消去してしまいましょう。
TurtleBot3でナビゲーション
TurtlBot3 をどの仮想空間で使うのか決めます。
上記で作成した独自空間(my_room.world)用のlaunchを使ってみます。
どの地図を使うのか決めます。hector slam で作った地図を使ってみます。
navigationを起動します。
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/maps/my_room_hector_map.yaml
2D Nav Goal を選択
マウスクリックで到達点(Goal)とその後の姿勢を設定
最適経路が策定されて、ナビゲーションが開始されます。
また、策定後に経路の途中に障害物が置かれてもレーザーレンジの範囲外の場合は途中まで策定済みの経路を進みますが、スキャンされて新たな障害物が発見されれば経路が再策定されて障害物を回避します。
Leave a Reply