loam框架的注意点,公式推导细节,lego-loam对其的改进及自身不足,

article/2025/9/2 22:15:07

目录

前端流程及注意细节:

总体结构:

特征提取部分:

特征关联匹配部分:

最小二乘优化部分:

后端部分:

lego-loam对其的改进:


前端流程及注意细节:

总体结构:

1.激光slam框架loam的流程图如下。slam的过程使用帧间匹配作为里程计,但在实际工程应用中,可以与先验地图做匹配实现定位,免去了不必要的建图流程(但又会牵扯出地图更新问题,即long-term slam)。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKM6YGT5LiA5paH5a2XXw==,size_20,color_FFFFFF,t_70,g_se,x_16

特征提取部分:

2.loam利用机械式多线激光雷达模型,将点云投影到为透视图,这样在单帧点云中,进行临近搜索和计算的效率会特高很多。

3.投影的方式有两种:

1)可根据点云坐标解算每个点所属的行和列,这样计算量大,对16线雷达(如velodyne16线的行/扫描线夹角为2°)的效果尚可,但随着线数增多,可能会出现解算错误(单个点甚至会算错2行)。

2)对于直接在点云数据中提供行号的雷达,可通过雷达驱动自带的点云格式中,直接读取每个点的行号,避免了计算量和计算错误。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKM6YGT5LiA5paH5a2XXw==,size_20,color_FFFFFF,t_70,g_se,x_16

4.下图为每个点曲率的计算公式(看着很复杂),但实际的代码中,就是计算了每根扫描线上的二维曲率(即前后各5个点形成的夹角)。

5.还对一些异常点做了剔除处理。如遮挡严重的B1和间断点A2。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKM6YGT5LiA5paH5a2XXw==,size_20,color_FFFFFF,t_70,g_se,x_16

6.下来对提取到的特征按照曲率大小进行分类,分类平面点和边缘点。细分为以下四类是为了匹配和后端建图使用。即匹配使用特征点ac,bd则为对应关联的线和面特征点,且建图时使用的是bd。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKM6YGT5LiA5paH5a2XXw==,size_20,color_FFFFFF,t_70,g_se,x_16

特征关联匹配部分:

7.前端里程计仅使用相邻帧间匹配。

8.首先将当前时刻k+1的特征点投影到k时刻(根据一个预估的R,t)特征所在的坐标系,投影之后的点记为X^。

9.通过关联最临近边缘和面特征来计算残差,使得残差最小的Rt即为帧间位姿变换:

1)边缘点:对于当前帧投影而来的点i,寻找上一帧点云中对应的最临近点j(使用kdtree),并在上一帧点云中的上或下相邻行,找相邻j最近的点l,计算点i到线jl的距离,即为线特征的残差;

2)平面点:对于当前帧投影而来的点i,寻找上一帧点云中对应的最临近点j(使用kdtree),再在同一行找距离j最近的点l,并在上一帧点云中的上或下相邻行,找相邻j最近的点m,计算点i到jlm构成的面的距离,即为面特征的残差;

注意:此处仅点i为当前帧的特征点云,其余皆为上一帧的特征点云。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKM6YGT5LiA5paH5a2XXw==,size_20,color_FFFFFF,t_70,g_se,x_16

10.上一步构建完误差损失函数。下来具体的计算,需要代入预设好的位姿变换Rt。

11.此处公式中对旋转的参数描述使用的欧拉角(公式和代码会比较繁琐,现在多用四元数形式计算),旋转顺序为z->x->y。写成对应的矩阵形式,最后的损失函数如下。

12.这里需要注意的是参数符号的变化,带^的为转换到同一坐标系下的坐标,不带的为在自身雷达坐标系下的坐标(可直接读取点云获得)。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKM6YGT5LiA5paH5a2XXw==,size_20,color_FFFFFF,t_70,g_se,x_16

最小二乘优化部分:

13.使用LM进行最小二乘优化,重点在求损失函数的雅克比矩阵上。

14.求解过程如下,先将求导公式链式分解为两部分。

15.第一部分直接求导很麻烦,可根据其物理意义求:

思路跳出这个公式,我们通常对D求X的偏导数,意思是求X如何变化,能让D的改变最大,即为D的数值的梯度方向(梯度方向即为变化最大的方向)。

由D(即点到线和点到面的距离)的物理意义可知,垂直(梯度)方向即为误差D变化最大(优化减小到0)的方向。

16.实际计算中,线面特征误差的梯度方向,皆可通过上述关联点的坐标构建向量,计算向量投影得到。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKM6YGT5LiA5paH5a2XXw==,size_20,color_FFFFFF,t_70,g_se,x_16

