激光雷达SLAM简介

激光雷达

在这里插入图片描述
激光雷达主要包括激光发射、接收、扫描器、透镜天线和信号处理电路组成。
在这里插入图片描述

激光SLAM简介

Simultaneous localization and mapping(SLAM), 实时定位与建
图。

  1. localization: 在给定地图的情况下,估计机器人的位姿
  2. Mapping: 在给定机器人定位的情况下,估计环境地图
  3. SLAM: 同时估计机器人的位姿和环境地图

机器人导航包括建图、定位、路径规划等主要步骤。其中第一步的建图与定位是密不可分的。在某些场景中,我们可以通过差分GPS等方法获取机器人的绝对位姿,此时将传感器接收到的数据按照机器人的绝对位姿投影到世界坐标系就可以完成建图。也就是说要建图必须已知机器人的定位,而定位则需要有一张有足够精度的地图,对于无法获取机器人绝对位姿的情况,SLAM问题本质上是一个鸡生蛋、蛋生鸡的问题。我的理解是SLAM核心是定位。目标是建图

SLAM的定义与分类

根据传感器分类

类型使用场景特点
二维激光雷达室内移动机器人成本低
三维激光雷达室外、测绘、大场景成本高、信息量大
视觉室内室外信息量丰富、稳定性差
声呐水下场景声波的水下传播

根据优化方法分类(状态估计)

类型特点
图优化方法因子图优化所有位姿
滑动窗口方法权衡图优化和滤波
滤波器方法估计当前位姿、误差累积难以消除

激光雷达SLAM流程

数据处理

1.里程计标定:
(1)机械标称值不代表实际值,实际误差可能较大
(2)里程计的精度对于机器人定位和建图至关重要
2.激光雷达运动畸变去除
(1)激光雷达采集一帧的数据需要时间,机器人在这段时间内的运动会导致畸变
(2)运动畸变会影响匹配精度

帧间匹配–核心部分

  1. ICP: 迭代最近邻
    PI-ICP 点到线迭代最近邻
    NICP 法向量迭代最近邻
  2. CSM: 暴力迭代
  3. NDT: Normal Distance Transform
  4. Optimization-Based
  5. Feature-Based
    从视觉得到启发,LOAM系列

回环检测

方法特点
scan-to-scan计算量小,容易产生歧义
scan-tomap计算量中等,歧义中等
map-to-map计算量大,基本不产生歧义

后端优化

1.高斯牛顿

2.Levenberg-Marquardt(LM)

激光雷达SLAM输入

  1. IMU数据
  2. 里程计数据
  3. 2D激光雷达数据

激光SLAM的输出

1.占用栅格地图 2D SLAM
2. 点云地图 3D SLAM
2.机器人的轨迹或者位姿图

激光SLAM的帧间匹配方法

方法特点
PL-ICP点到线的距离,更符合室内结构化场景,依赖初始解
CSM暴力搜索,找到全局最优解
Optimization-Based依赖于地图的梯度,可以轻易引入额外的约束

激光SLAM的发展

Filter-based
方法特点
EKF-SLAM(90年代)随着环境的增大,状态量占据空间急剧增大
FastSLAM(2002-2003)粒子滤波,,每一个粒子表示一个地图
Gmapping(2007)FastSLAM的升级版本
Optimal RBPF(2010)Gmapping基础上的进一步优化
Graph-based
方法特点
Karto-SLAM(2010)首个基于优化的2D激光SLAM的开源算法
Cartographer(2016)与Karto-SLAM原理类似,更完整,更牛B

激光SLAM的趋势–与视觉融合

视觉提供的信息
  1. 高精度的里程信息
  2. 信息量丰富的视觉地图
融合解决的问题
  1. 环境变化
  2. 几何结构相似环境
  3. 建图的操作复杂
  4. 全局定位
  5. 地面材质的变化
  6. 机器人载重的变化

激光SLAM中的问题

  1. 退化环境(Degeneration Environment)
  2. 地图的动态更新(Map Updata)
  3. 全局定位(Global Localization)
  4. 动态环境定位(Dynamic Localization)

数学基础

位姿表示和转换矩阵

位姿表示

机器人在坐标系中的坐标:
( x , y , θ ) (x, y, \theta) (x,y,θ)
机器人坐标系B到坐标系W的转换矩阵:
T B W = [ c o s θ − s i n θ x s i n θ c o s θ y 0 0 1 ] = [ R t 0 1 ] T_B^W= \begin{bmatrix} cos\theta & -sin\theta & x \\ sin\theta & cos\theta & y \\ 0 & 0 & 1 \end{bmatrix}=\begin{bmatrix}R & t \\ 0 & 1\end{bmatrix} TBW=cosθsinθ0sinθcosθ0xy1=[R0t1]
坐标转换

主动旋转(向量旋转)

