当前位置: 首页 > news >正文

揭秘 MULLS 的 4 个鲁棒性技巧:地面分割、运动补偿、动态物体移除与距离反比采样

揭秘 MULLS 的 4 个鲁棒性技巧:地面分割、运动补偿、动态物体移除与距离反比采样

【免费下载链接】MULLS🤔 MULLS: Versatile LiDAR SLAM via Multi-metric Linear Least Square [ICRA 21]项目地址: https://gitcode.com/gh_mirrors/mu/MULLS

MULLS(Versatile LiDAR SLAM via Multi-metric Linear Least Square,ICRA 2021)是一套高效、低漂移、多场景通用的激光雷达 SLAM 开源方案,既能跑实时里程计,也能完成建图与回环优化。对新手来说,MULLS 最值得学习的不是"它跑得多准",而是它如何通过一组工程化技巧让 LiDAR SLAM 在城市场景、高速路段、复杂路口里保持鲁棒。本文从源码层面拆解 MULLS 提升鲁棒性的 4 个关键技巧:地面分割、运动补偿、动态物体移除与距离反比采样,帮你快速理解这套系统的设计思路。

技巧一:基于网格双阈值的快速地面分割

地面点在每一帧点云中占比极高,如果全部参与配准,不仅计算量大,还会干扰特征匹配。MULLS 采用了一种"双阈值"网格地面分割策略,核心实现在 cfilter.hpp 的fast_ground_filter函数中,大致流程是:

  1. 构建 2D 网格:把点云按水平面投影到网格,统计每个格子的最低点(min_z);
  2. 邻域比较:若某格子的最低点与 8 邻域最低点相差超过阈值 1,则该格子整体视为非地面;
  3. 格内二次筛选:其余格子中,高于格内最低点阈值 2 的点归为非地面,剩余归为地面。

这套思路比直接 RANSAC 拟合平面更快、对坡度更宽容,还能顺带估计地面法向量(支持固定半径、k 近邻、格内 RANSAC 三种方式)。分割后地面点会被随机降采样,非地面点则进入下一步的特征提取,为后续多度量配准提供干净输入。

技巧二:基于匀速运动模型的点云运动补偿

旋转式激光雷达一帧扫描需要几十毫秒,车辆在这段时间内的位移会让点云产生"运动畸变"(scan distortion),高速行驶时尤为明显。MULLS 用匀速运动模型做运动补偿,实现在 cfilter.hpp 的simple_motion_compensationapply_motion_compensation中。

原理很直观:假设帧间运动已知,则每个点根据其扫描时刻的比例系数 s 做线性插值——最早扫到的点畸变最大、补偿最多,最后扫到的点几乎不动。插值用四元数球面线性插值(slerp)完成,旋转和平移分别处理。代码还针对不同雷达做了适配:Velodyne HDL-64 从 x 轴负方向起扫、Hesai Pandar 从 y 轴负方向起扫,通过scan_begin_ang参数区分;若点云自带时间戳,也可以走simple_motion_compensation_with_timestamp按真实时间比例补偿。这一步直接决定了配准初值的质量,是低漂移的关键前提。

技巧三:双重动态物体移除策略

行驶中的车辆、行人会在地图上留下"鬼影",把动态点误当作静态特征参与配准,是 LiDAR SLAM 漂移的主要来源之一。MULLS 提供两层动态物体移除手段:

  • 基于语义掩码的前置剔除:在 Semantic KITTI 数据上,cfilter.hpp 的filter_with_dynamic_object_mask_pre直接利用神经网络预测的语义标签,把 moving-car、moving-person 等动态类别(标签 252–259)在进入特征提取前就过滤掉;
  • 基于局部地图的后验剔除:这才是 MULLS 的亮点。map_manager.cpp 的map_based_dynamic_close_removal把当前帧的非地面点与局部地图做 kd-tree 最近邻搜索:若某点到地图最近邻的距离落在异常区间(过近或过远),就判定它属于动态物体并删除。由于配准前地图已建好,这套方法不依赖额外传感器,纯 LiDAR 也能稳定工作。

此外,scanner_filter 还会剔除车体自身的点与地面以下的"鬼点",进一步净化输入。

技巧四:距离反比采样让远处点不"消失"

激光雷达点云密度随距离急剧衰减——近处密密麻麻、远处稀稀拉拉。如果均匀降采样,远处本就不多的点会被进一步"稀释",导致配准约束不足。MULLS 的距离反比采样(distance inverse sampling)专门解决这个问题,参数入口在 cfilter.hpp 的extract_semantic_pts中:

