11

SLAM从入门到精通(从amcl到navigation软件栈)

 11 months ago
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.
neoserver,ios ssh client

SLAM从入门到精通(从amcl到navigation软件栈)

original.png
嵌入式-老费 newUpTime2.png 已于 2023-10-04 22:35:13 修改 articleReadEyes2.png 138

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们学习了amcl,但它只是navigation里面的一个package而已。真正的导航还包含很多的内容。举个例子来讨论下,我们假设需要一个机器人从a点走到b点,应该分成哪几个步骤来完成呢。首先,机器人需要确认下自己的位置吧,是在其他地方,还是已经在a点了?接着,机器人需要规划一条a点到b点的路径吧?规划的路径只是保证了这条道路的可行性,但小车本身的机械属性是不是可以走完这条路、每段路上的速度该如何规划,这是需要进一步细化的内容。所有这些都准备好了,下面就是机器人不停和底盘交互的过程了。

1、ros navigation的github地址

        本身navigation是一个软件栈,里面有很多的内容,地址在这,https://github.com/ros-planning/navigation

2、软件栈的结构图

7e84a08b7c724e1380738f8eb4e53045.png

        这幅图的信息非常多,也非常重要,建议反复观看。它包含了用户层的输入、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系统提出的线速度、角速度目标即可。

9612d08245d848428eb0a30bcbffb236.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK