开源的2D/3Dslam介绍
学习目标:
- 2Dslam介绍
- 3Dslam介绍
学习内容:
1.2Dslam介绍
1.slam_gmapping
Gmapping是应用最为广泛的2D slam方法,主要是利用RBPF(Rao-Blackwellized ParticleFilters)方法,所以需要了解粒子滤波的方法(利用统计特性描述物理表 达式下的结果)。Gmapping在RBPF算法上做了两个主要的改进:改进提议分布和选 择性重采样。
Gmapping可以实时构建室内地图,在构建小场景地图所需的计算量较小且精度 较高。相比Hector SLAM对激光雷达频率要求低、鲁棒性高(Hector 在机器人快速 转向时很容易发生错误匹配,建出的地图发生错位,原因主要是优化算法容易陷入 局部最小值);而相比Cartographer在构建小场景地图时,Gmapping不需要太多的 粒子并且没有回环检测因此计算量小于Cartographer而精度并没有差太多。
随着场景增大所需的粒子增加,因为每个粒子都携带一幅地图,因此在构建大地图 时所需内存和计算量都会增加。因此不适合构建大场景地图。并且没有回环检测,因此 在回环闭合时可能会造成地图错位,虽然增加粒子数目可以使地图闭合但是以增加计算 量和内存为代价。
所以Gmapping不能像cartographer那样构建大的地图,虽然论文生成几万平米的 地图,但实际我们使用中建的地图没有上万平米时就会发生错误。
优点:在长廊及低特征场景中建图效果好;
缺点:依赖里程计(odometry),无法适用无人机及地面小车不平坦区域;无回 环;
下载链接:slam_gmapping - ROS Wiki
2.Hector slam
Hector slam对传感器的要求比较高,它主要是利用高斯牛顿方法来解决scan- matching的问题。
Hector slam无需使用里程计,所以在不平坦区域实现建图的空中无人机及地面小 车具有运用的可行性,利用已经获得的地图对激光束点阵进行优化,估计激光点在地图 的表示,和占据网络的概率。获得激光点集映射到已有地图的刚体变换,为避免局部最 小而非全局最优出现,地图使用多分辨率。
需具备高更新频率且测量噪音小的激光扫描仪,所以,在制图过程中,robot的速 度要控制在较低的情况下才会有比较理想的建图效果,这也是它没有回环的一个后遗 症。另外在里程计数据比较精确的情况下无法有效利用里程计信息。
优点:不需要使用里程计,所以使得空中无人机及地面小车在不平坦区域建图存在 运用的可行性;利用已经获得的地图对激光束点阵进行优化, 估计激光点在地图的表示, 和占据网格的概率;利用高斯牛顿方法解决scan-matching 问题,获得激光点集映射到 已有地图的刚体变换;为避免局部最小而非全局最优,使用多分辨率地图;导航中的状 态估计加入惯性测量系统(IMU),利用EKF滤波;
缺点:需要雷达(LRS)的更新频率较高,测量噪声小。所以在制图过程中,需要 robot速度控制在比较低的情况下,建图效果才会比较理想,这也是它没有回环(loop close)的一个后遗症;且在里程计数据比较精确的时候,无法有效利用里程计信息。
实验表明:在大地图,低特征(distinctive landmarks)场景中,hector的建图误差 高于gmapping。这是由于hector过分依赖scan-match。特别是在长廊问题中,误差更加 明显。
补充:hector_slam通过最小二乘法匹配扫描点,且依赖高精度的激光雷达数据, 因此扫描角很小且噪声较大的Kinect是不行的,匹配时会陷入局部点,地图比较混乱。
下载链接:https://github.com/tu-darmstadt-ros-pkg/hector_slam
3.karto slam
KartoSLAM是基于图优化的方法,用高度优化和非迭代 cholesky矩阵进行稀疏系 统解耦作为解,图优化方法利用图的均值表示地图,每个节点表示机器人轨迹的一个位 置点和传感器测量数据集,箭头的指向的连接表示连续机器人位置点的运动,每个新节 点加入,地图就会依据空间中的节点箭头的约束进行计算更新.
KartoSLAM的ROS版本,其中采用的稀疏点调整(the Spare Pose Adjustment(SPA))与扫描匹配和闭环检测相关。landmark越多,内存需求越大,然而图 优化方式相比其他方法在大环境下制图优势更大,在某些情况下KartoSLAM更有效,因为 他仅包含点的图(robot pose),求得位置后再求map。
下载链接:GitHub - ros-perception/slam_karto: ROS Wrapper and Node for OpenKarto
4.lago slam
LagoSLAM是线性近似图优化,不需要初始假设,优化器的方法可以有三种选择 Tree-based netORK Optimizer(TORO), g2o,LAGO。
基本的图优化slam的方法就是利用最小化非线性非凸代价函数,每次迭代,解决局 部凸近似的初始问题来更新图配置,过程迭代一定次数直到局部最小代价函数达到, (假 设起始点经过多次迭代使得局部代价函数最小)。
5.core slam
为了简单和容易理解最小化性能损失的一种slam算法,将算法简化为距离计算与地 图更新的两个过程,第一步,每次扫描输入,基于简单的粒子滤波算法计算距离,粒子 滤波的匹配器用于激光与地图的匹配,每个滤波器粒子代表机器人可能的位置和相应的 概率权重,这些都依赖于之前的迭代计算. 选择好最好的假设分布,即低权重粒子消 失,新粒子生成,在更新步骤,扫描得到的线加入地图中,当障碍出现时,围绕障碍 点绘制调整点集,而非仅一个孤立点。
通过在大小仿真环境、实际环境以及CPU消耗的情况下进行算法比较,发现 KartoSLAM 与gmapping优势更大。
下载链接:https://github.com/WestTeam/CoreSLAM
6.cartographer
cartographer是通过闭环检测来消除构图中产生的累计误差。用于闭环检测的基本 单元是submap,一个submap由一定数量的laser scan组成,将一个laser scan插入到 其对应的submap时,会基于submap已有的laser scan及其传感器数据估计其在 该submap中的最佳位置。然而随着时间推移,越来越多的submap被创建后,submap 的累计误差会越来越大,因此需要通过闭环检测适当的优化这些submap的位姿进而消 除这些累计误差,这就将问题转化为一个位姿优化问题。
当一个submap的构建完成时,也就不会有新的laser scan插入到submap中,该 submap就会加入到闭环检测中,闭环检测会考虑所有的已完成创建的submap,当一个 新的submap加入到地图中时,如果该laser scan的估计位姿与地图中某个submap中的 某个laser scan的位姿比较接近的话,那么通过某种scan match策略就可以找到该闭 环。cartographer中的scan match策略通过在新加入地图中的laser scan的估计位姿附近 取一个窗口,进而在该窗口内寻找该laser scan的一个可能匹配,如果找到哟个足够好 的匹配,则将该匹配的闭环约束加入到位姿优化的问题中。
优点:累计误差较低,能天然的输出协方差矩阵,后端优化的输入项。成本较低的 雷达也能跑出不错的效果。
缺点:CPU性能要求教高。
下载链接:https://github.com/cartographer-project/cartographer
2.3D激光slam
1.loam
LOAM 实现 了 一种实时激光里程计并建图的算法,使用的硬件是一个三维空间中运 动的两轴单线激光雷达.
两轴单线激光雷达,就是在水平方向和垂直方向的单线雷达在两个方向不断变换形 成点云,其中每个点的时间戳则不同.
现在主流用的velodyne 的16线\32线的则是 在一个垂直方向上有 16\32个点,它们有相同 的时间戳,在水平方向时间戳则是递增的.这个算法同样可以用于16线的lidar
实现功能的难点:
这个问题困难的原因是由于点云不是相同时间获得的,并且运动畸变会导致点云的位置出 现错误.这种错误也会造成匹配时的问题,也就造成了里程计信息估计的错误
目前一致性比较好的3d地图都是通过离线的方式获得的.通常还会通过回环检测来消除累 计误差.回环检测目前是 VSLAM和LSLAM中,消除累计误差比较好的手段.因为里程计肯 定会有累计误差的
LOAM的优点:
LOAM方法实现了低的漂移,并且计算的复杂度低,实时性很好.并且不需要高精度的lidar 和惯导.
2.A-LOAM
A-LOAM是香港科技大学、华为天才少年秦通博士对张绩的LOAM框架进行强化的 一个激光SLAM框架。作为学习激光SLAM的入门框架,A-LOAM的代码可读性和框架思 路都值得激光SLAM初学者仔细研读。这个框架使⽤Eigen以及Ceres-Solver对原始 LOAM进⾏重构,在保证算法原理不变的前提下,对代码框架进⾏优化,使得代码变得 ⼗分简洁,更加容易被读懂。
下载链接:GitHub - HKUST-Aerial-Robotics/A-LOAM: Advanced implementation of LOAM
3.LeGO-LOAM
LeGO-LOAM全称为:Lightweight and Groud-Optimized Lidar Odometry and Mapping on Variable Terrain,从标题可以看出 LeGO-LOAM 为应对可变地面进行了地 面优化,同时保证了轻量级。
LeGO-LOAM是专门为地面车辆设计的SLAM算法,要求在安装的时候Lidar能以 水平方式安装在车辆上;如果是倾斜安装的话,也要进行位姿转换到车辆上。而LOAM 对Lidar的安装方式没有要求,即使手持都没有关系。
下载链接:GitHub - RobustFieldAutonomyLab/LeGO-LOAM: LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain
4.Lio-mapping
在利用3D LiDAR进行SLAM计算时,有时会遇到一些问题,例如两帧之间的运动较 为剧烈(大转角)可能会导致点云配准算法失效,在某些场景如长廊场景下有效测量点云 较少使运动估计精度下降等,这些现象影响了SLAM算法的鲁棒性。而IMU(Inertial Measurement Unit)作为一种惯性测量单元,可以精确地测量载体的三轴加速度以及三 轴角速度,在上述的场景中(大转角,长廊环境)可以为LiDAR提供额外的先验信息,从 而增强LiDAR算法的鲁棒性,因此LiDAR-IMU fusioin成为一种近年来备受关注的SLAM 方法。
LIO-Mapping借鉴LOAM和VINS-Mono的思想进行的一个联合状态估计问题。工程 层面和VINS-Mono一样,只不过前端视觉部分换成了lidar的前端进行特征关联和 odometry的位姿估计。其主要分为两个部分:tightly coupled lidar-IMU odometry与the rotation constrained refinement
下载链接:GitHub - hyye/lio-mapping: Implementation of Tightly Coupled 3D Lidar Inertial Odometry and Mapping (LIO-mapping)
5.hdl_graph_slam
hdl_graph_slam是由日本风桥科技大学的Kenji Koide在github上开源的六自由度 三维激光SLAM算法。主要由激光里程计、回环检测以及后端图优化构成,同时融合了 IMU、GPS以及地面检测的信息作为图的额外约束。
下载链接:GitHub - koide3/hdl_graph_slam: 3D LIDAR-based Graph SLAM
6.BLAM
仅用激光的SLAM算法,前端使用GICP,后端使用GTSAM,效果还不错,回环速 度快。
下载链接:GitHub - erik-nelson/blam
7.SegMap
利用3D CNN语意信息的3D激光SLAM框架,在某些场景比传统SLAM更具有优势。
下载链接:GitHub - ethz-asl/segmap: A map representation based on 3D segments
8.SuMa
使用Surfel地图去实现前端里程计和闭环检测,此前Surfel地图曾被用在RGBD- SLAM中,第一次见到被用在激光SLAM中,很值得大家去了解学习。
下载链接:https://github.com/jbehley/SuMa
9.Suma++
在SuMa基础上,利用RangeNet++过滤动态信息,提升定位建图精度。
下载链接:GitHub - PRBonn/semantic_suma: SuMa++: Efficient LiDAR-based Semantic SLAM (Chen et al IROS 2019)
开源的2D/3Dslam介绍相关推荐
- OpenGL教程 用2D图形介绍OpenGL
OpenGL教程 用2D图形介绍OpenGL 1.设置OpenGL 要设置OpenGL,取决于您的编程平台,请阅读: 如何在C / C ++中编写OpenGL程序. 如何在Java中编写OpenGL程 ...
- 开源中文切词工具介绍
开源中文分词工具介绍 这里介绍常用的开源中文分词工具,大部分是java实现.如果是java生产环境,建议使用ansj.word或HanNlp. Bakeoff是一个国际中文处理比赛,有多个语料,所以每 ...
- node python做游戏服务哪个适合做服务端_当前的几种开源游戏服务端介绍
当前的几种开源游戏服务端介绍 pomelo Pomelo 是基于 Node.js 的高性能.分布式游戏服务器框架.它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复 ...
- 简账(开源记账软件)-功能介绍
文章目录 简账(开源记账软件)-功能介绍 前言 一.主要技术栈简介 二.主要功能 三.项目难点 四.总结 简账(开源记账软件)-功能介绍 前言 由于自己有记账的需求,在尝试使用过市面上的记账软件后,发 ...
- FPGA开源网站和论坛介绍
学习FPGA,找不到资料?-FPGA开源网站和论坛介绍 碎碎思 目录 学习FPGA,找不到资料?-FPGA开源网站和论坛介绍 1.25个FPGA开源网站 1.1 http://OPENCORES.OR ...
- AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍
AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍 深度学习框架 深度学习框架优势 深度学习框架设计思路 飞桨开源深度学习平台 飞桨开源深度学习平台全景 框架和全流程工具 模 ...
- COSCon21 开源文化 (GL) 论坛介绍
" 点击蓝字 / 关注我们 " | 作者.编辑:袁睿斌 | 设计:朱亿钦.宋传琪 第六届中国开源年会 (COSCon'21) 将于 10月30-31日 由开源社举办. 本次年会重新 ...
- 600多个iOS开源项目分类及介绍
600多个iOS开源项目分类及介绍 详情见:http://github.ibireme.com/github/list/ios/
- 条形码/二维码之开源利器ZXing图文介绍
全文目录: 基本介绍 二维码(比如:QRCode)的编码和解码演示 条形码(比如:EAN-13)的编码和解码演示 [一]. 基本介绍 : 1-1. ZXing是一个开源Java类库用于解析多种格式的条 ...
最新文章
- SAP CRM and C4C PDF print
- switch芯片和phy芯片的区别_感应式芯片卡CPU卡的FM1208-9和FM1208-10有什么区别,你知道吗?...
- java共享内存_Java共享内存
- 学习笔记5-二层冗余链路
- 机器人仿真软件介绍(V-REP,ROS等等)
- CAD图纸一键共享,永久轻松办公!
- 分享一个十二色相环取色RGB颜色值与十六进制色码转换工具
- matlab数字转换罗马数字,罗马数字(1到1000) 1到1000的叠加是多少
- 解决以太网IPv4无网络访问权限
- 机器人视觉硬件方案设计对比
- 基于PHP+MYSQL的成绩查询系统(含源码)
- 【Leetcode_SQL】1179.重新格式化部门表
- 遗传算法(包含选择、交叉、变异) MATLAB完整代码 中文注释详解
- 自然语言处理--词向量
- parameterType的用法
- 长续航高性价比,轻松畅享好音质 ——索尼长续航颈挂式无线耳机WI-C100活力发布
- 人生启示录效应篇之破窗效应:及时矫正和补救正在发生的问题
- CVPR 2022 | 浙大提出Oriented RepPoints:旋转目标检测网络
- 红米9A android版本,红米9A配置参数-参数详情
- java注册码生成,制作绿色软件
热门文章
- 基于C#制作一个鼠标连点器
- 离散数学_数理逻辑篇(总结)
- vue 导航守卫(一) 之 全局前置守卫全局后置守卫
- 爱奇艺八年:“好人”龚宇和“宽容先生”李彦宏
- 律理(五)----关于“单句中平仄的宽严关系”
- linux var log目录作用,Linux系统/var/log/journal/垃圾日志清理 - 米扑博客
- Java调用发微博API_编写调用新版浪微博API的Java程序来发送微博
- 【自然语言处理】【chatGPT系列】大语言模型可以自我改进
- Google's BBR TCP拥塞控制算法的四个变速引擎
- 如何提升领导力,管理好一个团队