ROS学习笔记十八:Navigation Stack
navigation
metapackage 功能包集合
2D导航模块
输入是odometry、sensor、给定目标
输出安全的速度指令发给移动底盘
包含了许多pakcage
- amcl
自适应蒙特卡洛定位 - base_local_planner 规划器
- carrot_planner
- dwa_local_planner
- map_server 提供已知的地图
……
navigation提供的功能大致是和路劲规划、导航、机器人运动状态调整功能相关。
工作原理:
中心的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
cost_map
维护代价地图,用于路径规划,2张,一张global,一张local,2维,多层
static layer(map)
静态地图,订阅/map topic,存储不变信息
obstacle layer
根据当前的传感器扫描到的障碍生成的地图,动态,支持3维信息建图
inflation layer
膨胀,机器人的中心点没有碰到墙不代表边没有碰到墙,把障碍物向外膨胀一圈,把安全范围扩大,防止机器人的外壳与墙壁发生碰撞