distance_inverse_sampling_method: 0=关闭,1=线性权重,2=二次权重 standard_distance: 权重为 1 的参考距离(默认 15 米)

实现时以标准距离 / 点到雷达距离作为采样权重:近处点被更狠地降采样,远处点则尽量保留,且二次权重比线性权重更激进。这样配准时远近特征点分布更均衡,长距离场景(如高速公路)的鲁棒性明显提升。想体验的话,在 run_mulls_slam.sh 指定的配置文件中即可调整对应参数,不同场景还有现成配置可参考,比如 lo_gflag_list_kitti_urban.txt 与 lo_gflag_list_kitti_highway.txt。

快速上手体验

这 4 个技巧共同撑起了 MULLS 的鲁棒性,而体验它们并不难。仓库自带 16 帧示例数据(demo_data目录),无需任何配置即可运行:

git clone https://gitcode.com/gh_mirrors/mu/MULLS sh script/run_mulls_slam.sh # 跑完整 SLAM sh script/run_mulls_reg.sh # 跑两帧点云配准

小结

地面分割减少计算干扰、运动补偿消除畸变、动态物体移除防止漂移、距离反比采样均衡特征分布——这 4 个技巧环环相扣,让 MULLS 在保持高效的同时具备低漂移、多场景通用的能力。对于正在学习 LiDAR SLAM 的你,与其对着公式发愁,不如直接读读 cfilter.hpp 与 map_manager.cpp 里这些短小精悍的实现,很快就能把工程上的鲁棒性思维带进自己的项目。

【免费下载链接】MULLS🤔 MULLS: Versatile LiDAR SLAM via Multi-metric Linear Least Square [ICRA 21]项目地址: https://gitcode.com/gh_mirrors/mu/MULLS

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4140196.html

相关文章:

  • NATS.Net JetStream入门:5步创建Stream与Consumer实现消息持久化
  • 一个软件免费聚合全网音乐:LX Music桌面版真实使用体验与3分钟上手指南
  • VCTRenderer 动态体素化实战:flag volume 如何实现场景每帧实时更新
  • 免费的抖音无水印视频下载工具:粘贴链接,视频、主页、直播全都能存下
  • Windows 更新反复失败?WUReset 一键重置修复指南
  • PLC直线插补
  • Scroll Reverser 使用指南:轻量滚动方向控制
  • 【x264编码器】章节6——x264的变换量化
  • 解释一下Web服务器和应用服务器的区别。
  • AI 智能空气消毒净化器高效能 MOSFET 完整选型方案
  • 《经济研究》投稿 LaTeX 模板 Chinese-ERJ:从零配置到一次编译通过
  • WinUtil 完整指南:一键搞定软件安装、系统优化与故障修复,新电脑 30 分钟配好
  • Whoosh排序与分组技巧:搜索结果排序的7个进阶方案
  • pyqt鸟瞰
  • ctxsync 核心命令详解:掌握 push 文件同步的 10 个关键细节
  • prometeo开发者指南:从源码理解转译器、内存分析与代码生成三大核心模块
  • 碧蓝航线自动化脚本 Alas 上手方案:5 分钟装好挂机脚本,日常交给它托管
  • 提升ZEN效果的7个实用技巧:中文NLP微调经验大公开
  • roop-unleashed:无需训练的完整视频换脸指南
  • 小红书数据采集工具 xhs:一条命令装完,笔记评论数据 5 分钟到手
  • ncmdumpGUI NCM转MP3转换工具:三步快速上手指南
  • B站硬核会员AI自动答题零门槛上手:bili-hardcore 帮你一次搞定100道专业题
  • 告别生硬滚动与闲置侧键:我如何用 Mac Mouse Fix 调教 macOS 鼠标
  • JavaCEF实战指南:从零到一构建跨平台Java嵌入式浏览器应用
  • Wslay分片消息处理全攻略:如何高效传输超大WebSocket消息而不卡顿
  • 漏洞分析加速器:Huihui-CyberStrike-OffSec-35B-abliterated 如何帮你快速读懂CVE报告?
  • iOS 越狱完整操作指南:6 步跑通从查兼容性到装插件
  • VnCoreNLP模型文件全面解读:7个模型如何协同完成越南语NLP任务?
  • Windows Server网络系统管理实战:从AD域到组策略的运维部署指南
  • 大厂面试为何偏爱C++/Java?Python如何突围?