【手写3D激光SLAM】原版fastlio2流程梳理
目录fastlio2介绍fastlio2依赖库ikd-tree流形计算库IKFOMeigen3sophuspcl1.12fastlio2编译方式fastlio2代码框架论文内容介绍代码总体框架数据预处理和打包IMU初始化与状态传播误差状态卡尔曼滤波器ESKFESKF代码解析建图与⾥程计发布ikdtree介绍kd-tree的近邻搜索kd-tree的特点地图管理点的插⼊点的删除再平衡fastlio2介绍香港大学MaRS实验室论文(IEEE-RAL,TRO) 高计算效率、高鲁棒性的雷达惯性里程计 紧耦合迭代卡尔曼滤波融合IMU和LiDAR FAST-LIO2在FAST-LIO基础上提出了ikdtree 数据结构 实现增量式的地图更新 代码已开源至Github。与其它开源框架相比具有更优越的表 现精度、计算速度 是目前最先进的开源LIO框架之一 涵盖流形、李群李代数、IMU积分、雷达残差、卡尔曼滤波等多方位的知识 学会FAST-LIO有助于理解其它多传感器融合框架 代码可读性较好适合初学者上手。原版代码https://github.com/hku-mars/FAST_LIOfastlio2依赖库ikd-treehttps://github.com/hku-mars/ikd-Tree下载源码放在/include/ikdtree目录下。流形计算库IKFOM局部具有欧⼏⾥得空间性质的空间,在数学中⽤于描述⼏何形体,我们所能观察到的数据实际上是由⼀个低维流形映射到⾼维空间上的即这些数据所在的空间是“嵌⼊在⾼维空间的低维流形”,流形是⼀个“空间”⽽不是⼀个“形状”.eigen3sudo apt-get updatesudo apt install libeigen3-dev安装后文件通常位于/usr/local/include/eigen3sophus在Eigen基础上提供李群、李代数运算安装方法如下git clone https://github.com/strasdat/Sophus.git cd Sophus git checkout a621ff mkdir build cd build cmake ../ -DUSE_BASIC_LOGGINGON make sudo make installpcl1.12sudo apt update sudo apt upgrade -ysudo apt install cmake git libpcl-devfastlio2编译方式ros1的catkin_make编译后续需要修改为cmakelists.txt的传统通用编译方式便于定制化管理与部署。cd ~/$A_ROS_DIR$/src git clone https://github.com/hku-mars/FAST_LIO.git cd FAST_LIO git submodule update --init cd ../.. catkin_make source devel/setup.bashfastlio2代码框架论文内容介绍1 雷达点云预处理点云累积、特征提取2 IMU数据前向传播、反向传播、运动补偿3 状态估计模块残差计算、迭代更新4 发布⾥程计、更新地图Fast-lio2与Fast-lio1的区别1 省略了特征提取模块2 只计算⾯点残差3 添加了对外参的优化4 添加ikdtree数据结构代码总体框架laserMapping.cpp: 主函数负责统筹所有进程接收话题建图可视化IMU_Processing.cpp: IMU前向传播、反向传播把传播后的状态量、协方差矩阵、点云返回laserMappingpreprocess.cpp: 对点云进行预处理格式转换use-ikfom.hpp: 状态量的定义生成前向传播的状态转移矩阵esekfom.hpp: 广义加减法定义前向传播函数计算残差以及雅可比eskf主函数。数据预处理和打包IMU初始化与状态传播误差状态卡尔曼滤波器ESKF传统EKF的运动⽅程和观测⽅程xkf(xk−1,uk) wkzkh(xk) vk误差状态卡尔曼滤波器的运动⽅程和观测⽅程kf(k−1 ,uk) wkzkh(k) vk即上式把x⽤代替。有了误差量的估计再通过x⊞计算最优估计。这将带来以下好处ESKF的状态变量可以采⽤最⼩化的参数表达⽽传统KF需要⽤到四元数(4维)或者更⾼维的表达(旋 转矩阵9维) ESKF总是在原点附近离奇异点较远并且也不会由于离⼯作点太远⽽导致线性化近似不够的问题 ESKF的状态量为⼩量其⼆阶变量相对来说可以忽略。⼤多数雅可⽐矩阵在⼩量情况下变得⾮常简单甚⾄可以⽤单位阵代替。ESKF代码解析建图与⾥程计发布ikdtree介绍Kd-TreeK-dimensional tree是⼀种⾼维索引树形数据结构经常使⽤于在⼤规模的⾼维数据空间进⾏最近邻查找。 kd树结构类似于⾼维的⼆叉树树中存储的是⼀些K维数据。kd-tree的构建步骤1 对数据在每个维度的⽅差进⾏计算选取⽅差最⼤的维度作为划分维度kv;2 计算数据在kv维度的中位数根据中位数将数据划分为2个⼦集在kv维度上⼩于等于中位数的3 数据放⼊左边⼦集⼤于中位数的数据放⼊右边⼦集;4 对每个⼦集重复1,2步骤直⾄⼦集不能再划分为⽌kd-tree的近邻搜索1 从根节点开始对各个节点进⾏访问直⾄访问⾄叶⼦结点计算与叶⼦节点内数据的距离2 访问过程在节点的维度与节点的划分⼤⼩进⾏⽐较3 因为每次访问时只在⼀个维度⽐较⼤⼩所以此时得到的最近点并不⼀定为最⼩距离的点未被访 问的分⽀内话可能存在距离更⼩的点。还需要对未被访问的分⽀进⾏回溯4 进⾏回溯操作判断其⽗节点下未被访问过的分⽀⾥是否还有更近的点如果有进⾏同样操作并更新距离回溯的判断过程是从下往上进⾏的直到回溯到根结点时已经不存在与P更近的分⽀为⽌kd-tree的特点数据为多维数据不同树节点根据不同维度进⾏数据划分⽗节点将所有数据划分⾄左右⼦树叶⼦节点包含所有数据适⽤于动态程度不⾼的数据插⼊删除不⽅便不是动态增量式的结构每次需要重新构建kdtreeA-LOAMkdtree的深度会影响搜索速度在建图过程中树的结构可能不平衡地图管理地图由ikd-tree组成仅保留当⻓度为L的⼤⽴⽅体的点云当探测球体触碰到边界时地图沿接触的边界⽅向移动橙⾊部分的点云被删除并新增点云点的插⼊1 ⾸先将整个空间体素化并明确新点落⼊哪个体素2 然后向ikd-Tree查询⽬标体素内是否已经有点以及有哪些点3 如果已经有点了将已有点和新点⼀起排序找出离体素中⼼最近的那个点然后做判断如果最 近的点是已有点意味着新点⽆必要再插⼊了结束处理如果最近的点是新点则把已有点全部 标记删除并插⼊新点如果体素内尚不存在点则直接插⼊新点。点的删除1 从根节点开始在每个节点处⾸先判断节点⾃⾝是否在灰⾊区域内若是则标记删除deletedtrue2 判断两个⼦节点的range是否与删除区域有交叉若⽆则直接剪枝3 若有则重复上述过程4 直⾄搜索完所有的⼦节点完成所有被删除节点的标记删除5 每次增量操作之后对treesizeinvalidnumrangetreedeleted进⾏更新6 被删除的节点不会⽴即删除⽽是令deletedtrue最后在re-balancing环节删掉再平衡如果需要重建的(sub)tree规模很⼤,重建时间花销不可忽略如果在主线程中执⾏重建就会导致ikd-Tree⼀直被占⽤外部的SLAM/LIO算法⽆法访问ikd-Tree执⾏查询或增删操作,导致算法阻塞。 针对这种情况ikd-Tree采取了⼀种双线程策略。耗时的重建过程在额外的线程中执⾏主线程仍 旧对外提供查询和增删服务其中涉及到“正在重建的(sub)tree”的增删操作会被额外缓存到⼀个叫 作OperationLogger的容器中待额外线程中完成了重建后会从OperationLogger把增删操作“补作 业”到新的(sub)tree上这样就确保了新的(sub)tree没有漏掉任何过程最后把新⼦树替换到相应位置。

