ssk tech blog

自律移動ロボットの話を書きます

Google Cartographerとgmappingの比較

はじめに

こんにちは.ササキ(@saitosasaki)です. レーザSLAMのSOTA(State Of The Art)(所説ある)のOSS(Open Source Software)であるCartographerですが、実際使ってみると性能が出ないという話を聞いたり、良さがわかりづらい印象を受けます。

github.com

そこで、Cartographerは有名なgmappingに比べ何が良いのか調べてまとめました!

違い

違いはループ閉じ込み(loop closure)が明示的か非明示的かにあります。
ループ閉じ込みは、再訪点(前に訪れたことがある地点)検出を陽に行う方法と行わない方法があります。
gmappingは再訪点検出を陽に行いません。
Cartographerは再訪点検出を陽に行います。

gmapping

gmappingはrosのnavigationパッケージにもある有名なベイズフィルタ系のSLAMです。

github.com

gmappingはRBPF(Rao-Blackwellized ParticleFilter)-SLAMの代表例です。
PF(Particle Filter)には次元の呪いの問題があり、ロボット位置と地図をPFで推定すると、次元の指数乗で計算量が増加してしまいます。
そこでRBPF-SLAMはロボット位置と地図を分離して、位置推定のみにParticle Filterを使用し、地図推定は他の手法で解析的に求めます。1個の仮設(パーティクル)に1個の地図を割り当てているイメージです。
RBPF-SLAMでは、再訪点検出を明示的に行わず、多数の仮設の中で再訪点の近くを通る仮説の評価値(尤度関数の値)が高くなり、パーティクルフィルタによって評価値の高いものが選択されることでループ閉じ込みを行います。しかし、屋外等の大規模な環境といった条件によっては、多くの仮説を生成しないと仮説が再訪点をうまく通らないことがあり,ループが閉じません。

Cartographer

Cartographerはグリッドベースのスキャンマッチングによる逐次SLAMと一括処理のグラフベースSLAMの二種類で構成されています。
グラフベースSLAMでは、明示的に再訪点を検出します.具体的に言うと,現在地点の形状が過去の地図のある地点の形状と一致しているかを探索し,その地点が再訪点か判断します。
再訪点を発見した場合,再訪点と現在地が一致するという拘束をかけ、ロボット軌跡の最適化を行います。

Cartographerによるループ閉じ込みの動画
www.youtube.com

Cartographerの何が良くないのか

しかし、Cartographerは逐次SLAMは普通のスキャンマッチングです.(むしろ凡.特に小規模な環境においては ,パーティクルフィルタでロバストな位置推定ができるgmappingと比べるのは酷な話です.)
また,大規模環境でのポーズ調整も大変で、パラメータ調節しないとsotaの癖になかなか精度が出ません。
"Cartographer と Autowareを用いた自律走行" によると、屋外のパラメータ調整では

  • (性能の良い)オドメトリの寄与(を上げる)
    対応するパラメータはpose_graph.luaの以下。
odometry_translation_weight   
odometry_rotation_weight  
  • ループ検出(範囲)の拡大
    対応するパラメータは上と同様にpose_graph.luaの以下です。
max_constraint_distance(defautだと15mx15m)    

が必要であるとあります。

まとめ

Cartographerは明示的なループ閉じ込みがあるのは良いが、逐次SLAMがあまり良くない。
屋外等でも使いたかったら、良いオドメトリを買ってオドメトリの寄与を上げ、ループ検出の拡大範囲を上げる等のパラメータチューニングをする必要がある。

追記(重要)

上の記事は2019年3月以前の情報を基に書いているのですが、 原先生が2019年12月15日の第6回 3D勉強会@関東で発表されたスライドによると、つくチャレ2019で更にCartographerを使い込んだ経験から、オドメトリよりもループの拘束が適切に生成できているかが重要だそうです。また、各種パラメータチューニングに関しても細かく書いてあります。

www.slideshare.net

参考資料

本文を書く際に参考にしたもの

原 祥尭,"確率的に蓄積したスキャン形状により過去を考慮した Rao-Blackwellized Particle Filter SLAM",2015
友納正裕,移動ロボットの環境認識 —地図構築と自己位置推定",2016
友納正裕,"SLAM入門",2018
原 祥尭,"オープンソースSLAMの分類",2018
原 祥尭,"Cartographer と Autoware を用いた自律走行",2018

論文&ソースを理解する際に参考にしたもの

Real-Time Loop Closure in 2D LIDAR SLAM,2016
github.com/googlecartographer/cartographer
自律移動ロボットのためのグリッドマップ作成MATLAB, Pythonサンプルプログラム - MyEnigma
Googleが開発しているC++最適化ライブラリCeres Solverの使い方とサンプルコード - MyEnigma

関連記事

ssk0109.hatenablog.com

ssk0109.hatenablog.com

ssk0109.hatenablog.com