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(緩やか) |
環境
動作環境
- LIVOX MID360(起動時20V850mA、定常時20V300mA)
- Nvidia RTX3060(laptop)
- Anker Prime 20,000mAh Power Bank(100W出力)
- DC電源 PD充電ケーブル20V5A
- DC変換ケーブル
- OGK KABUTO RECT
接続
自動車やロボットは電源があるが、ハンドキャリーに対応できるように配線した。
PD3.0対応のモバイルバッテリーとPD充電ケーブルを接続した。
DC変換ケーブルを切り、MID360のケーブルに半田づけ。
ヘルメットに装着した。PCをリュックに入れれば手ぶらで測量できる。
45度傾けて装着。前方の床面と、後方の天井を同時にマッチングできるので、マッチング精度が上がると推測して、設置した。
取得データ確認
CloudCompareを使用。
インストール方法
FAST-LIO
結果
以下のブログのようにマップが伸びてしまう現象が発生(lidar_type:1)。
マップが作成できても六畳一間で300MB程度の大きなマップになってしまった。
手順
ROS1
試していない。
docker用いない方法
以下を参考。そのまま実行してもマップは作成されない。yamlと実行方法の整合を取る必要あり。
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を用いる方法
以下を参考。説明通り実行すればマップが作成される。
GLIM
結果
綺麗なマップが作成できた。屋内も屋外も作成でき、満足。
歩いた軌跡も保存される。FAST_LIOは別途作業が必要になるため、未実施。
手順
以下のサイトの通りに実行すればできる。
変更したパラメータ
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で保存
参考サイト
まとめ
MID360でSLAMをしている記事はFAST_LIOが多かったが、GLIMの方が性能が高く使いやすい。
Discussion