目次
- 導入
- move_base (ナビゲーション)
- ROSで遊んでみる
- ソフトウェア構成をみる
- amcl (自己位置推定)
- ROSで遊んでみる
- ソフトウェア構成をみる
- 原理をみる (準備編)
- 原理をみる (応用編)
- gmapping (地図生成)
- ROSで遊んでみる
- ソフトウェア構成をみる ← いまココ
- 原理をみる(応用編)
- 原理をみる(準備編 その1)
- 原理をみる(準備編 その2)
はじめに
Navigation Stack を理解する - 4.1 gmapping: ROSで遊んでみるの続きです.amcl の自己位置推定問題から,SLAM問題になって,どのように内部構成が変わったのかを見てみます.構成上は,ほんの少しの違いです.
環境
- OS: Ubuntu 14.04
- ROS: Indigo
- モデル:Husky
- パッケージ:husky_navigation
- チュートリアル:Husky AMCL Demo
位置づけ
実は,ここで紹介する"ros-perception/slam_gmapping", github.のエンジン部分では,"gmapping", OpenSLAMを使っているのです.OpenSLAM はSLAMに関する開発成果を共有する場となっており,そのうち実績のあるものを活用しているのです.
gmapping で採用されているSLAMは,格子ベースのFastSLAM 2.0です."gmapping", OpenSLAMによると,下記論文を基に実装されているとのことです.
rqt_graph をベースにソフトウェアの構成を見る
素のrqt_graph を見る
まずは例によってrqt_graph を見てみます.
$ rqt_graph
もうほとんど同じですね.主には,mapトピックからのびる矢印の方向が違う程度です.まとめる必要性も無さそうなほどですが,体裁を整えるという意味でも,簡易版に進んでみます.
簡易版rqt_graph を見る
下図がgmapping付きのものです.
ソフトウェア構成的には,は3.2 amcl: ソフトウェア構成をみると比べると,mapトピックの矢印の向きが変わっただけです.
挙動の観点から言うと,move_base はこの作成途中の地図を使ってナビゲーションをしており,slam_gmapping は自分で作成途中の地図を使って自己位置推定もしています.(mapトピックからの矢印がslam_gmappingに伸びてはいませんが,内部的にはその情報を持っているから当然可能です.)
おわりに
え,こんなもん?ええ,こんなもんです.これまで扱ってきたmove_base
とamcl
の構成が分かっていることが前提ですが,たったこれだけの要素であの複雑そうなSLAMを使えるようにしてくれるフレームワーク(ROS)とエンジン(OpenSLAM gmapping)が偉いんです.
次項でその原理を追っていきます.amcl の時と同様に,理論的な導出については文献でなされているものとして,結論を拝借してリバースエンジニアリングをして挙動を理解してくことを試みます.
それでは.
Next: 4.3 gmapping: 原理をみる(応用編)
Prev: 4.1 gmapping: ROSで遊んでみる