连载文章,长期更新,欢迎关注:
可以说ros-navigation是ROS系统中最重要的组件之一,绝大部分自主移动机器人的导航功能都是基于ros-navigation导航系统实现的。下面将从原理分析、源码解读和安装与运行这3个方面展开讲解ros-navigation导航系统。
12.1.1 ros-navigation原理分析
从图11-24来看,导航系统就是以导航目标、定位信息和地图信息为输入,以操控机器人的实际控制量为输出。首先要知道机器人在哪,然后要知道机器人需要到达的目标在哪,最后就是寻找路径并利用控制策略开始导航。导航目标通常人为指定或者特定程序触发,这其实回答了问题“我将到何处去”。定位信息通常由SLAM或者其他定位算法提供,这其实回答了问题“我在哪”。而地图信息为导航起点和终点之间提供了障碍物描述,那么在此基础上就可以利用路径规划寻找路径并利用控制策略输出实际线速度和角速度控制量进行导航了。而ros-navigation导航系统的实现也遵循了这样的基本思路,其中所涉及的很多理论知识已经在第11章中讨论过了,这里就主要对其中比较特别的AMCL定位和Costmap代价地图两个概念进行介绍吧。
1.AMCL定位
在ros-navigation中提供了一种比SLAM定位更轻量级的方案,即AMCL[1](Adaptive Monte Carlo Localization,自适应蒙特卡洛定位)定位方案。AMCL包含两种代码实现,即用于二维地图定位的代码实现amcl和用于三维地图定位的代码实现amcl3d,其中ros-navigation中已经默认集成了二维地图定位的amcl代码包。从图7-5就能看出单独定位问题比SLAM问题要简单,因为单独的定位问题是在环境地图已知的情况下估计机器人位姿,而SLAM问题在地图未知的情况下同时估计机器人位姿和地图