17.下来就是对雅克比分解的第二项求导,即投影点坐标对6个自由度分量分别求导。计算规则如下,整合形式如红笔所写。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKM6YGT5LiA5paH5a2XXw==,size_20,color_FFFFFF,t_70,g_se,x_16

后端部分:

1.每10帧点云里选一帧,与之前建好的地图做匹配,地图分为一个个cube块。在cube内做关联和更新。

2.由于之前所有帧都叠加在了一起,没有上一帧和行号的概念,就是用kdtree进行粗暴的搜索,找地图中最临近的5个点,计算点到线和点到面的残差。

3.此处的代码中,线方程使用PCA主成分分析法求,面方程默认搜索到的就是平面点,直接拟合平面方程。

4.构建误差,优化之后得到位姿,将新一帧的特征点云添加到对应的cube中去。

lego-loam对其的改进:

1.进行了地面分割,匹配用的平面特征点只在地面点中寻找。

2.对非地面点进行了dfs聚类,剔除了小于30个点的聚类,相当于去了噪点。

3.在聚类后剩余的非地面点中,提取平面和边缘点,但在匹配时,只选取边缘点。

4.在其论文中,先使用了地面点做匹配,求出了3个自由度,再代入边缘点的匹配中作为初值再计算。两端LM优化。。。但在后期的代码中,又改回了直接优化6自由度的方法(此处无法考证原因,精度?优化效率?)。

5.loam对地图使用栅格,丢失了每一帧的信息,且后端优化中无法对地图做校正。而lego-loam使用每一个关键帧特征点云单独的格式存储地图。这样做既就克服了这两个缺点,此后的升级版lio-sam也是基于此技术,

6.lego-loam的论文中没有说回环检测,但是其代码中加入了回环,方法比较粗暴,对特征直接使用gtsam优化。

7.lego-loam还加入了imu信息的可选项,实验验证,加入imu信息,定位建图的精度和鲁棒性都会好很多,但是其对imu的信息处理为松耦合,比较粗糙,不如lio-sam的紧耦合。(代码中外参设置部分甚至似乎只考虑了旋转,而没有平移)。

完。。。。。。。。。。

矩阵论知识忘了好多,得好好复习下了


http://chatgpt.dhexx.cn/article/vVwF3XOt.shtml

相关文章

神经元振荡中相位幅值耦合的量化:锁相值、平均向量长度、调制指数和广义线性模型交叉频率耦合

相位振幅耦合是研究脑电和脑磁图中认知过程的一个很有前途的方法。由于概念新颖,文献中采用了多种方法来计算相幅耦合。本文利用模拟数据对锁相值(PLV)、平均向量长度(MVL)和调制指数(MI)这三种最常用的相幅耦合测量方法和广义线性模型交叉频率耦合(GLM-CFC)方法的性…

从LVI-SAM来看激光与视觉的紧耦合系统

0.简介 快过年了,这里打算以这一篇博文作为结尾,来迎向2022春节。同时也希望新的一年能够继续不断提升自我。 1. 系统介绍 本文提出了一种紧耦合的雷达视觉惯导SLAM系统,可以实时高精度鲁棒的进行状态估计和建图。 LVI-SAM构建在因子图之上…

武汉大学《GNSS、INS和激光雷达的紧密耦合预积分,用于城市环境中的车辆导航》

摘要 定位和导航的需求不断增长。目前,全球导航卫星系统(GNSS)被认为是全球定位服务的重要手段。然而,由于严重的信号衰减、反射和阻塞,其在城市地区的应用受到了限制。惯性导航系统(INS)可以在…

运放放大倍数计算公式_放大器设计100问

噪声是电子设计中必须处理等信号之一,我们都知道放大器的噪声有两种类型:一种是外部噪声,来源于放大器外部;另一种是内部噪声,来源于器件本身,处理放大器的噪声对于提升电子产品的性能至关重要,这里我们以问答形式对放大器噪声原理进行阐述,并阐述一些如何处理放大器噪…

slam框架:紧耦合激光视觉惯性里程计的统一多模态地标点跟踪

论文题目: Unified Multi-Modal Landmark Tracking for Tightly Coupled Lidar-Visual-Inertial Odometry 紧耦合激光视觉惯性里程计的统一多模态地标点跟踪 参考链接: 【泡泡点云时空】紧耦合激光视觉惯性里程计的统一多模态地标点跟踪 摘要&#…

RF-LIO:面向高动态场景的紧耦合LiDAR惯导融合里程计(IROS 2021)