相关新闻

Windows APK安装器终极指南:3分钟在电脑上安装安卓应用的完整方案

Windows APK安装器终极指南:3分钟在电脑上安装安卓应用的完整方案

Windows APK安装器终极指南:3分钟在电脑上安装安卓应用的完整方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否想在Windows电脑上轻松运行安卓应用…

2026/8/4 20:58:23 阅读更多 →
Depth-Anything-V2在边缘设备部署中的TensorRT优化实践

Depth-Anything-V2在边缘设备部署中的TensorRT优化实践

Depth-Anything-V2在边缘设备部署中的TensorRT优化实践 【免费下载链接】Depth-Anything-V2 [NeurIPS 2024] Depth Anything V2. A More Capable Foundation Model for Monocular Depth Estimation 项目地址: https://gitcode.com/gh_mirrors/de/Depth-Anything-V2 单目…

2026/8/4 20:58:23 阅读更多 →
CRM和客户管理软件有区别吗?概念边界清晰解读

CRM和客户管理软件有区别吗?概念边界清晰解读

刚接触企业数字化的老板和销售管理者,常常会遇到一个灵魂拷问:我花几百块买个能存客户电话、记跟进备注的客户管理软件,和动辄几千上万的CRM,到底有什么区别? 不少企业踩过这个坑:图便宜买了个“客户管理软…

