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ライセンスにもとづいています。