Navigation Stack
A 2D navigation stack that takes in information from odometry, sensor streams, and a goal pose and outputs safe velocity commands that are sent to a mobile base.
工作原理
位于正中的方框是move_base节点,负责整体的导航规划。里面的几个白色圆圈是该node的插件,不是独立的node。灰色方块是可选部分。蓝色方块是必须要给出的信息,且这些信息依赖于自己的平台,如 odometry 等。
输入:
/tf
: 机器人各个关节之间的关系,odom和map之间的关系等odom
:里程计的信息/map
:可以由map_server或gmapping或karto来提供sensor
: 其他传感器的数据
输出:
- cmd_vel:对底盘的控制信息
move_base
move_base 有三个功能:全局规划(静态)、局部规划(动态)、处理异常行为
中间的就是move_base, 其实它是有三个接口需要我们来指定:
- Base Local Planner
- Base Global Planner
- Recovery Behavior
costmap
准确的说,costmap只是move_base的一个插件,这个插件维护了整个代价地图。之前提到的map是全局的,而此处的map只是给导航用的。costmap只用于路径规划,有两张(global和loacl),2维,多层。
多层具体可以有多少层呢,一般有以下三层可以选:
- static layer
其实就是指之前的map静态信息,可以直接订阅/map topic, 然后把信息存储起来 - obstacle layer
根据当前传感器扫描到的障碍,从而生成地图,是动态的。支持3D点云的投影 - inflation layer
因为机器人有自己的体积,所以该层的意义在于,它使得地图的位置膨胀一圈以保证机器人在安全范围内,避免碰撞。
MapServer
用来给机器人提供地图,往往和AMCL搭配一起使用。根据MapServer提供的地图,用AMCL判断当前的位置。
该node和SLAM里的Gmapping、karto等结构类似。
常用指令
$ rosrun map_server map_server my_map.yaml # 启动map_server, 发布地图
$ rosrun map_server map_server [-f my_map] # 保存地图
AMCL
框架和之前SLAM算法类似
AMCL会对自己的位置偏移做一个预测和纠正,原理如下:
转载请注明出处。
本文总结于中国大学MOOC《机器人操作系统入门》
链接: link.
图片来自于课程视频截图