ROS学习笔记十八:Navigation Stack

navigation

metapackage 功能包集合
2D导航模块
输入是odometry、sensor、给定目标
输出安全的速度指令发给移动底盘

包含了许多pakcage

  • amcl
    自适应蒙特卡洛定位
  • base_local_planner 规划器
  • carrot_planner
  • dwa_local_planner
  • map_server 提供已知的地图
    ……

navigation提供的功能大致是和路劲规划、导航、机器人运动状态调整功能相关。

工作原理:

ROS学习笔记十八:Navigation Stack

中心的move_base节点负责整体的导航规划,白色圆圈是插件,node的一个部分

灰色方框是可选信息,可用已知的地图,也可用SLAM边走边建地图

蓝色的方框是必须给出的信息,依赖于自己的平台,sensor transforms是自己用的什么传感器,odometry不论是*上的里程计还是visual odometry,都需要提供这部分的信息

输入:/tf、odom、map、sensor topics(信息越丰富、种类越多,机器人决策就越准确)
输出:cmd_vel topic,发给机器人底盘的运动速度的指令,经过局部规划器local_planner会算出在每一时刻需要给机器人底盘什么样的速度、角速度才可以让机器人顺利避开障碍物
local_planner需要从global_planner、local_costmap中读数据
global_planner需要接收global_costmap(全局代价地图)、move_base_simple/goal(人为给定的目标点)
如果机器人的local_costmap、global_costmap出现问题,比如碰到障碍物或者卡住了,机器人就会进入recovery_behaviors,采取一定措施让自己摆脱困境

move_base

功能:全局规划(静态)、局部规划(动态)、处理异常行为

指定三个接口的算法
继承于nav_core package
ROS学习笔记十八:Navigation Stack

cost_map

维护代价地图,用于路径规划,2张,一张global,一张local,2维,多层
static layer(map)
静态地图,订阅/map topic,存储不变信息
obstacle layer
根据当前的传感器扫描到的障碍生成的地图,动态,支持3维信息建图
inflation layer
膨胀,机器人的中心点没有碰到墙不代表边没有碰到墙,把障碍物向外膨胀一圈,把安全范围扩大,防止机器人的外壳与墙壁发生碰撞