----------------------------------------------------------------参考资料来源---深蓝学院--------------------------------------------------------------------
----------------------------------------------------------参考资料来源---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、世界坐标(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的发布参数。
“odom和map坐标系在机器人运动开始是重合的。但是,随着时间的推移是不重合的,而出现的偏差就是里程计的累积误差。那map-->odom的tf就是在一些校正传感器合作校正的package比如gmapping会给出一个位置估计(localization),这可以得到map-->base_link的tf,所以估计位置和里程计位置的偏差也就是odom与map的坐标系偏差。所以,如果你的odom计算没有错误,那么map–->odom的tf就是“ 如下图关系:
导航堆栈必须有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
首先Eigen是一个开源的基于c++的矩阵运算库。
Eigen::Ref< Eigen::Matrix3d >中“Matrix3d”代表一个33的类型为double的矩阵,Ref<>代表引用类型,所以这条语句表示对3*3矩阵的引用对象;同理,Vector3d表示长度为3的类型为double的向量。
boolcompute_C(Eigen::Ref
解决方法:ICP、VICP等等
大佬链接如下:《机器人SLAM导航-核心技术与实战》的作者张虎SLAM+语音机器人DIY系列:(六)SLAM建图与自主避障导航——3.ros-navigation机器人自主避障导航 - 小虎哥哥爱学习 - 博客园
这是ros wiki官方的navigation系统框图。
在实际使用后发现,move_base因其设计问题,灵活度较低,只能满足室内基本功能的实现,改进起来也不太方便,若需在复杂场景下使用可参考move_base_flex或者更换navigation2。
由于ROS中的局部路径规划器比较老了,所以我推荐大家使用比较新的局部路径规划器teb_local_planner。teb_local_planner是基于弹性时间带碰撞约束的算法,算法将动态障碍物、运行时效、路径平滑性等约束做综合考虑,在复杂环境下有更优秀的表现。
costmap结构:
参考链接:SLAM常用坐标系总结:_Zack_Liu的博客-CSDN博客_slam 坐标系