MRwangmaomao / LaserSlam

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

0 Lidar与camera融合

0.1 深度相机+2DLidar方案分析

0.1.1 传感器分析

参考文献:**科学院深圳先进院的18级硕士毕业论文 激光视觉融合的机器人即时定位建图研究(源自**知网)

由于深度摄像机可以同时获取彩色和深度图像,单目SLAM中会有尺度不确定问题,但是深度相机有很多不足之处:

  • 视野范围小 ,kinect视角范围:水平57.5,垂直43.5
  • 可用深度范围有限,Kinect在1-8米可以达到较好的效果
  • 结构光深度相机的发射端和接收端通常有一定的间距,因此在物体的边缘处会存在一定的视觉盲区,这对较远的物体影响不大,但是对于近距离的物体边缘影响较大.会产生无效深度值的类似阴影的区域.

二维激光SLMA主要针对环境的二维平面建图,其扫描范围相对于深度相机要大许多,且精度较高,建立栅格地图可以直接用于路径规划.

但是其只能获取一个平面的信息,单独使用无法判断切面以外的高度的障碍物信息,导致其在体型较高的机器人上应用受限.

0.1.2 融合方案分析

视觉特征点用于匹配后进行运动估计,激光方法采用相关性匹配进行运动估计.当视觉与激光同时定位成功时,系统输出两个位姿,对两者位姿结果进行EKF融合.

当视觉跟踪不成功时,采用激光的定位结果拼接深度相机的点云数据,获取三维地图,同时继续在后续帧进行特征探测和匹配,重新初始化视觉slam中的地图点,若成功继续采用融合模式,否则一直使用激光的定位结果建立三维地图.

0.2 视觉语义+2DLidar方案分析

在SLAM定位过程中,运动物体和半静态物体的存在将会影响测量数据与环境地图的一致性,导致机器人正确定位位置的观测似然率下降,同时定位置信度下降,因此需要添加语义信息.

语义地图表示方法

目前基于激光雷达的地图构建方法通常使用占据栅格地图(Occupancy Grid Map)对环境地图进行表示,占据栅格地图可用一个二维数组表示,数组中每一个数据表示该点的占据率,即该点是障碍物的概率.将占据率转换为灰度值即可得到地图.

构建语义地图的过程中,我们可以将静态部分数据,运动物体数据,半静态物体数据进行定位,并构建静态地图.而落到运动物体上的激光扫描点,如人,车等则不用于定位,对于落在半静态物体上的激光扫描点,将根据实际情况决定是否用于定位和地图构建.

语义地图构建过程

  • 激光雷达中静态部分数据用于定位和建图
  • 对于落在半静态物体上的激光扫描点,首先需要使用原SLAM地图构建方法将此部分数据与静态地图融合,然后以激光雷达传感器固有误差大小为半径,以落在各个半静态物体上的激光扫描点为中心,得到一个运动物体区域.将区域内的静态栅格点标记为对应运动物体.
  • 目标检测采用的是基于YOLO v2模型的精简模型,是目前目标检测速度最快的目标检测方法之一.可以得到一个较高的检测精度.YOLO v2将目标检测问题作为回归问题求解,每次检测只需要进行一次前向过程即可以同时得到物体位置和物体分类信息,erbuxuyao

1 激光雷达模型

光束模型 1.高斯分布模型(真实击中) 2.被遮挡模型(动态障碍物) 3.无限远模型(打到空气中了) 4.随机分布模型

似然场模型(likelihood model)

对障碍物进行高斯平滑,在任何环境中期望值对于位姿都是平滑的

得分的计算不需要经过raytracking,直接通过查表即可得到,计算量低

同事适合结构化环境和非结构化环境

2 运动畸变和畸变去除

激光点不是瞬时获得,激光测量时伴随着机器人的运动,激光帧率较低时机器人的运动不能忽略.

ICP方法

给定两个点云集合,求解R和t,使得 $$E(R,t)=\frac{1}{N_p}\sum_{i=1}{||x_i-Rp_i-t||}$$ 最小.

未知对应点的求解方法: 需要进行迭代计算,EM算法的一个特例. 算法流程:寻找对应点,根据对应点计算R和t,对点云进行转换,计算误差,对点云进行转换,计算误差,不断迭代,直至误差小于某一个值

缺点:没有考虑激光的运动畸变,当前激光数据是错误的

VICP

考虑了机器人的运动,匀速运动模型

3 激光雷达前端配准方法

下面四种方法层层递进,精度越来越高,但是计算量也越来越大.是一个trade off的过程

3.1 ICP

3.2 PL-ICP(Point-Line ICP)

激光点是对实际环境中曲面的离散采样

PL-ICP用分段线性的方法对实际曲面进行近似,从而定义当前帧激光点到曲面的距离.

目标函数实际上表示点到曲面的距离,即点到直线的距离.

与ICP的区别:

  • 误差函数形式不同,ICP是点对点的距离做误差,PL-ICP是点到线的距离作为误差,PL-ICP的形式更符合实际情况.
  • 收敛速度不同,ICP为一阶收敛,PL-ICP为二阶收敛
  • 精度高于ICP,特别是结构化环境中
  • PL-ICP对初始值更敏感
  • 在杂乱的环境中干扰比较大

3.3 NICP(Normal ICP)

利用实际曲面的特征来对错误的点匹配进行滤出,主要的特征是法向量和曲率.

误差项除了考虑对应点的欧氏距离之外,同时还考虑对应点法向量的角度差.

算法流程:

  • 计算参考激光帧和当前激光帧中每一个点的法向量和曲率
  • 根据当前解把当前激光帧的点转换到参考坐标系中,并且根据欧式距离,法向量,曲率等信息来选择匹配点(也有可能没有匹配点)
  • 用LM方法进行迭代,迭代收敛即可得到两帧激光数据之间的相对位姿.

3.4 IMLS-ICP(implicit moving least square ICP移动最小二乘ICP)

理论上对实际环境拟合最真实的算法,因此算法精度是最高的.

基本**:

  • 选择具有代表性的激光点来进行匹配,既能减少计算量同时又能减少激光点分布不均匀导致的计算结果出现偏移.
  • 点云中隐藏着真是的曲面,最好的做法是能从参考帧中把曲面重建出来.
  • 曲面重建的越准确,对真是世界描述越准确

代表点的选取:

  • 具有丰富特征的点,即结构化的点,具有良好的曲率和法向量的定义
  • 曲率越小的点越好,曲率为0代表直线,代表着最结构化的点,也代表

匹配求解:

  • 当前帧中一点$x_i$到曲面的距离为$I^{P_k}(x_i)$
  • $P_k$中离$x_i$最近的点的法向量为$n_i$
  • 点$x_i$在曲面上的投影$y_i$为:$y_i=x_i - I^{P_k}(x_i) n_i$
  • 点$x_i$与$y_i$为对应的匹配点:$\sum{((Rx_i+t-y_i)n_i)^2}$

图优化的激光SLAM方法

Graph-based SLAM

非线性最小二乘

About


Languages

Language:Makefile 69.4%Language:CMake 16.2%Language:Python 7.7%Language:C++ 3.4%Language:C 2.2%Language:Shell 1.2%