🐕

3D SLAM比較

に公開

目的

MID360が手に入ったので、地図作成SLAMを試す。

3D SLAM比較

OpenAIのDeepResearchを用いて、3D SLAMを比較。
この中でROS2、MID360対応のFAST-LIO、GLIMの動作確認を行なった。

項目 FAST-LIO (FAST-LIO2) GLIM LIO-Livox LIO-SAM KISS-ICP
MID360対応 ○(LivoxカスタムMsgで対応。動作報告あり) ○(センサ非依存設計。MID360実験例あり) ○(Livox公式。MID360サポート) △(要改造版。公式は未対応) △(センサ依存なし。歪み補正ない点に留意)
PCD地図出力 ○(パラメータ設定でscans.pcd保存 ) △(オフラインでエクスポート可能。設定要) △(標準機能なし。コード改変で可) ○(地図トピックから取得可。保存ツールあり) △(標準機能なし。後処理で統合すれば可)
室内マッピング適性 ◎(高頻度・高信頼のLIO。動的物体は未対策) ◎(高精度マップ。ループ閉合・手動修正も可能) ○(動的物体フィルタで安定。精度良) ◎(IMU平滑化+ループ閉合で高精度地図) ○(簡易ICPで手軽。大域的精度はループ無し)
前傾配置・歪み補正 ○(IMUで補正。外部パラメータ設定要) ○(IMU融合で歪み補正。姿勢依存なし) ○(IMU内蔵で補正。任意姿勢対応) ○(IMU+スライドウインドウで補正) △(IMU無。高速移動で歪み影響)
ドキュメント/コミュニティ ○(基本的なREADME。利用者多く情報豊富) ○(公式Docs充実。国内発で情報入手容易) △(README詳解。コミュニティ小) ◎(資料豊富・利用者非常に多い) ○(必要十分な説明。今後ユーザ増加)
ROS1/ROS2対応 ROS1(ROS2版は非公式フォークあり) ROS1 & ROS2(公式サポート) ROS1(ROS2未対応) ROS1(ROS2版は派生プロジェクトあり) ROS2中心(ROS1旧版のみ)
ライセンス GPL-2.0 (コピーレフト) MIT(緩やか) BSD-3 (緩やか) BSD-3(緩やか) MIT(緩やか)

環境

動作環境

接続

自動車やロボットは電源があるが、ハンドキャリーに対応できるように配線した。

PD3.0対応のモバイルバッテリーとPD充電ケーブルを接続した。
DC変換ケーブルを切り、MID360のケーブルに半田づけ。
電源配線

ヘルメットに装着した。PCをリュックに入れれば手ぶらで測量できる。
45度傾けて装着。前方の床面と、後方の天井を同時にマッチングできるので、マッチング精度が上がると推測して、設置した。
ヘルメット装着

取得データ確認

CloudCompareを使用。
インストール方法

FAST-LIO

結果

以下のブログのようにマップが伸びてしまう現象が発生(lidar_type:1)。
マップが作成できても六畳一間で300MB程度の大きなマップになってしまった。
https://techshare.co.jp/faq/unitree/mid360_slam_fast-lio.html

手順

ROS1

試していない。
https://e-nexty.dxp.nexty-ele.com/static/articles/column_livox_03

docker用いない方法

以下を参考。そのまま実行してもマップは作成されない。yamlと実行方法の整合を取る必要あり。
https://www.sato-susumu.com/entry/fast_lio
https://github.com/Ericsii/FAST_LIO_ROS2

livox_ros_driver2は以下のコマンドで実行

mid360.yamlを編集せず、lidar_typeを1のままにした場合。
rvizで表示されるが、マップの精度が低い。Failed to find match for field 'reflectivity'.と警告が発生する(無視して良い)。

ros2 launch livox_ros_driver2 rviz_MID360_launch.py

mid360.yamlを編集し、lidar_typeを4にした場合、rvizでは表示されない。
こちらで実行した方がマップの精度が高い。

ros2 launch livox_ros_driver2 msg_MID360_launch.py 

dockerを用いる方法

以下を参考。説明通り実行すればマップが作成される。
https://qiita.com/porizou1/items/827d596acae993a61290
https://github.com/hku-mars/FAST_LIO/tree/ROS2

GLIM

結果

綺麗なマップが作成できた。屋内も屋外も作成でき、満足。
歩いた軌跡も保存される。FAST_LIOは別途作業が必要になるため、未実施。

手順

以下のサイトの通りに実行すればできる。
https://zenn.dev/koide3/articles/144e97133234e2

変更したパラメータ

random_downsample_target:10000→20000 (50000だと処理のラグが発生した)

点群のダウンサンプリング後の目標点数です。これを下げることで処理負荷を大きく減らすことができます。デフォルト設定は10000点ですが、5000点程度までは減らしてもそれほど精度劣化は起きません。

voxel_resolution:0.25→0.1

voxel_resolution (default 0.25 m) : Base VGICP voxel resolution. Use a small value for indoor environments (e.g., 0.1 ~ 0.25 m)

driverの起動方法

source ~/ros2_ws/install/setup.bash
ros2 launch livox_ros_driver2 rviz_MID360_launch.py

GLIM起動

source /opt/ros/humble/setup.bash
ros2 run glim_ros glim_rosnode --ros-args -p config_path:=$(realpath ~/glim_ws/config)

データ取得後

cd ~/tmp
ros2 run glim_ros offline_viewer

保存データを開く

File->Open New Map /tmp/dump

CloudCompareで開ける形式で保存

File->Save->Export Points hogehoge.plyで保存

参考サイト

https://koide3.github.io/glim/installation.html
https://www.abudorilab.com/entry/2024/08/10/192221

まとめ

MID360でSLAMをしている記事はFAST_LIOが多かったが、GLIMの方が性能が高く使いやすい。

Discussion