当前位置:网站首页>激光slam学习(2D/3D、偏实践)

激光slam学习(2D/3D、偏实践)

2022-07-07 21:52:00 内有小猪卖

----------------------------------------------学习资料来源---深蓝学院--------------------------------------------------


目录

1、激光SLAM简要介绍

1.1 tf树

1.1.1 map --> odom --> base_footprint --> base_link --> laser_link的tf树关系

1.1.2 odom的作用和理解

1.1.3 为什么不能直接从map --> base_link发布信息?

1.2 slam常用函数

1.1.1 Eigen::Vector3d 和 Eigen::Matrix3dA

2、传感器数据处理I:里程计运动模型及标定

3、传感器数据处理II:激光雷达数学模型和运动畸变去除

3.1激光雷达传感器原理介绍

3.2运动畸变

3.3运动畸变去除——传感器辅助

3.3.1 IMU和轮式里程计优缺点

3.3.2激光雷达数据为何在CPU上处理而不是单片机上处理?​

4、激光SLAM的前端配准方法

5、gmapping——基于滤波器的激光SLAM方法(Grid-based)

6、cartographer——基于图优化的激光SLAM方法(Grid-based)

7、基于已知定位的建图

8、3D激光SLAM介绍



1、激光SLAM简要介绍

1.1 tf树

1.1.1 map --> odom --> base_footprint --> base_link --> laser_link的tf树关系

1、世界坐标(map)

        该map坐标系是一个世界固定坐标系,其Z轴指向上方。典型的设置中,定位模块(轮式里程计等传感器)不断的重新计算世界坐标中机器人的位姿,从而消除偏差,但是当新的传感器信息到达时可能会跳变。

2、里程计坐标系(odom)

        odom 坐标系是基于测距源来计算的,如车轮里程计,视觉里程计或惯性测量单元。

3、基座标(base_footprint)

        默认Z坐标为0,即紧贴地面。但是实际情况一般不是这样。

        base_footprint表示机器人base_link原点在地面上的投影,区别base_link之处是其“z”坐标不同。一般为了模型不陷入地面,base_footprint“z”坐标比base_link高。其中蓝色箭头所指的绿色框框就是base_footprint。

4、基座标(base_link)

        base_link是固定在机器人本体上的坐标系,通常选择机器人腰部;一般设置为机器人的旋转中心,也就是两个轮子之间的中轴处。

        这里有一个重要默认:move_base默认base_link的z坐标为0。即机器人的在地图中的位置由base_link。因此一般默认将base_link设置为定位用的机器人本体坐标系。

        base_link区别base_footprint 之处是其“z”坐标不同,前者比后者高。

5、雷达坐标系(laser_link)

        根据实际安装位置进行测量,修改tf的发布参数。

1.1.2 odom的作用和理解

“odom和map坐标系在机器人运动开始是重合的。但是,随着时间的推移是不重合的,而出现的偏差就是里程计的累积误差。那map-->odom的tf就是在一些校正传感器合作校正的package比如gmapping会给出一个位置估计(localization),这可以得到map-->base_link的tf,所以估计位置和里程计位置的偏差也就是odom与map的坐标系偏差。所以,如果你的odom计算没有错误,那么map–->odom的tf就是“ 如下图关系:

9676334-9e9be0202177671a

1.1.3 为什么不能直接从map --> base_link发布信息?

导航堆栈必须有map到base_link的变换,有的本地规划器还要求提供/odom


 参考博客:

map odom base_link三者关系的通俗理解_TYINY的博客-CSDN博客_base_link

ROS中map、odom、base_link等坐标系关系的理解_网络通杀108的博客-CSDN博客_map odom

ROS、base_footprint和base_link的区别及Gazebo差速小车建模遇到的坑汇总_yjj1227033506的博客-CSDN博客_base_footprint


1.2 slam常用函数

1.1.1 Eigen::Vector3d 和 Eigen::Matrix3dA

首先Eigen是一个开源的基于c++的矩阵运算库。

Eigen::Ref< Eigen::Matrix3d >中“Matrix3d”代表一个33的类型为double的矩阵,Ref<>代表引用类型,所以这条语句表示对3*3矩阵的引用对象;同理,Vector3d表示长度为3的类型为double的向量。
boolcompute_C(Eigen::Ref<Eigen::Matrix3d>A_,Eigen::Ref<Eigen::Vector3d>B_)。应该是声明了一个函数,其中有两个参量,第一个是名为A的矩阵,第二个是名为B的向量。为了避免产生拷贝和临时值,所以用了Ref<>。Ref的用法可以理解为 按引用传递。

2、传感器数据处理I:里程计运动模型及标定

3、传感器数据处理II:激光雷达数学模型和运动畸变去除

3.1激光雷达传感器原理介绍

 

 

3.2运动畸变

 解决方法:ICP、VICP等等

3.3运动畸变去除——传感器辅助

3.3.1 IMU和轮式里程计优缺点

3.3.2激光雷达数据为何在CPU上处理而不是单片机上处理?

4、激光SLAM的前端配准方法

5、gmapping——基于滤波器的激光SLAM方法(Grid-based)

6、cartographer——基于图优化的激光SLAM方法(Grid-based)

7、基于已知定位的建图

8、3D激光SLAM介绍

参考链接:SLAM常用坐标系总结:_Zack_Liu的博客-CSDN博客_slam 坐标系

 

原网站

版权声明
本文为[内有小猪卖]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_40528849/article/details/125524718