2d激光slam学习

----------------------------------------------------------------参考资料来源---深蓝学院--------------------------------------------------------------------

----------------------------------------------------------参考资料来源---ros wiki官方资料---------------------------------------------------------------

1、快速查找 ros官网资料

h t t p://wiki.ros.org/amcl    想要查询一个文件/功能包的参数解释,将amcl替换为文件名。

例如想要查询move_base功能包的介绍,h t t p://wiki.ros.org/move_base

2、坐标系示意图

激光雷达坐标系
IMU坐标系

                                                                                                    


目录

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)

5.1 ros-navigation机器人自主避障导航算法

大佬链接如下:《机器人SLAM导航-核心技术与实战》的作者张虎SLAM+语音机器人DIY系列:(六)SLAM建图与自主避障导航——3.ros-navigation机器人自主避障导航 - 小虎哥哥爱学习 - 博客园

这是ros wiki官方的navigation系统框图。

        在实际使用后发现,move_base因其设计问题,灵活度较低,只能满足室内基本功能的实现,改进起来也不太方便,若需在复杂场景下使用可参考move_base_flex或者更换navigation2。

        由于ROS中的局部路径规划器比较老了,所以我推荐大家使用比较新的局部路径规划器teb_local_planner。teb_local_planner是基于弹性时间带碰撞约束的算法,算法将动态障碍物、运行时效、路径平滑性等约束做综合考虑,在复杂环境下有更优秀的表现。

costmap结构:

在这里插入图片描述

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

7、基于已知定位的建图

8、3D激光SLAM介绍

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

猜你喜欢

转载自blog.csdn.net/qq_40528849/article/details/125524718
今日推荐