33
33

More than 5 years have passed since last update.

ROSとGazeboによる自律移動シミュレーション 〜SLAMアルゴリズムの比較〜

Last updated at Posted at 2017-12-13

はじめに

■ROSとGazeboによる自律移動シミュレーション
1.モデル作成
2.SLAMアルゴリズムの比較 ← 今ココ

前回、モデル作成が終わったので次はSLAMを構築して地図生成と自己位置推定を行えるようにしたいと思います。
SLAMを構築する場合、全てを1からコーディングしていこうとすると、規模が大きいので莫大な時間と労力が必要になります。
そこで、SLAMを構築する場合、SLAMライブラリを用いるのが一般的です。
世の中には数多くのSLAMライブラリがあり、色んな大学、研究機関でSLAMライブラリの開発・公開が行われています。

ホントいっぱいあります。どれを使おうか迷います。

先駆者の中にはそれぞれの手法を比較されている方もいて非常に参考になりました。
Roomblock: Mapping Experimets using ROS packages

上記の動画ではGmappingKarto SLAMHector SLAMGoogle Cartographerの地図生成と自己位置推定結果を比較しています。

※※※ 注意 ※※※
上記のアルゴリズムは全てデフォルトパラメータで動かしているらしく、その状況に適したチューニングを行っていないとのことなので参考程度に!

Gmapping

  • ベースアルゴリズム:Particle Filter
  • 作成者:フライブルク大学, サピエンツァ大学,チューリッヒ工科大学
  • loop closure:有り
  • DOF:3DOF(Odom+Lidar)
  • 参考論文
    • Implementation of Odometry with EKF for Localization of Hector SLAM Method1

※参考
OpenSLAM: オープンSLAMとして公開されています。
ROS Wiki - gmapping: ROSパーケージの説明
ROS navigationパッケージを使ってみよう: 環境構築方法について書かれています。体験的に使ってみるときに参考になりそう。

<コメント>
通称FastSLAMと呼ばれる初期型の完成されたSLAMアルゴリズム。スケーラビリティがなく、特別な用途でのみ使用されていたEKF-SLAMを、格子地図を用いて改良されたアルゴリズムです2。4つのアルゴリズムの中では最も知名度が高いのではないでしょうか。ネット上でも比較的多くの情報が見つかります。
比較動画でも安定して地図が生成できていました。ただ、ループして元の位置に戻ってきたときに誤差の蓄積のためか、位置がずれてしまいました。しかし、ループ検出が成功したようで上手く補正できています。

Karto SLAM

  • ベースアルゴリズム:Graph-based SLAM
  • 製作元SRI International
  • loop closure:有り
  • DOF:3DOF(Odom+Lidar)

※参考
ROS Wiki - karto_slam: ROSパーケージの説明

<コメント>
パーティクルフィルタベースのGmappingや拡張カルマンフィルタベースのHector SLAMはベイズフィルタに基づく手法であるのに対し、グラフベースのKarto SLAMは最適化に基づく手法です。グラフベースのSLAMは大規模な地図構築に適しているらしいのですが、比較動画では最後のループ・クローズに失敗しています。チューニング次第ではループ・クローズに成功するのかもしれません。

Hector SLAM

  • ベースアルゴリズム:Scan Matching and EKF(Extended Kalman Filter)
  • 製作元:ダルムシュタット工科大学
  • loop closure:無し
  • DOF:3DOF(Lidar) 6DOF(IMU+Lidar)
  • 参考論文
    • Implementation of Odometry with EKF for Localization of Hector SLAM Method3

※参考
ROS Wiki - hector_slam: ROSパーケージの説明

<コメント>
拡張カルマンフィルタベースのアルゴリズムでRoboCup 2011向けに開発されたアルゴリズムらしい。4つのアルゴリズムの中では唯一loop closure機能が無い。比較動画でも2つめの角を曲がってから直進しているはずなのに、マップ上では直進したことになっておらず、お粗末な地図が出来上がってしまった。おそらく一番酷い結果になってしまったのではないでしょうか。但し、これもチューニング次第で改善する可能性もあります。

Google Cartographer

  • ベースアルゴリズム:Graph-based SLAM
  • 製作元:Google, Inc.
  • loop closure:有り
  • DOF:3DOF(Lidar), 6DOF(IMU+Lidar)
  • 参考論文
    • Real-Time Loop Closure in 2D LIDAR SLAM4

※参考
Cartographer ROS Integration

<コメント>
GoogleリリースのSLAMライブラリ。Karto SLAMと同様にベースとなっているのはGraph-based SLAMです。室内でのリアルタイム・マッピングを想定して作成されているらしく、リソース面で良好なパフォーマンスを得るためにパーティクルフィルタではなく、グラフベースを採用している4。比較動画でも割と正確に地図が描けており、ループしたときにほぼ正確に元の位置に戻って来れました。4つのSLAMの中では一番正確に地図が描けたのではないでしょうか。

おわりに

いかがでしたでしょうか?
一概にSLAMといっても種類は豊富で状況や環境、用途によって有利に働くアルゴリズム、不利に働くアルゴリズム等あると思います。
どのアルゴリズムを使おうか検討するのも大事ですが、あれこれ悩み続けてもしょうがないと思うので、ある程度当たりをつけて、まずは実際に自分で動かして見ようと思います。

参考文献

33
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
33