之前看的SC LEGO LOAM的代码,在本篇记录一下,顺便对LEGO LOAM做一下总结。SC LEGO LOAM是在LEGO LOAM的基础上新增了基于Scan context的回环检测,其他流程完全一致,总体看来,scan context还是有一定的作用,主要是在回环检测的速度上有些许提升。整体感觉提升不大,最终精度还是由ICP来保证。这里很多部分和前面一篇LIO-SAM的代码是一致的,重复部分直接略过。

image-20200820220749138

SC-LEGO LOAM项目地址:https://github.com/irapkaist/SC-LeGO-LOAM

个人注释版地址:https://github.com/JokerJohn/opensource_slam_noted

阅读全文 »

scan context是一种用于场景识别点云全局描述符,可以用在SLAM的回环检测。本篇文章发表在2018年IROS上,目前代码已开源。论文题目是Scan Context: Egocentric Spatial Descriptor for Place Recognition within 3D Point Cloud Map。目前基于此,已经出现了一些增强版,比如发表在2020 ICRA上的intesity scan context(ISC)描述符,其repo地址:https://github.com/irapkaist/scancontext.git

点云的全局描述符一般需要解决以下两个核心问题:

  1. 旋转不变性,而不管视角如何变化。

  2. 噪声处理能力,因为点云的分辨率随距离变化,并且法线有噪声。

image-20200907110501074

阅读全文 »

补充LEGO LOAM的论文解读。这里做记录的主要目的也是方便自己查阅,督促阅读。文献管理的软件推荐Mendeley,多平台云同步,非常好用。

image-20200904210534198

LEGO LOAM这篇文章发在18年的IROS上,因为其代码开源以及对设备性能要求低等优点,到现在依然用的比较多。论文里面主要是和LOAM对比,其相比LOAM具有以下三个特点,

  • 轻量级,能在嵌入式设备上实时运行。
  • 地面优化,在点云处理部分加入了分割模块,这样做能够去除地面点的干扰,只在聚类的目标中提取特征。
  • 两步L-M优化法估计6个维度的里程计位姿,匹配方式还是scan2scan。

此文的主要对比对象是LOAM,在以上三点的基础上,还添加了回环检测和后端优化的模块。可以看出,作者的主要思路是基于LOAM并提升其性能。

阅读全文 »

卡尔曼滤波、扩展卡尔曼滤波、无迹卡尔曼滤波是融合多种传感器数据用于状态估计的王牌算法,在自动驾驶定位领域应用广泛。本章主要利用Udacity的一个小案例来梳理KF/EKF/UKF的基本原理及应用方法。项目主要是利用激光雷达数据和毫米波雷达数据来融合完成实时的目标跟踪。这是在二维上的简单案例,需要估计的系统状态变量只有位置、速度(px py vx vy)。传感器的观测量,激光雷达测量的位置(px py),毫米波测量的是距离、角度和角度变化率(rho phi rho_phi)

无人驾驶技术入门(十八)| 手把手教你写扩展卡尔曼滤波器

代码地址:https://github.com/JokerJohn/kalman_filter

阅读全文 »

LIO-SAM是原LEGO-LOAM作者TixiaoShan发表在IROS 2020上的论文 LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping。这是一套Lidar IMU紧耦合的SLAM系统,号称运行速度快10倍,但对传感器要求较高,100hz+的9轴IMU以及带有ringtime通道的激光雷达(velodyne和ouster),其代码最近已开源,并且还在保持迭代更新中。

demo

我跑了一下作者给的数据集,其在手持激光雷达,保持各种姿势旋转的情况下,也能保持稳定的精度,效果确实比较震撼,如图所示。粗略的阅读了代码及论文,其在LEGO-LOAM的框架上做出的改进,主要有以下几点

  • 里程计部分去除scan2scan匹配,改为scan2localmap匹配,特征提取部分去除了原LEGO LOAM中的聚、分割并提取较为突出的边缘点和平面点,而是沿用LOAM中的边缘和平面点。(算不上创新)
  • 维护两个因子图,预积分因子图可优化联合优化激光雷达odom和IMU,并估计IMU偏差,进行实时的里程计估算。全局因子图联合优化雷达odom和GPS因子以及回环因子。(LIO-Mapping中已有)
  • 利用robot_localization中的ekf节点融合GPS和9轴IMU数据,得到提供初始姿态的gps odom。(工程整合)

项目地址:https://github.com/TixiaoShan/LIO-SAM

我的注释版地址:https://github.com/JokerJohn/opensource_slam_noted

image-20200818210634258

阅读全文 »

作者发表在ICRA2020上的论文,Intensity Scan Context: Coding Intensity and Geometry Relations for Loop Closure Detection,论文里面作者提出了一种基于scan context(18 IROS)改进的全局点云描述符,主要是编码了强度信息。ISCLOAM就是在此基础上,用ISC特征描述符做回环检测,完成的一套开源SLAM系统。本篇将从代码的角度进行梳理和分析。

项目地址:https://github.com/wh200720041/iscloam

个人注释版地址:https://github.com/JokerJohn/opensource_slam_noted

image-20200817230820894

阅读全文 »

最近在github上看到了此套系统,看简介说是基于LOAM和ALOAM改进而来,计算时间缩小3倍,精度也有一定提高。本系统只是小提升,并没有相关论文发表。作者加入了一些场景识别的改进,发表在2020年ICRA上,叫ISCLOAM,代码也开源到github,后续单独写一篇进行记录。

image-20200817192800526

我在kitti上跑了一下:

红色的表示ground_truth,绿色的是odom轨迹。

image-20200817193418905

项目地址如下:https://github.com/wh200720041/floam

我的笔记注释如下:https://github.com/JokerJohn/opensource_slam_noted

阅读全文 »

​ 之前一直说总结一下定位模块的,拖到现在才开始,因为最近面试了下,发现这块做的内容已经忘记了不少。主要是基于NDT+UKF的定位方法,主要方法来源于一个开源的lidar localization project。在这里我主要对其代码进行讲解,并适配我们自己的园区场景,后续我将在此基础上进行一些工程上的改进,使之更加鲁棒和易用。本篇主对原项目进行了重写,目前修改的部分主要有以下两点:

  • 新增了定位初始化模块。
  • 改进map_loader节点,结合之前第四篇的动态记载。

由于数据是采用目前实习公司的,不会放出来,大家感兴趣的可以结合我的博客内容,对自己的传感器数据进行适配。起始博客中已经给出了关键的代码,如果看懂的话完全可以自己实现出来,这比直接跑别人的工程要好得多,也更有意义。

image-20200605140712653

阅读全文 »