RF-LIO: 面向高动态场景的紧耦合LiDAR惯导融合里程计 单位:西安交通大学 针对问题: 实际场景中动态因素的引入造成基于静态假设的LIO严重位姿漂移 提出方法: 提出基于自适应的多分辨率Range Image的动态点移除算法,并使用紧耦合的…

经典文献阅读之--Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping(紧耦合3D激光雷达)

0. 简介 传统的地图生成方法一般是依靠Lidar和IMU结合的,但是问题在于,目前Lidar和IMU的紧耦合主要集中在前端里程计,基本没有涉及到后端全局优化以及建图的融合。为此文章《Globally Consistent and Tightly Coupled 3D LiDAR Inertial Map…

MD5加密的应用

简单介绍一下MD5加密的使用方法; MD5的全称是Message-Digest Algorithm 5(信息-摘要算法); 特点是不可逆的,一般解密不了; MD5Util工具类: package com.java.util;import java.io.UnsupportedE…

python md5加密解密_python md5加密解密

md5加密以后的字符串长度 我下了一段用JAVA实现MD5加密的算法,不管输入字符串多长,加密后的字符加密后为128位(bit),按照16进制(4位一个16进制数)编码后,就成了32个字符。MD5并不是加密算法zhidao,而是摘要算法。加密算法是可逆的,摘要算法是理专论上不可逆的,详细…

Java MD5 加密工具类

一、MD5简介 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确…

为什么md5不可逆,却还可能被md5免费解密网站解密

md5在网络安全中起到非常重要的作用,它被用于保证数据的完整性,以及数据不被篡改。同时,md5还被用来进行密码加密。一些朋友不了解为什么md5不可逆,却还可能被号称能解密md5的网站解密。因此,有人说md5不够安全&#x…

matlab中进行多行注释,取消

在MATLAB中可以在行首部加 1 %来进行注释, 2 加%%空格来进行划分不同的程序段。 但在进行多行注释时,针对单行进行操作过于麻烦,可以利用快捷键进行多行注释。 可以先选中需要注释的行,然后按“ctrlR”进行注释, 多…

Matlab多行注释单行程序分行写

2019独角兽企业重金招聘Python工程师标准>>> 一、Matlab注释 1)、单行注释:当然是行首加‘%’了。 2)、多行注释: a、选中你要加注释的内容,然后选择工具菜单“text|comment”就可以了, 快捷键是…

funcode游戏实训,java及C/C++,网上整理

软件,常见错误都有。 所有资源可到公众号获取(源码也是),不再直接分享

funcode环境配置(亲测有效)

vmware 虚拟机版本是15.5.1 虚拟机版本链接 win7专业版镜像文件 迅雷(打开迅雷复制即可) ed2k://|file|cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso|3265574912|E9DB2607EA3B3540F3FE2E388F8C53C4|/ 过程可供参考 vc2012任何版本均可 设置过程: 打…

funcode实验--海底世界(c++实现)

C语言课程设计一海底世界 一、实验内容 海底有若干条鱼,其中若干条相同的鱼向一个方向游动,另一条来回随机游动,由玩家用键盘W A S D控制另外一条游动。 要求如下: 1、 来回游动的鱼,从屏幕左边游进来,…

FunCode太空战机C++实现

仅供交流学习使用,因博主水平有限,有错误欢迎批评指正 作者(即博主本人): Akame Qixisi / Excel Bloonow IDE:Code::Blocks 17.12 编译器需要支持C14或以上标准(Code::Blocks如何设置见附录Ⅰ&…

基于funcode的闯关小游戏(山东省齐鲁软件设计大赛三等奖)给自己留个纪念

背景: (链接文档在最后) 19年的暑假,同学喊我参加山东省齐鲁软件设计大赛,报上名之后有这个funcode课题。d但是从来没有接触过funcode,网上的参考资料也不多,靠着自己摸索和同学交流半懂半做了这…

基于Funcode设计C语言游戏–迷你高尔夫

Funcode设计 文章目录 Funcode设计前言一、Funcode下载地址二、C语言课程设计--迷你高尔夫1.效果图2.部分代码 总结 前言 基于Funcode设计的C语言游戏。 提示:以下是本篇文章正文内容,下面案例可供参考 一、Funcode下载地址 Win10版本 提取码&#xf…

2021年Funcode游戏制作二等奖作品

之前发的有关funcode游戏更多的则是对游戏流程有一个大概的了解,以及如何编写游戏循环,判定游戏的各种触发条件,较为简陋。 这一次看到有人问funcode游戏的制作,就把搁置了许久的 项目拿给大家作为参考建议。 素材来源&#xff1a…