2026/8/4 20:58:23 阅读更多 →

最新新闻

鸣潮自动化工具ok-ww:让你的游戏时间真正回归乐趣本身

鸣潮自动化工具ok-ww:让你的游戏时间真正回归乐趣本身

鸣潮自动化工具ok-ww:让你的游戏时间真正回归乐趣本身 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否也曾经历过…

2026/8/4 21:34:38 阅读更多 →
Tailwind Traders架构解析:从前端到后端的Azure云服务集成全景

Tailwind Traders架构解析:从前端到后端的Azure云服务集成全景

Tailwind Traders架构解析:从前端到后端的Azure云服务集成全景 【免费下载链接】TailwindTraders 项目地址: https://gitcode.com/gh_mirrors/ta/TailwindTraders Tailwind Traders是一个基于Azure云服务构建的现代化电商平台,通过整合前端应用与…

2026/8/4 21:34:38 阅读更多 →
KDBush:2D点的终极静态空间索引库,让搜索速度提升10倍!

KDBush:2D点的终极静态空间索引库,让搜索速度提升10倍!

KDBush:2D点的终极静态空间索引库,让搜索速度提升10倍! 【免费下载链接】kdbush A fast static index for 2D points 项目地址: https://gitcode.com/gh_mirrors/kd/kdbush KDBush 是一款基于扁平 KD 树的超快速 2D 点静态空间索引库&…

2026/8/4 21:34:38 阅读更多 →
如何一键获取Steam游戏清单:终极免费工具完整指南

如何一键获取Steam游戏清单:终极免费工具完整指南

如何一键获取Steam游戏清单:终极免费工具完整指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 你是否曾经想要备份心爱的Steam游戏却无从下手?面对复杂的API接口和技术…

2026/8/4 21:34:38 阅读更多 →
终极指南:如何在电脑上免费畅玩Switch游戏?Ryujinx模拟器完整使用教程

终极指南:如何在电脑上免费畅玩Switch游戏?Ryujinx模拟器完整使用教程

终极指南:如何在电脑上免费畅玩Switch游戏?Ryujinx模拟器完整使用教程 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想要在Windows、Linux或macOS电脑上体验《…

2026/8/4 21:34:38 阅读更多 →
OSMnx在NVIDIA Jetson (aarch64) 环境安装完整指南

OSMnx在NVIDIA Jetson (aarch64) 环境安装完整指南

从零开始在ARM架构设备上搭建OSMnx地理数据处理环境,踩坑实录与完整解决方案 📌 前言 最近在做一个项目,需要在NVIDIA Jetson设备上使用OSMnx(OpenStreetMap eXtraction)库来获取道路数据。本以为只是一个简单的 pip …

2026/8/4 21:33:37 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →