

SLAM从入门到精通(从amcl到navigation软件栈)
source link: https://blog.csdn.net/feixiaoxing/article/details/133501239
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
前面我们学习了amcl,但它只是navigation里面的一个package而已。真正的导航还包含很多的内容。举个例子来讨论下,我们假设需要一个机器人从a点走到b点,应该分成哪几个步骤来完成呢。首先,机器人需要确认下自己的位置吧,是在其他地方,还是已经在a点了?接着,机器人需要规划一条a点到b点的路径吧?规划的路径只是保证了这条道路的可行性,但小车本身的机械属性是不是可以走完这条路、每段路上的速度该如何规划,这是需要进一步细化的内容。所有这些都准备好了,下面就是机器人不停和底盘交互的过程了。
1、ros navigation的github地址
本身navigation是一个软件栈,里面有很多的内容,地址在这,https://github.com/ros-planning/navigation。
2、软件栈的结构图

这幅图的信息非常多,也非常重要,建议反复观看。它包含了用户层的输入、tf的输入、odom的输入、传感器的输入、map的输入,以及对外底盘的输出cmd_vel。在整个navigation最核心的部分,还包含了global_planner、global_costmap、local_planner、local_costmap,这些也是非常重要的。整个框架由move_base实现,每个细节又由具体的模块来实现。
图中的recovery_behavior也是蛮有意思的一点。目前ros提供的recvoery behavior机制可能不适用于所有robot,比如它提出的360°旋转,就不太适合一些工业机器人,需要开发者根据自己的实际情况灵活处理。
3、全局搜路
所谓的全局搜路,就是global_planner。这方面有很多的算法,比如迪杰斯特拉算法、a*算法等等。这种算法主要是找出一条从出发地到目的地的拓扑路。本身搜路的过程就是一个拓扑搜索的过程,并不考虑robot自身的机械性能。
4、局部搜路
全局搜路本身只是一个简单分析一下路径实施的可行性。至于机器人究竟应该在节点之间怎么走比较好,以什么样的速度走比较合适,这就是局部搜路的范畴。目前ros上面也提供了相关的局部搜路算法,比如dwa算法。和全局搜路算法相比较,局部搜路需要考虑到robot自身的一些机械素质,即规划的速度是否可以ok、规划的角速度是否可以ok、转弯半径是否可以ok,在此基础上尽可能实现全局搜路的路线要求。对于效率优先的场景而言,肯定是希望越快越好。但是对于robot来说,它本身又有自己的安全要求和设备性能瓶颈障碍,所以这中间就有一个权衡和取舍的问题。
5、global costmap & local costmap
所谓的global costmap,主要是指障碍物对robot的影响。global costmap显示的cost,要比实际扫到的障碍物cost要大一点,这也是为了安全考虑。而local costmap,主要是为了区别于global costmap,前者是利用传感器避开临时障碍物,后者是扫描物体时的障碍物,两者处理的场景不一样。
6、amcl定位
这里我们看到了amcl,也就是robot定位。实际生产中,amcl定位是非常重要的。但是实际场景中,稳定输出的环境特征是非常困难的,很多时候都需要我们人为去创造、或者设计出合理的环境特征。这样才能在实际场景中稳定地运行。所以hector slam也好,gmapping slam也好,他们只是基础,但是仅仅依靠这些基础构建出来的栅格地图来定位,还是远远不够的。
7、控制目标输出
控制目标的输出,是我们所有操作的真正目的。前面我们已经知道,所有的控制目标都可以分成线速度控制和角速度控制,所以底盘的最终目标就是实现ros系统提出的线速度、角速度目标即可。

Recommend
-
4
SLAM从入门到精通(开始篇)
-
10
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 linux系统里面的编译和windows下面的编译不同,它没有什么特别好用的IDE。一般都需要自己写编译脚本。这项工作在以前可能很麻烦,但是现在一般都被cmake取代了。...
-
18
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 不可否认,slam中的有一部分内容来自于数学。但是,我们在学习使用的过程中,也不用纠结于整个数学的推导过程,能正确使用数学结论也是可以的。有能力的同学,按...
-
25
SLAM从入门到精通(基本框架)
-
7
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们介绍了hector slam建图。相对而言,hector slam建图对数据的要求比较低,只需要lidar数据就可以建图了。但是hector slam也有它自己的问题。那就是如果ro...
-
5
SLAM从入门到精通(tf的使用)
-
7
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 slam的最终目的是为了建图和定位。有了地图,我们才知道当前机...
-
2
SLAM从入门到精通(amcl定位使用)
-
5
SLAM从入门到精通(IMU数据的读取)
-
6
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 目前建图的方法一般有视觉建图和激光建图两种。...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK