環境
この記事は以下の環境で動いています。
項目 | 値 |
---|---|
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を使ったので、それと接続してみましょう。
インストール
sudo apt install ros-kinetic-explore-lite
ソースコード
<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を起動します。
roslaunch nav_lecture move_base.launch
次にexplore_liteを起動します。
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が隣り合っているところを未探索領域と認識するので、勾配のあるコストマップではなく元のマップを入力する必要があります。