激光SLAM简介

1.SLAM的定义与分类

1.SLAM的定义

  • Localization:在给定地图的情况下,估计机器人的位姿(定位:最重要,最难)
  • Mapping:在给定机器人位姿的情况下,估计环境地图(建图)
  • SLAM:同时估计机器人的位姿和环境地图(同时建图定位)

2.SLAM解决的问题

  • 机器人在环境中的位姿
  • 导航过程中需要的环境地图

3.基于传感器分类

  • 二维激光SLAM(大部分环境可以解决,室内)
  • 三维激光SLAM(成本高,室外)
  • 视觉SLAM(信息丰富,室内室外通用)
  • 声呐SLAM(绘制海图)

4.基于后端的分类

  • 图优化方法(graph-based)(最流行,最好的)
  • 滑动窗口方法(sliding-window)(VIO,VO)
  • 滤波器方法(filter-based)(particle filer , Gmapping)

2.SLAM的框架

1.Graph-based SLAM

  • 前段匹配(局部匹配,帧间匹配)
  • 回环检测
  • 后端优化

2.图的结构

  • Graph:表示SLAM的过程
  • Node:机器人的位姿
  • Edge:节点之间的空间约束关系

3.激光SLAM的pipeline(流程)

传感器—>传感器数据处理—>前段匹配 —>回环检测 —>后端优化  —>地图构建

  • 激光雷达区畸变,里程计矫正
  • 激光帧间(算法核心)
  • 激光回环检测
  • 非线性最小二乘优化

数据处理

  • 激光雷达运动畸变去除(实用)
  • 里程计数矫正

帧间匹配算法

  • ICP(Iterative Closest Point)
  • PI-ICP (Point-to-Line Iterative Closest Point)
  • NDT (Normal Distribution Transformation)
  • CSM (Correlation Scan Match)

回环检测

  • Scan-to-Scan
  • Scan-to-Map
  • Map-to-Map

后端优化

  • 高斯牛顿方法
  • LM方法

3.激光SLAM

1.2D激光SLAM

1.2D激光SLAM的输入

  • IMU数据
  • 里程计数据
  • 2D激光雷达数据

2.2D激光SLAM的输出

  • 覆盖栅格地图
  • 机器人的轨迹 or PoseGraph

3.数据的预处理--(非常重要)

  • 轮式里程计的标定
  • 激光雷达运动畸变去除
  • 不同系统之间的时间同步

4.实际环境中的问题

  • 动态物体
  • 环境变化
  • 集合结构相似环境
  • 建图的操作复杂
  • 全局定位
  • 地面材料的变化
  • 地面凹凸不平
  • 机器人载重的的改变

5.视觉提供的信息

  • 高精度的里程信息
  • 信息量丰富的视觉地图

6.融合解决的问题

  • 动态物体
  • 环境变化
  • 集合结构相似环境
  • 建图的操作复杂
  • 全局定位
  • 地面材料的变化
  • 地面凹凸不平
  • 机器人载重的变化

2.3D激光SLAM

1.3D激光SLAM的输入

  • IMU数据
  • 里程计数据
  • 3D激光雷达数据

2.3D激光SLAM的输出

  • 3D点云地图
  • 机器人的轨迹or PoseGraph

3.3D激光SLAM的帧间匹配方法

  • Point-to-Plane ICP
  • NDT
  • Feature-based Method
  • GICP
  • NICP
  • IMLS-ICP

4.3D激光SLAM的回环检测方法

  • Scan-to-Scan
  • Scan-to-Map
  • Branth and Bound & Lazy Decision

5.数据的预处理--(非常重要)

  • 轮式里程计的标定
  • 激光雷达运动畸变去除
  • 不同系统之间的时间同步

6.与视觉融合

  • 3D激光雷达为视觉特征提供深度信息
  • 视觉辅助激光雷达进行运动畸变去除
  • 视觉辅助回环检测
  • 视觉提供精确里程信息

3.激光SLAM的问题

1.退化环境

2.地图的动态更新

3.去那句定位

4.动态环境定位

4.传感器数据处理 1:里程计运动模型及标定

1.里程计模型

1.两轮差分底盘的运动学模型

优点

  • 结构简单
  • 便宜(2个点击)
  • 模型简单

航迹推算

2.里程计标定

1.线性最小二乘的基本原理

1.线性方程组Ax=b

  • A为m x n的矩阵
  • x为n x 1的向量

当m=n时,适定方程组,方程组有唯一解

当m<n时,欠定方程组,方程组有无穷多解

当m>n时,超定方程组,方程组有通常无解

2.最小二乘解

  • 绝大多数情况为m>n,超定方程组
  • 无解,可以寻找最靠近真实解的解
  • 无解但是有最小二乘解

(AX=B     AX-B=E){E_{}}^{2}为最小二乘       此时X为最小二乘解

通解 :x * =(AT A)-1 AT B

 2.最小二乘的直线拟合

1.最小二乘的求解--线性空间的角度

Ax表示A的列向量空间S

无解意味着向量b不再S中

