ros入门教程(十二)-- Navigation

Navigation Stack

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.
图片来自于课程视频截图

发布了43 篇原创文章 · 获赞 20 · 访问量 1465

猜你喜欢

转载自blog.csdn.net/Chen_2018k/article/details/104391233