旋转矩阵: 表示某一个物理量在不同坐标系下的表示。
R ( θ ) = [ c o s θ − s i n θ s i n θ c o s θ ] R(\theta) = \begin{bmatrix}cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} R(θ)=[cosθsinθsinθcosθ]

被动旋转(坐标系旋转)

x w = a [ c o s θ s i n θ ] + b [ − s i n θ c o s θ ] x_w = a\begin{bmatrix}cos\theta \\ sin\theta \end{bmatrix} +b\begin{bmatrix}-sin\theta \\ cos\theta \end{bmatrix} xw=a[cosθsinθ]+b[sinθcosθ]

x w = [ c o s θ − s i n θ s i n θ c o s θ ] x_w = \begin{bmatrix}cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} xw=[cosθsinθsinθcosθ]

旋转矩阵:

R B W = [ c o s θ − s i n θ s i n θ c o s θ ] R_B^W = \begin{bmatrix}cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} RBW=[cosθsinθsinθcosθ]

坐标系B在坐标系W中的坐标:
( x , y , θ ) (x, y, \theta) (x,y,θ)
坐标系B到坐标系W的转换矩阵:
T B W = [ c o s θ − s i n θ x s i n θ c o s θ y 0 0 1 ] = [ R t 0 1 ] T_B^W = \begin{bmatrix}cos\theta & -sin\theta & x \\ sin\theta & cos\theta & y \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} R & t \\ 0 & 1\end{bmatrix} TBW=cosθsinθ0sinθcosθ0xy1=[R0t1]
坐标系W到坐标系B的转换矩阵:
T W B = [ R T − R T t 0 1 ] = [ R − 1 − R − 1 t 0 1 ] T_W^B = \begin{bmatrix}R^T & -R^Tt \\ 0 & 1 \end{bmatrix} = \begin{bmatrix}R^{-1} & -R^{-1}t \\ 0 & 1 \end{bmatrix} TWB=[RT0RTt1]=[R10R1t1]

世界坐标系到机器人坐标系的转换矩阵就是位姿

机器人A在坐标系W的坐标:
( x A , y A , θ A ) , [ c o s θ − s i n θ x A s i n θ c o s θ y A 0 0 1 ] (x_A, y_A, \theta_A),\begin{bmatrix}cos\theta & -sin\theta & x_A \\ sin\theta & cos\theta & y_A \\ 0 & 0 & 1\end{bmatrix} (xA,yA,θA),cosθsinθ0sinθcosθ0xAyA1

机器人B在坐标系W中的坐标:
( x B , y B , z B ) , [ c o s θ − s i n θ x b s i n θ c o s θ y B 0 0 1 ] (x_B, y_B, z_B), \begin{bmatrix}cos\theta & -sin\theta & x_b \\ sin\theta & cos\theta & y_B \\ 0 & 0 & 1 \end{bmatrix} (xB,yB,zB),cosθsinθ0sinθcosθ0xbyB1

机器人A在机器人B中的坐标:
T A B = T W B T A W = T B W − 1 T A W T_A^B = T_W^BT_A^W = {T_B^W}^{-1}T_A^W TAB=TWBTAW=TBW1TAW

  • 3
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中,激光雷达SLAM(Simultaneous Localization and Mapping)是通过使用激光雷达传感器来同时定位和构建地图的技术。激光雷达SLAM在机器人导航和自主驾驶等领域具有重要的应用。 在MATLAB中,可以使用Robotics System Toolbox来实现激光雷达SLAM。该工具箱提供了一组函数和类,用于处理激光雷达数据、建立地图和执行定位。 要在MATLAB中进行激光雷达SLAM,您可以按照以下步骤进行操作: 1. 导入激光雷达数据:使用`rosbag`函数导入保存有激光雷达数据的ROS包,或者使用`laserscan`函数直接加载激光雷达数据。 2. 预处理激光雷达数据:使用`preprocessLidarData`函数进行激光雷达数据的去噪处理、重采样和点云滤波。 3. 构建激光雷达地图:使用`occupancyMap`函数初始化一个占据栅格地图对象,并使用`insertRay`函数将激光雷达数据插入地图中。 4. 运行激光雷达SLAM算法:使用`slamAlgorithm`函数以及其他相关函数(如`updatePose`和`updateMap`)执行激光雷达SLAM算法,同时更新机器人的姿态和地图。 5. 可视化SLAM结果:使用`show`函数可视化机器人的轨迹、地图以及激光雷达数据。 请注意,以上步骤仅为激光雷达SLAM的一个基本流程示例,具体的实现方式可能会因应用场景和实际需求而有所不同。在MATLAB的官方文档和示例中,您可以找到更详细的教程和代码示例,以帮助您更好地理解和实现激光雷达SLAM。<span class="em">1</span> #### 引用[.reference_title] - *1* [python编写的2D激光扫描SLAM程序](https://download.csdn.net/download/zhwb9190/16674134)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值