一文详解激光SLAM框架LeGO-LOAM
作者介绍:Zach,移动机器人从业者,热爱移动机器人行业,立志于科技助力美好生活。
LOAM存在的问题
LeGO-LOAM全称为:Lightweight and Groud-Optimized Lidar Odometry and Mapping on Variable Terrain,从标题可以看出 LeGO-LOAM 为应对可变地面进行了地面优化,同时保证了轻量级。
LeGO-LOAM是专门为地面车辆设计的SLAM算法,要求在安装的时候Lidar能以水平方式安装在车辆上;如果是倾斜安装的话,也要进行位姿转换到车辆上。而LOAM对Lidar的安装方式没有要求,即使手持都没有关系。
作者的实验平台是一个移动小车(UGA),挂载了一个Velodyne VLP-16 线激光雷达,还配有一个低精度的 IMU;选用的硬件平台是 Nvidia Jetson TX2(ARM Cortex-A57 CPU);整体负载是 20Kg;移动速度为:2.0m/s;测试场景为:地面不平(比较颠簸)的草地。
图1 硬件平台
LOAM框架在这样的硬件环境和使用场景中会存在一些问题:
由于搭载的是嵌入式系统,计算能力将会受限,LOAM的计算需要将难以满足,致使无法做到实时;
如果使用LOAM框架,系统计算每个点曲率的处理频率(数据量很大,VLP-16一条线是1800个点)将难以跟上传感器的更新频率;
UGA行驶的路面是非平滑连续的(运动是颠簸的),采集的数据将会失真(运动畸变,匀速运动模型无法适用于颠簸场景),使用LOAM很难在两帧之间找到可靠的特征对应。
在噪杂的环境中操作UGV也会给LOAM带来一些挑战,例如:浮动的草丛和摆动的树叶的点云将被误提取为角点或面点,这些特征是不可靠的,难以在连续帧之间获取准确的匹配,从而会造成较大的漂移。
LeGO-LOAM的设计思路
对地面点云的配准主要使用的是面点特征;在分割后的点云配准主要使用的是边缘点和面点特征。从中可以看出使用边缘点的数量是要远小于平面点的数量,这也是能实现加速的主要原因。
LeGO_LOAM的软件系统输入 3D Lidar 的点云,输出 6 DOF 的位姿估计。整个软件系统分为 5 个部分:
第一部分:Segmentation: 这一部分的主要操作是分离出地面点云;同时对剩下的点云进行聚类,滤除数量较少的点云簇。
第二部分:Feature Extraction: 对分割后的点云(已经分离出地面点云)进行边缘点和面点特征提取,这一步和LOAM里面的操作一样。
第三部分:Lidar 里程计: 在连续帧之间进行(边缘点和面点)特征匹配找到连续帧之间的位姿变换矩阵。
第四部分:Lidar Mapping: 对feature进一步处理,然后在全局的 point cloud map 中进行配准。
第五部分:Transform Integration: Transform Integration 融合了来自 Lidar Odometry 和 Lidar Mapping 的 pose estimation 进行输出最终的 pose estimate。
LeGO-LOAM的算法细节
图3 噪声环境中一条scan的特征提取过程
A. Segmentation
提取地面点之后,再对剩下的距离图像进行聚类(分簇),过滤掉点云数量小于 30 的点云簇,对保留下来的点云簇分配不同的标签。地面点云属于特殊的一类点云簇(一开始我们就提取出来了)。对点云进行聚类再处理,可以提高运行效率和提取更稳定的特征。例如,小车运行于嘈杂的环境,树叶将会产生不可靠的特征,相同的叶子不太可能在连续两帧扫描中看到。图3(a)是原始点云,包含了很多植被点云;经过处理之后变成了图3(b),只剩下大物体点云,例如:树干。地面点云将被保留以作进一步处理。此时,保留下来的每个点将具备三种属性:(1)点云的标签;(2)在距离图像中的行列数;(3)距离值。
B. Feature Extraction
这一步主要是从地面点云和分割出来的点云中提取特征,与LOAM中的操作一样。主要要搞清楚几个特征点集合的概念。
为了从各个方向均匀地提取特征,我们将距离图像水平分割成几个相等的子图像,将360°均匀分成6等分,每一等分的精度是 300 \times 16(因为VLP-16线Lidar,一条scan是1800个点)。
计算子图中每一行的点的曲率值,对曲率值进行排序分类,> Cth,分为边缘点特征;< Cth 分为面点特征。设置以下几个集合(论文中这部分语句相近,以下是我个人的理解,可能不准确):
C. Lidar Odometry
1)Label Matching:LeGO-LOAM对点云进行了聚类分簇,不同的点云簇具有不同的Label。Label 信息可以作为两帧匹配的约束条件,连续两帧之间只有同类标签点云簇才能进行配准。这种方式可以提高配准的精度和效率。
D. Lidar Mapping
LeGO-LOAM的性能表现
作者为测试LeGO-LOAM的性能,设计了一系列的实验来对比LeGO-LOAM和LOAM的表现性能。
作者在户外的小场景和大场景中,分别对LeGO-LOAM和LOAM测试平台执行激烈和平缓的控制,来查看两者的建图效果和效率。
在小场景的激烈运动过程中:LOAM 会把草丛、树叶提取为边缘点特征(草丛和树叶是不稳定特征的主要来源);而LeGOU-LOAM会过滤掉这些不稳定的特征,只会在树干,地面,台阶等上提取稳定特征。如下图所示(绿色是边缘点,粉色是面点):
在LOAM框架中,剧烈的运动容易造成点云地图的发散,如下图中(a)LOAM,有三个树干。
作者在大场景的都市环境(是一个学校,不同地点的海拔误差在19m之内)里也进行多种测试以验证建图的精度,有人行道,水泥路,土路和草丛。
LOAM 在人行道上的建图效果并不好,可能是一端存在树木叶子的干扰,如下图所示:
在其他三种场景中,LeGO-LOAM的偏差(终点相对于初始位置的偏差)表现都要优于LOAM。
整个测试的结果如下:
特征点数量对比:LeGO-LOAM特征点整体下降幅度超过:29%,40%,68%,72%。
迭代次数对比:里程计的迭代次数降低了34%,48%。
运行时间对比:降低了 60%
位姿误差对比:LeGOLOAM可以用更少的计算时间实现可比或更好的位置估计精度。
参考资料
https://github.com/RobustFieldAutonomyLab/LeGO-LOAM
备注:作者也是我们「3D视觉从入门到精通」特邀嘉宾:一个超干货的3D视觉学习社区
原创征稿
初衷
3D视觉工坊是基于优质原创文章的自媒体平台,创始人和合伙人致力于发布3D视觉领域最干货的文章,然而少数人的力量毕竟有限,知识盲区和领域漏洞依然存在。为了能够更好地展示领域知识,现向全体粉丝以及阅读者征稿,如果您的文章是3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、硬件选型、求职分享等方向,欢迎砸稿过来~文章内容可以为paper reading、资源总结、项目实战总结等形式,公众号将会对每一个投稿者提供相应的稿费,我们支持知识有价!
投稿方式
邮箱:vision3d@yeah.net 或者加下方的小助理微信,另请注明原创投稿。
▲长按加微信联系
▲长按关注公众号
一文详解激光SLAM框架LeGO-LOAM相关推荐
- 一文详解激光点云的地面分割
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 文章导读 采用传统的点云处理算法做障碍物检测有一个重要的环节就是地面分割,本文介绍各种常用的地面分割方 ...
- 一文详解语义SLAM相关工作
作者丨方川@知乎 来源丨https://zhuanlan.zhihu.com/p/379243930 编辑丨计算机视觉工坊 动态SLAM和语义SLAM 场景中的动态物体不一定是object或不能得到o ...
- 一文详解激光点云的物体聚类
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 文章导读 本文针对自动驾驶中三维点云的道路目标聚类进行讲解,从聚类算法的原理出发,介绍几种常用的点云障 ...
- 一文详解 C++ 日志框架
作者: 一去.二三里 个人微信号: iwaleon 微信公众号: 高效程序员 日志框架 日志框架 - 一个经过专门设计的实用程序,用于规范应用程序的日志记录过程. 日志框架可以自己编写(需要一定的能力 ...
- 六.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---4.laserMapping.cpp--后端建图和帧位姿精估计(优化)
专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...
- 一文详解Mybatis动态SQL,建议收藏
一文详解Mybatis动态SQL,建议收藏 1.动态 SQL 2.IF 3.choose.when.otherwise 4.where 5.set 6.trim 7.SQL片段 8.foreach 1 ...
- 一文详解 ChatGPT:背后的技术,数据,未来发展
文章目录 一文详解 ChatGPT ChatGPT背后的技术 基于 Transformer 的预训练语言模型 提示学习与指令精调 思维链(Chain of Thought,COT) 基于人类反馈的强化 ...
- 一文详解自动驾驶的运行设计域(ODD)| 自动驾驶系列 1
一文详解自动驾驶的运行设计域(ODD)| \n 自动驾驶系列 2021年4月30日,SAE发布了第四版J3016<驾驶自动化分级>,这是即2014年1月16日.2016年9月30日.201 ...
- 详解Android主流框架不可或缺的基石
探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架 ...
最新文章
- 安全漏洞“心脏出血”继续 原因是“丘比特”
- 转 公有密匙 私有密匙
- 别再用假任务做小样本学习实验了!来试试这个全新基准数据集
- [html] 页面中怎么嵌入Flash?有哪些方法?写出来
- 前端学习(2063):vue的生命周期
- 【CV学习4】OpenCV-Python: SIFT Demo one
- 【Android】Listview返回顶部,快速返回顶部的功能实现,详解代码。
- Web服务器(中间件)漏洞
- 《Head First 设计模式》阅读笔记(一)——策略模式
- List的Sort自定义排序实例
- 推荐的开源 PHP CMS 系统
- CRT软件光标不闪烁
- 2021佛山高考成绩查询,2021佛山市地区高考成绩排名查询,佛山市高考各高中成绩喜报榜单...
- 如何简单粗暴的干掉2345主页
- android 10.0 第三方输入法app设置系统默认输入法
- android 实现调查问卷-单选-多选
- 市场调研报告-全球与中国充气帆船市场现状及未来发展趋势
- php模拟登陆正方教务管理系统(thinkPHP5.0)
- FF新推荐弹窗怎么彻底让他爬
- 电脑蓝屏原因?及其解决办法
热门文章
- 科学计算机如何开机,CASIO科学计算机怎么进入EQN模式
- Windows 10如何进行“Windows体验指数评估”?
- mysql 省市县三级联动查询_PHP+AJAX+MYSQL 仿凡客诚品省市县三级联动下拉菜单查询效果...
- LeetCode每日一题——1184. 公交站间的距离
- 苹果电脑上几个专业的数码照片编辑工具
- html2canvas 前端截图工具 iOS15 中截图空白
- 生词生词生词生词[2]
- 互联网故事:从瞧不上到暗暗惊讶,一套商城竞拍系统的开发设计之路!
- 十分钟,用 Python 带你看遍 GDP 变迁
- oracle坏块 戴明明,Oracle数据库问题解决方案和故障排除手册