最近的解即为:向量b在S中的投影

 3.最小二乘在里程计标定中的应用

1.直接线性方法

通用性强

实现简单

精度不高

2.基于模型的方法

精度高

实现复杂

特异性高

5.传感器数据处理 2:激光雷达运动畸变去除

1.概念介绍

1.激光雷达传感器介绍

三角测距

  • 中近距离精度较高
  • 价格便宜
  • 远距离精度较差
  • 易受干扰
  • 一盘在室内使用

飞行时间(TOF)

  • 测距范围广
  • 测距精度高
  • 抗干扰能力强
  • 价格昂贵
  • 室内室外皆可

2.激光雷达数学模型介绍

1.光束模型

缺点:在非结构化环境中 ,为子微小的改变会造成期望值的巨大改变,从而导致的分进行突变

 2.似然场模型

  • 对图像进行高斯平滑,在任何环境中期望值对于位姿都是平滑的
  • 得分的计算不需要经过raytracking直接通过查表即可得到,计算量低
  • 同时是和结构花环境和非结构环境中

3.运动畸变介绍

产生的原因

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

2.畸变去除

1.纯估计方法

1.ICP

类ICP方法-->ICP vaviant(求两个点云之间相对位置关系)

已知对应点的求解方法

X^{^{,}} ={x_{i} - u_{x}} ={x{_{i}}^{,}}

P^{^{,}} =\left \{ p_{i} - u_{p} \right \}= \left \{ p{_{i}}^{,}\right \}

则ICP的解为

R=UV^{T}

t = u_{x} - Ru_{p}

未知对应点的求解方法

  • 实质中,不知道对应点匹配
  • 不能一布到为计算出R和t
  • 进行迭代计算
  • EM算法的一个级别

算法流程

  • 寻找对应点
  • 根据对应点,计算R和t
  • 对点云进行转换,计算误差
  • 不断迭代,直至误差小于某一个值

ICP方法在激光匹配中的缺点

  • 没有考虑激光的运动畸变
  • 当前的激光数据是错误的
2.VICP
  • ICP算法
  • 考虑了机器人的运动
  • 匀速运动
  • 进行匹配匹配的同时估计机器人的速度

2.里程计辅助方法

3.融合方法

### 激光SLAM算法原理 激光SLAM(Simultaneous Localization and Mapping),即同步定位与建图,是一种利用激光雷达传感器获取周围环境信息的技术,在自动驾驶领域具有重要地位。该技术的核心在于解决两个主要问题:一是确定车辆相对于已知地图的位置;二是创建或更新环境的地图表示。 #### 基本工作流程 1. **数据采集** 使用安装于移动平台上的激光扫描仪收集距离测量值,形成一系列点云数据[^1]。 2. **特征提取** 对原始点云进行预处理,识别出显著几何特性如边缘和平面等作为地标特征[^3]。 3. **位姿估计** 利用卡尔曼滤波器或其他状态估计算法预测当前时刻机器人的姿态变化情况,并结合观测到的新旧两帧之间的相对运动关系修正预测结果,从而得到较为准确的姿态参数。 4. **地图构建** 将每次迭代过程中获得的局部坐标系下的新测距信息转换至全局参考框架下,累积成完整的二维/三维栅格化网格或者拓扑结构形式的地图模型[^2]。 5. **闭环检测** 当机器人再次访问之前经过的地方时能够自动识别出来,并调整累计误差以保持一致性。 ### 应用场景 在自动驾驶汽车中,激光SLAM被广泛应用于以下几个方面: - **环境感知** 提供关于道路边界、障碍物分布以及其他静态物体位置的信息,帮助系统理解行驶区域内的具体情况。 - **路径规划** 结合其他传感器的数据融合策略,为决策层提供可靠的导航建议和支持,确保安全高效的行车路线选择。 ### 实现方式及代码示例 为了更好地理解和实践上述理论,下面给出一段基于Python和ROS( Robot Operating System ) 的简单激光SLAM实现片段: ```python import rospy from sensor_msgs.msg import LaserScan from nav_msgs.msg import Odometry from tf.transformations import euler_from_quaternion, quaternion_from_euler import numpy as np class SimpleLaserSlamNode(object): def __init__(self): self.scan_subscriber = rospy.Subscriber('/scan', LaserScan, self.laserscan_callback) self.odom_subscriber = rospy.Subscriber('/odom', Odometry, self.odometry_callback) # 初始化变量... def lasercan_callback(self,msg:LaserScan): ranges=msg.ranges # 处理激光数据... def odometry_callback(self,msg:Odometry): orientation_q=msg.pose.pose.orientation _,_,yaw=euler_from_quaternion([orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w]) # 更新位姿信息... if __name__=='__main__': try: rospy.init_node('simple_laser_slam') node=SimpleLaserSlamNode() rospy.spin() except Exception as e: print(e) ``` 此段代码仅作为一个起点,具体功能还需进一步完善和发展。对于更复杂的任务,则推荐使用成熟的开源项目如GMapping、 Hector_SLAM 或者 Cartographer 等来进行开发[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值