/LittleSLAM

2D-Laser SLAM for educational use

Primary LanguageC++Mozilla Public License 2.0MPL-2.0

LittleSLAM(改訂2版)

LittleSLAMについて

LittleSLAMは、SLAM学習用プログラムです。 2D-Lidarのデータ(スキャン)とオドメトリデータを格納したファイルを入力し、 ロボット位置の軌跡と2D点群地図をgnuplot上に出力します。

LittleSLAMは、スキャンマッチングに基づく位置合せ、レーザスキャナとオドメトリのセンサ融合、 Graph-based SLAMに基づくループ閉じ込みなどの要素技術から構成されています。

LittleSLAMは参考書籍[1]の教材として作られたプログラムであり、 わかりやすさを優先してシンプルなアルゴリズムを採用しています。 そのため、フルスペックのSLAMプログラムと比べると性能は落ちますが、 内容の理解はしやすくなっています。

参考書籍の改訂版[2]では、発展編として、処理速度やロバスト性を向上させる 以下のプログラムが追加されました。

  • ガウスニュートン法によるスキャンマッチングの高速化
  • M推定によるスキャンマッチングのロバスト化
  • MAP推定による退化の対処
  • kd木を用いたデータ対応づけ
  • ループ閉じ込みのロバスト化

これに伴い、このリポジトリも更新されました。 初版[1]のソフトウェアは、ここからアクセスできます。

実行環境

LittleSLAMはプログラミング言語C++で記述されています。 動作を確認した実行環境は下記のものです。いずれも64ビット版です。

OS C++
Windows 11 Visual C++ 2022 (Visual Studio Community 2022)
Linux Ubuntu 20.04 LTS gcc 9.4.0
Linux Ubuntu 22.04 LTS gcc 11.4.0

32ビットOSでの動作確認はしていないので、必要な場合はご自分で試してください。

必要なソフトウェア

LittleSLAMの実行には、下記のソフトウェアが必要です。

ソフトウェア 内容 バージョン
Boost C++汎用ライブラリ 1.71.0
Eigen3 線形代数ライブラリ 3.3.7
gnuplot グラフ描画ツール 5.2
CMake ビルド支援ツール 3.16.3
p2o Graph-based SLAMソルバ 1.0
nanoflann kd木ライブラリ 1.5.5

バージョンはLittleSLAMの開発で使用したものであり、明確な条件ではありません。 これ以上のバージョンであれば通常は動作します。 これ以下のバージョンでも動作する可能性はあります。

使い方

データセット

実験用に6個のデータファイルを用意しています。下表に一覧を示します。 ここからダウンロードできます。

ファイル名 内容
corridor.lsc 廊下(単一ループ)
hall.lsc 広間(単一ループ)
corridor-degene.lsc 廊下(退化)
hall-degene.lsc 広間(退化)
corridor-loops.lsc 廊下(多重ループ)
hall-loops.lsc 広間(多重ループ)

カスタマイズ

LittleSLAMは学習用プログラムであり、基本形からいくつかの改良を経て 完成するようにカスタマイズできます。
詳細はこちらを参照してください。

参考書籍

下記の書籍はSLAMの解説書です。SLAMの一般的な解説をするとともに、 具体例としてLittleSLAMを教材に用い、そのソースコードの詳細を説明しています。

[1] 友納正裕、「SLAM入門 --ロボットの自己位置推定と地図構築の技術--」、オーム社、2018年
[2] 友納正裕、「SLAM入門 --ロボットの自己位置推定と地図構築の技術--(改訂2版)」、オーム社、2024年

ライセンス

  • LittleSLAMは、MPL-2.0ライセンスにもとづいています。