首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
5步跑通 GLIM 多传感器 3D SLAM:从 LiDAR+IMU 到全局一致的点云地图
📅 2026/10/23 4:43:57
✍️ 爱科研究院
👁 阅读 3,247
5步跑通 GLIM 多传感器 3D SLAM从 LiDARIMU 到全局一致的点云地图【免费下载链接】glimGLIM: versatile and extensible point cloud-based 3D localization and mapping framework项目地址: https://gitcode.com/GitHub_Trending/glim/glim你的 LiDARIMU 轨迹跑完一圈校园后开始漂移走廊尽头的点云和出发点对不上问题往往不是某几帧配准失败了而是局部配准误差沿着整条轨迹一路累积没人来结账。GLIM 就是做这个结账的它是一个多传感器 3D 定位建图框架把点云配准误差作为约束放进因子图一种把位姿当未知量、用一堆约束关系整体求解的优化结构里全局最小化让整个轨迹和点云地图收敛到全局一致并支持 GPU 加速。这篇文章按 onboarding 的思路写先讲清它能帮你做什么再走一遍环境准备、首次运行、模块选型、调参速查和自检清单最后给出手动修图和扩展的进阶用法。文中所有默认值、版本要求都取自本仓库当前版本 v1.2.2你可以在 CMakeLists.txt 和config/目录里逐条对账。GLIM 能帮你做什么它接得住哪些传感器GLIM 刻意去掉了传感器特化的处理流程只要输出点云外加 IMU就能跑官方支持的类型包括旋转式 LiDARVelodyne HDL32e、Ouster OS1-32非重复扫描 LiDARLivox Avia、Livox MID360固态 LiDARIntel Realsense L515RGB-D 相机Microsoft Azure Kinect参数文档 里还给出了这些传感器典型的T_lidar_imuLiDAR 与 IMU 之间的外参变换参考值方便你起步但官方提醒不要盲目照抄务必以你自己的标定为准。三级流水线的数据流点云进来后经过三级处理每级都是一个可独立替换的模块里程计Odometry实时估计传感器位姿用固定滞后平滑默认smoother_lag5 秒见 config/config_odometry_gpu.json。子图Sub mapping把连续轨迹切成一个个子图submap一段轨迹打包成的局部地图单元并做批量优化。全局建图Global mapping当两个子图重叠率超过阈值默认min_implicit_loop_overlap0.2时自动建立约束——这就是 GLIM 的隐式闭环检测不需要显式的闭环检测器就能把走回去的路对齐。各级实现分布在 里程计源码 和 建图源码头文件接口在 include/glim/。跑完之后你得到什么关闭glim_rosnode或glim_rosbag时结果会 dump 到/tmp/dump建图因子图数据加上 4 个 TUM 格式轨迹文件每行t x y z qx qy qz qw文件内容odom_imu.txt/odom_lidar.txt闭环前的里程计轨迹IMU 系 / LiDAR 系traj_imu.txt/traj_lidar.txt闭环后的全局轨迹IMU 系 / LiDAR 系对比odom_*和traj_*两条轨迹你一眼就能看出全局优化帮你修正了多少漂移。部署前的准备环境与依赖版本要求一览官方测试环境是Ubuntu 22.04 / 24.04 CUDA 12.2 / 12.6 / 13.1以及 NVIDIA Jetson OrinJetPack 6.1README项目要求操作系统Ubuntu 22.04 / 24.04NVIDIA Jetson OrinJetPack 6.1CUDA12.2 / 12.6 / 13.1当前版本不支持 CUDA 11 及更低构建工具CMake ≥ 3.22C17见 CMakeLists.txt必装依赖Eigen、nanoflann、GTSAM≥4.2兼容 4.2a9 / 4.3a0 / 4.3a1、gtsam_points 1.2.2可选依赖CUDA、OpenCV相机图像、OpenMP、ROS/ROS2、Iridescence3D 查看器ROS 版本ROS2 Humble22.04/ Jazzy24.04也支持 ROS1两条安装路线PPA 二进制官方推荐一条在线脚本完成源注册后apt install即可Ubuntu 22.04/24.04 的 AMD64/ARM64 都覆盖具体命令在 安装文档。另有官方预构建 Docker 镜像ROS2 Humble/Jazzy含 CUDA 变体目前仅 AMD64用法见 docker 文档。源码构建适合想改核心代码的人。GTSAM 和 gtsam_points 两个依赖需要先按 安装文档 的步骤构建安装启用 GPU 模块必须用带 CUDA 编译的 gtsam_points否则 CMake 会自动关闭BUILD_WITH_CUDA并给出警告核心库构建如下# 1) 系统依赖GTSAM 4.3a0 与 gtsam_points 1.2.2 需另行构建见安装文档 sudo apt install libomp-dev libboost-all-dev libmetis-dev libfmt-dev libspdlog-dev \ libglm-dev libglfw3-dev libpng-dev libjpeg-dev # 2) 克隆并编译 GLIM 核心库 git clone https://gitcode.com/GitHub_Trending/glim/glim glim cd glim mkdir build cd build cmake .. -DBUILD_WITH_CUDAON make -j$(nproc) sudo make install每个估计模块GPU/CPU/CT 里程计、各类建图被编译成独立的.so动态库运行时由 JSON 配置里的so_name字段决定加载哪一个——这也是后面换模块组合只需要改配置的原因。 从首次运行到出图先把配置指对入口是 config/config.json它只做一件事把三个后端模块指向各自的参数文件默认全是 GPU 版config_odometry: config_odometry_gpu.json, config_sub_mapping: config_sub_mapping_gpu.json, config_global_mapping: config_global_mapping_gpu.json另外两个必须确认的文件config/config_sensors.jsonT_lidar_imu改成你这套传感器的外参默认值是 Ouster OS1-32 的[0.006, -0.012, 0.008, 0, 0, 0, 1]config/config_ros.jsonimu_topic、points_topic指向你的话题名如果你的 IMU 加速度单位是 g例如 Livox 系列把acc_scale设为9.80665海esai 系列陀螺仪单位是 deg/s 时ang_scale设为0.017453。一个容易踩的坑在 ROS2 里改了包内配置后需要重新colcon build才会生效ROS2 要求配置在 install 目录用--symlink-install或外部config_path可以绕开。跑官方测试轨迹官方提供了 Ouster OS1-128 的测试数据降采样版约 515MB下载入口见 quickstart 文档默认配置就是为它准备的。ROS2 下# 方式一rosbag 直读模式自动调速、尽量不掉帧 ros2 run glim_ros glim_rosbag os1_128_01 # 方式二标准节点模式另开终端放 bag ros2 run glim_ros glim_rosnode ros2 bag play os1_128_01 # 跑完打开离线查看器结果在 /tmp/dump ros2 run glim_ros offline_viewerglim_rosbag适合离线回放glim_rosnode适合接实时传感器。出图与验收结束后打开offline_viewerFile → Open Map选 dump 目录可以直接查看因子图和子图球体、导出 PLY 点云。把traj_imu.txt和odom_imu.txt画在一起轨迹首尾闭环处的差距就是你这次全局优化的战绩。模块组合三选一GPU / CPU / LiDAR-onlyGLIM 提供 7 个估计模块覆盖有 GPU 的整机最高精度到树莓派级别的轻量实时模块源码与头文件。官方组合图如下三种预设组合怎么选组合里程计子图全局建图适用场景GPU 完整版OdometryEstimationGPU需 GPU需 LiDAR-IMU固定滞后关键帧SubMapping批量优化可 CPU/GPUGlobalMapping配准代价最小化有 NVIDIA GPU追求精度上限CPU 轻量版OdometryEstimationCPU仅需 CPUscan-to-modelSubMappingPassthrough不优化GlobalMappingPoseGraph位姿图优化无 GPU 的机器demo 页 记录过 Jetson Nano 可实时跑其中的里程计环节纯 LiDAR 版OdometryEstimationCT连续时间 ICP无需 IMU任选但需enable_imu: false任选没有 IMU 或 IMU 数据不可用怎么切换组合只改 config/config.json 的三行指向即可quickstart 文档 给出的官方组合CPU 版config_odometry_cpu.jsonconfig_sub_mapping_passthrough.jsonconfig_global_mapping_pose_graph.json纯 LiDAR 版config_odometry_ct.json并在使用 IMU 的子图/全局配置里把enable_imu设为false只想跑里程计、不做建图在 config/config_ros.json 里把enable_local_mapping、enable_global_mapping都关掉系统就只跑里程计估计调参速查先动这几个参数全部参数见 参数文档下面是日常 90% 的调优目标默认值均摘自仓库配置文件参数默认值作用与调整建议所在文件T_lidar_imuOS1-32 参考值LiDAR-IMU 外参必改以自标定为准config_sensors.jsonacc_scale0自动检测IMU 加速度为 g 单位时设 9.80665config_ros.jsonrandom_downsample_target10000每帧降采样目标点数降到 5000 可显著提速config_preprocess.jsonk_correspondences10协方差估计的邻域点数VLP16 这类稀疏线数雷达建议 15~30config_preprocess.jsonvoxel_resolution0.25 mGPU VGICP 基础体素分辨率室内取 0.1~0.25config_odometry_gpu.jsonvoxelmap_levels2多分辨率层级调大提升大位移鲁棒性2 或 3config_odometry_gpu.jsonmax_num_keyframes15关键帧上限调大减少里程计漂移config_odometry_gpu.jsonkeyframe_update_strategyOVERLAP改DISPLACEMENT后按位移阈值插入关键帧更直观好调config_odometry_gpu.jsonsmoother_lag5.0 s固定滞后平滑窗长config_odometry_gpu.jsonivox_resolution0.5 mCPU GICP 体素分辨率室外调大如 1.0config_odometry_cpu.jsonmin_implicit_loop_overlap0.2隐式闭环的重叠率门槛调小约束更多config_global_mapping_*.jsonsubmap_voxel_resolution0.5 m子图体素分辨率室内建议 0.15~0.25config_sub/global_mapping_*.json一个实用技巧怀疑协方差估计时把标准查看器的color_mode改成NORMAL平面上点色均匀说明协方差正常参数文档 推荐的健康度检查。 遇到问题时自检清单按出现频率从高到低排轨迹整体歪 / 旋转不对九成是T_lidar_imu外参或 IMU 坐标系问题。把 IMU 静置且 z 轴朝上静置加速度读数应约为[0, 0, 9.81]参数文档 的验收标准config_odometry_gpu.json里validate_imu默认开启会输出 IMU 校验日志。稀疏线数雷达如 VLP16估计退化k_correspondences从 10 提到 15~30用上面的NORMAL颜色模式验证协方差。改了配置不生效ROS2重新colcon build或启动时传--ros-args -p config_path:$(realpath ./config)直接指向包外配置目录。想用 AVX 加速却段错误BUILD_WITH_MARCH_NATIVEON要求所有相关库都用marchnative编译漏一个就会崩官方建议不确定时保持关闭安装文档。用立体视觉 RGB-DD455、ZED2i效果差这是已知边界——这类相机的点云质量本身不佳而 GLIM 基于点云匹配demo 文档 明确建议立体传感器改用视觉 SLAM。老显卡跑不起来当前版本不支持 CUDA 11 及以下升级 CUDA 或退回 CPU 组合。进阶手动修图与二次开发手动补闭环和平面约束全局建图只做隐式闭环地图局部失败时可以人工兜底。offline_viewer里quickstart 文档 有逐步说明手动闭环右键一个子图球选Loop begin再右键另一个选Loop end把红/绿点云大致对齐后点Align执行配准满意再点Create Factor把约束加入因子图平面 BA 约束右键平面上的点选Bundle Adjustment (Plane)拖动球体大小覆盖足够多的平面点再Create Factor——适合走廊、墙面这类重复结构场景改完点Optimize重跑优化File → Save → Export Points导出 PLY 点云。多段轨迹合并成一张大地图多次建图会话可以在offline_viewer里合并合并文档File → Open New Map打开第一段Open Additional Map打开第二段点Merge sessions选 Indoor/Outdoor 参数集Run global registration或手动 Gizmo 对齐→Run fine registration精配准 →Create factor再用Find overlapping submaps建立重叠子图间的代价因子多次Optimize融合。注意合并前若某段地图报X34 - E69 is missing之类的 warning要先用Recover graph逐段修复再合并否则优化结果可能损坏。用回调插槽扩展自己的功能GLIM 的扩展机制是全局回调插槽里程计、子图、全局建图各自暴露一组回调你以动态库形式注册进去就能读取内部状态、往因子图里塞新约束机制详解见 扩展文档。最小骨架长这样class MyExtensionModule : public ExtensionModule { public: MyExtensionModule() { using std::placeholders::_1; OdometryEstimationCallbacks::on_new_frame .add(std::bind(MyExtensionModule::on_new_frame, this, _1)); } void on_new_frame(const EstimationFrame::ConstPtr frame) { // 拿到最新帧位姿可在这里向因子图插入自定义约束 } }; extern C ExtensionModule* create_extension_module() { return new MyExtensionModule(); }编译成.so后把库名加进 config/config_ros.json 的extension_modules数组即可加载注意三个模块跑在不同线程回调可能来自不同线程扩展代码要自己保证线程安全。官方示例库 glim_ext 提供过显式闭环检测ScanContext / DBoW、LiDAR-视觉-惯性里程计、GNSS 约束、速度抑制因子等实现扩展文档 有清单提醒一下那些是 proof-of-concept 代码且各自带外部依赖接入前先看许可证。地图编辑手动选点剔除见 edit 文档。最后收个尾GLIM 的路线很清晰——传感器无关的预处理 可插拔的三级估计模块 因子图全局优化 离线人工修图兜底你从改三行 JSON 开始就能出第一张闭环一致的点云地图遇到漂移也有明确的手动修正路径。同时说清它不擅长什么立体视觉 RGB-DD455/ZED2i 这类和纯视觉、无深度信息的场景不适合用它没有 IMU 时只剩纯 LiDAR 的 CT 里程计没有 GPS 辅助的绝对定位能力显式闭环检测不在主库内依赖扩展库或手动操作GPU 路径要求 CUDA 12.2 以上Docker 镜像目前只有 AMD64。如果你的场景落在这几条边界外选方案前先读一遍 demo 文档 里的官方说明再定。【免费下载链接】glimGLIM: versatile and extensible point cloud-based 3D localization and mapping framework项目地址: https://gitcode.com/GitHub_Trending/glim/glim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/23 4:43:57
《随机森林》
2026/10/23 4:43:57
FactoryBluePrints 戴森球计划蓝图仓库:7000+ 蓝图从前期开荒到 2.8T 锅盖的完整使用路径
2026/10/23 4:43:57
Hadoop Spark 数据倾斜完整排查
2026/10/23 5:49:01
Ventoy制作Ubuntu启动盘:适配ThinkPad X1E隐士的UEFI多系统引导方案
2026/10/23 5:49:01
GitLab SSH密钥配置全流程:生成、验证、多账号与排错指南
2026/10/23 5:49:01
JMA/NIED高精度地震时序数据建模实战指南
2026/10/23 5:49:01
自动驾驶候选路径生成:端到端轨迹预测失效与混合架构落地
2026/10/23 5:49:01
AI短剧制作全流程:角色一致性、分镜表与产能控制
2026/10/23 5:44:01
Nero 2025蓝光归档实战:Win11刻录配置与长期保存避坑指南
2026/10/23 0:02:44
Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战
2026/10/23 0:02:44
数据服务监控运维实战:从指标体系到告警治理与故障排查
2026/10/23 0:02:44
FreeRTOS任务通知实战详解:内核原理、API与避坑指南
2026/10/23 0:52:23
OpenResearch实战:Claude Code、Codex、OpenCode、Cursor 工作流搭建与故障排查
2026/10/22 17:15:21
知识管理核弹:用Obsidian构建第二大脑的工程化方案(TaoToken 统一 Key 接入版)
2026/10/23 0:52:11
金融AI落地指南:从调研报告到技术选型与工程实践
2026/10/22 5:06:15
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/22 2:07:18
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/21 19:01:08
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)