5步跑通 GLIM 多传感器 3D SLAM:从 LiDAR+IMU 到全局一致的点云地图

发布时间:2026/10/23 4:43:55

5步跑通 GLIM 多传感器 3D SLAM:从 LiDAR+IMU 到全局一致的点云地图 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),仅供参考
延伸阅读

更多相关文章

2026/10/23 4:43:55

《随机森林》

随机森林: 随机森林就是训练很多棵不同的决策树,然后让它们投票决定最终结果。 从何而来: 决策树很强大,但有一个致命缺点:容易过拟合。一棵树如果长得太深,就会把噪声也学进去。 为了克服这个缺点&#xf…

2026/10/23 4:43:55

Hadoop Spark 数据倾斜完整排查

一、倾斜现象识别1. Spark UI 页面(最核心)Stage 页面看 Task 列表:同一个 Stage 下,绝大部分 task 几秒跑完,数据量几十 MB;少数几个 task 跑几十分钟,shuffle read 达到 GB 级别,进…

2026/10/23 5:44:01

Nero 2025蓝光归档实战:Win11刻录配置与长期保存避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/23 5:44:01

嵌入式老兵转型指南:Linux+端侧AI部署才是高价值赛道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/23 5:44:01

WinPE 10重装Win10全流程:启动、分区与UEFI引导修复

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/23 5:44:01

爬虫Web基础:请求头、响应头、HTTP/HTTPS与状态码全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/23 5:44:01

Ubuntu双机远程桌面实战:Wayland黑屏排查与无人值守配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/23 5:39:00

RC电路暂态过程Simulink仿真:从建模到波形分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