GLIM:一套配置驱动 LiDAR-IMU 融合 3D 定位建图,Jetson 上也能实时跑的开源框架
【免费下载链接】glimGLIM: versatile and extensible point cloud-based 3D localization and mapping framework项目地址: https://gitcode.com/GitHub_Trending/glim/glim
GLIM 是一个通用的 3D 定位建图(SLAM,即设备一边移动一边"搞清楚自己在哪、周围长什么样")框架。它统一处理 LiDAR 点云与 IMU(惯性测量单元,负责记录加速度和角速度)数据,帮你实时估计位姿、生成全局一致的地图。
三类场景,一套管线
- 机器人导航:机器人在未知环境边走边建图,GLIM 同时输出轨迹与地图。
- 自动驾驶测试:官方 demo 用 Livox MID360 完成了户外驾驶建图测试。
- AR/VR 与室内定位:固态 LiDAR(如 Realsense L515)和 RGB-D 相机(如 Azure Kinect)可直接接入。
对工程同学的直接价值是:换传感器时主要改配置,不用重写算法管线。
项目定位:一个能覆盖 GPU 到 Jetson 的点云 SLAM 框架
核心亮点(特性 + 效果):
- 传感器无关:旋转式、非重复扫描、固态 LiDAR 与 RGB-D 共用一条管线,同一套参数直接跑。
- GPU 加速 + 轻量模式:默认 GPU 加速保精度,CPU 轻量模式可下放到树莓派级别设备实时运行。
- 内置地图纠错界面:建图出错的区段可以离线手动修正,不必整段重跑。
数据是怎么流动的
下面这张流程图对应 GLIM 的四段式数据流(各节说明取自 官方文档目录 与源码模块划分):
- 预处理:先滤掉近处噪点,再随机降采样,控制后续计算量。
- 里程计估计:用 IMU 预积分加 VGICP(一种按体素索引加速的广义 ICP 点云配准)滚动优化,输出短时位姿。
- 子地图构建:把关键帧打包成子地图,先做局部优化,相当于"分块打草稿"。
- 全局优化:可以理解为多路证据一起拼拼图——IMU 预积分因子、相邻位姿约束、子地图间的配准误差因子各提供一条证据,拼出全局一致的位姿。子地图重叠度超过阈值时自动建立约束,隐式闭环由此完成。
最短路径跑起来(PPA 二进制安装)
官方推荐用 PPA 二进制包,省去逐个编译 GTSAM、gtsam_points 等依赖。以 Ubuntu 22.04 / 24.04 + ROS2 为例:
# 1. 添加 PPA 源 curl -s https://koide3.github.io/ppa/setup_ppa.sh | sudo bash # 2. 安装 GLIM 的 ROS2 包(按需选择 CUDA 版本) sudo apt update sudo apt install -y ros-humble-glim-ros # 无 GPU:CPU 版 sudo apt install -y ros-humble-glim-ros-cuda12.2 # 有 NVIDIA GPU:CUDA 版 # 3. 修改 config/config_sensors.json 中的外参与 config_ros.json 中的话题名 # 4. 回放演示数据: ros2 run glim_ros glim_rosbag os1_128_01没有 PPA 的发行版可走源码编译,步骤见 安装文档;不想装 ROS 环境也可以直接用预构建 Docker 镜像,见 Docker 文档。跑完后地图与轨迹会存到/tmp/dump,用offline_viewer打开即可查看、修图。
关键参数调节对照表
参数位置在config/目录的 JSON 文件里,改完 ROS2 环境需要重新colcon build(或启动时用--ros-args -p config_path:=...指向自定义目录)。下表只列最常用的 6 个,含义见 参数说明文档:
| 参数 | 默认值 | 往哪个方向调 |
|---|---|---|
random_downsample_target | 10000 | 调小(如 5000)→ 速度明显变快,精度略降 |
voxel_resolution | 0.25 | 室内调小(0.1~0.25)→ 配准更精细 |
voxelmap_levels | 2 | 调大 → 对大幅位移更鲁棒,计算略增 |
max_num_keyframes | 15 | 调大 → 里程计漂移减小,内存占用上升 |
keyframe_update_strategy | OVERLAP | 重叠率策略自适应性强;DISPLACEMENT 更直观好调 |
min_implicit_loop_overlap | 0.2 | 调小 → 建更多隐式闭环约束,全局更紧 |
一个典型的 GPU 里程计配置片段(config/config_odometry_gpu.json):
"voxel_resolution": 0.25, "voxelmap_levels": 2, "max_num_keyframes": 15, "keyframe_update_strategy": "OVERLAP"实测与部署情况
先说结论:同一套参数可以横跨多种 LiDAR 直接复用,轻量模式在嵌入式平台上能实时跑。
- 多传感器通用:官方 demo 中 Livox、Velodyne、Azure Kinect、Realsense L515 使用同一组参数完成建图,无需逐传感器调参(见 demo 文档)。
- 嵌入式实时:Jetson Nano 上可实时运行纯里程计估计(无全局优化),配合 Jetson Orin(JetPack 6.1)也在官方测试范围内。
- 平台覆盖:官方在 Ubuntu 22.04 / 24.04、CUDA 12.2 / 12.6 / 13.1 上验证过。
常见问题 FAQ
Q:IMU 数据没对准、初始化就翻车?静止放置设备,IMU 静止时 z 轴朝上,线性加速度应约为 [0, 0, +9.81]。若你的 IMU 单位是 g(如 Livox),把config_ros.json里的acc_scale设为 9.80665。时间戳问题则靠 ROS 话题时间检查,配合config_sensors.json里的T_lidar_imu外参一起排查。
Q:点云配准失败、位姿乱跳?先检查 LiDAR-IMU 外参,再按顺序调:voxelmap_levels调到 3、关键帧策略改成DISPLACEMENT并加大位移阈值。
Q:内存占用大、跑长 bag 吃力?把random_downsample_target降到 5000、max_num_keyframes调小,或直接用 CPU 轻量组合(config_odometry_cpu.json+ 透传子地图),官方明确支持这种低配跑法。
Q:设备上没有 IMU 怎么办?切到纯 LiDAR 里程计:config.json里config_odometry指向config_odometry_ct.json,并在子地图与全局优化配置中把enable_imu设为false。
选型建议:它适合谁
适合用 GLIM 的情况:
- 项目里有多种测距传感器,想避免为每种传感器维护一套 SLAM 代码。
- 需要 GPU 加速的实时建图,同时希望保留低配设备的轻量降级方案。
- 建图结果允许事后人工介入:用离线查看器手动补闭环、清理动态物体点。
- 技术栈是 ROS / ROS2,尤其是 ROS2(humble / jazzy 均有现成包)。
暂不适合的情况:
- 只有双目立体相机而没有深度/点云输出——官方明确建议这类传感器改用视觉 SLAM。
- 必须用 CUDA 11 或更老版本——当前版本不支持。
- 只需要纯视觉或语义建图,点云不是你的主数据源。
收尾
GLIM 把传感器差异、计算档位、优化环节都收敛成了配置文件里的一行字符串。先按最短路径跑通演示数据,再对照参数表接入自己的传感器,是最省事的路线。
【免费下载链接】glimGLIM: versatile and extensible point cloud-based 3D localization and mapping framework项目地址: https://gitcode.com/GitHub_Trending/glim/glim
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考