ROS講座112 不明領域を探索する


環境

この記事は以下の環境で動いています。

項目
CPU Core i5-8250U
Ubuntu 16.04
ROS Kinetic
Gazebo 7.14.0

インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。

概要

今回はexplore_liteというパッケージを紹介します。
このパッケージはmapを入力にして、未探索領域を抽出してmove_baseに指令してその位置にを目指して移動するものです。
ちょうど前にmove_baseを使ったので、それと接続してみましょう。

インストール

explore_liteのインストール
sudo apt install ros-kinetic-explore-lite

ソースコード

nav_lecture/launch/explore.launch
<launch>
    <group ns="/dtw_robot1">
        <node pkg="explore_lite" type="explore" respawn="false" name="explore" output="screen">
            <param name="robot_base_frame" value="dtw_robot1/base_link"/>
            <param name="costmap_topic" value="map"/>
            <param name="visualize" value="true"/>
        </node>
    </group>
</launch>

実行

まずmove_baseを起動します。前に使った以下のlaunchを起動します。

1つ目のターミナル
roslaunch nav_lecture move_base.launch 

次にexplore_liteを起動します。

2つ目のターミナル
roslaunch nav_lecture explore.launch

すると未探索領域を抽出してその位置をmove_baseに投げて移動します。未探索領域がなくなると[ INFO] [...,...]: Exploration stopped.と表示して終了します。
/dtw_robot1/explore/frontiersを表示すると未探索領域を表示するので、動作が分かりやすいです。

コメント

explore_liteに入れるGridMapは勾配が無く3値(EMPTY,OCCUPIED,UNKNOWN)のマップでないといけないです。
以下の図の左は/dtw_robot/mapでgmappingの出力で、これは3値のマップなのでexplore_liteで使えます。
したし右の/dtw_robot1/move_base/global_costmap/costmapはmove_baseの出力ですが、勾配がついているので3値ではないです。
このexplore_liteのアルゴリズムはEMPTY,UNKNOWNが隣り合っているところを未探索領域と認識するので、勾配のあるコストマップではなく元のマップを入力する必要があります。

参考

explore_lite

目次ページへのリンク

ROS講座の目次へのリンク