ROS navigation分析:navigation框架

前言:

    ROS navigation stack是ROS提供的一个非常重要且常用的模块。它的主要作用是实现机器人的定位、导航和避障功能。在ROS wiki上,Maintainer把它的功能归纳为:“It takes in information from odometry and sensor streams and outputs velocity commands to send to a mobile base.”也就是说,navigation需要的输入是里程计信息(必选)、传感器信息(比如超声、红外、深度相机、激光等等),输出是可以控制机器人运动的一系列速度指令。这里有个小问题是,输入信息作者漏写了一点,没有map怎么行呢???至少在导航模式地图是必须要的,mapping 或者 exploration 模式会产生map,自然是不需要map。

 

    接下来,先看一下代码里都有什么东西。

ROS navigation分析:navigation框架_第1张图片

    好像东西有点多,但是其实核心的文件只有几个。而且这17个文件的关系并不是并列,稍微梳理一下如下图。

ROS navigation分析:navigation框架_第2张图片

    梳理完之后,可以简单把navigation stack分成7个部分。

 

  • map_server:顾名思义,地图服务器,主要功能是保存地图和导入地图。
  • costmap_2d:可以生产代价地图,以及提供各种相关的函数。
  • robot_pose_ekf:扩展卡尔曼滤波器,输入信息是里程计、IMU、VO中的任意两个或者三个都输入。输出是一个融合之后的pose,还是蛮好用的。
  • voxel_grid:这个嘛,wiki是上这么写的,“The voxel_grid has no API that we're supporting officially. You should still feel free to use the code, just know that we're making no guarantees about the stability of the current API”。这个package就随缘吧。
  • localization:这里是两个定位用的package。fake_localization一般是仿真用的,amcl才是实际定位用的package
  • nav_core:这里面只有三个文件,对应的是全局路径规划、局部路径规划、recovery_action的通用接口定义,具体功能实现则是在各个对应的规划器package里。
  • move_base:这里实现的是整个导航的流程。什么时候调用全局路径规划、什么时候调用局部路径规划、什么时候调用recovery_action都是这个package管的。就是下图中间方框里做的事情,可以说是整个navigation stack的核心。

ROS navigation分析:navigation框架_第3张图片

 

    整个navigation stack的架构大概就是这个样子,比较重要的几个package是costmap_2d、amcl、move_base以及各种planner,接下来的文章里会逐个分析一下。

你可能感兴趣的:(ROS源码阅读)