ROS中move_base框架

  • Post author:
  • Post category:其他

 

文章引用古月居 https://www.guyuehome.com/36322

在使用ROS系统实现导航功能的时候,我们发布一个goal的内容,这个话题的内容由坐标点(右手坐标系)和姿态(四元数)组成,是机器人将要前往的坐标点数值及达到这个坐标点的时候,机器人处于什么样的一个姿态!在前往这个点的过程当中,我们需要通过map_server地图服务器来加载更新地图数据,我们需要传感器数据(LaserScan或者PointCloud)来感知环境,我们需要里程计(编码器计数,好点的加个IMU)数据来进行位置和姿态估计,机器人中心点坐标和各个传感器坐标、以及机器人在地图上的位置,是通过tf来描述,机器人在地图上的位置,是通过amcl来实现定位。在前往目标点的过程当中,会根据这些数据发布一个cmd_vel给底盘驱动器来执行。

在这个框架的里面,分为global_planner全局规划器、global_costmap全局代价地图和local_planner局部规划器和local_costmap局部代价地图,以及recovery_behaviors自恢复机制。

机器人起始是一个坐标点,达到的位置是一个坐标点。在这两点所规划的路线就是全局路线,全局代价地图就是整个地图。在ROS下我们使用的是栅格地图,分为障碍物区域、可行驶区域、未知区域

机器人在执行全局规划好的路线时,外界环境可能出现变化(比如出现一个人、或者增加了障碍物)导致无法通过等情况都是有可能的。机器人在执行路线的时候,也是一段一段的来执行,在某一段的情况下,就需要通过局部代价地图来进行局部路径规划。

 

recovery_behaviors自恢复机制很有用,当机器人定位丢失的情况下,就会启动自恢复机制。这个时候你会发现机器人会原地转圈,尝试着找到一个相对准确的定位。其实很多情况下是姿态问题才导致定位丢失,坐标数值的话,基本你不是抱着车跑的情况下,坐标基本不会丢。所以做多传感融合还是十分有必要的。

那么自己写的算法怎么加入到ROS系统下,先别急!我们再来聊两个东西DWA(Dynamic Window Approach,动态窗口方法)路径规划算法和TEB(Timed Elastic Band)路径规划算法,MPC(Model Predictive Control,模型预测控制)路径规划算法也不错!这三个是现在ROS用的最多的三个,也是开源的,其中DWA局部路径规划器可以说是最基础应用到的。

机器人在获得目的地信息后,首先经过全局路径规划规划出一条大致可行的路线,然后调用局部路径规划器根据这条路线及costmap的信息规划出机器人在局部时做出具体行动策略。在ROS中每当move_base处于规划状态就调用DWA算法计算出一条最佳的速度指令,发送给机器人运动底盘执行。

在ros move base控制循环中会在规划出新的路径时,将新的全局路径利用setPlan传给DWAPlannerROS,直接保存为global_plan_。此时的路径时相对于全局地图的全局坐标系的(通常为”map”)。在计算速度前,会先将全局路径映射到局部地图坐标系下(通常为“odom”),在getLocalPlan中,先将较长的全局路径映射并截断到局部地图内(即坐标系转换为局部地图,且范围完全在局部地图内,超出地图的则抛弃,局部地图为costmap),局部地图使用的是rolling_window。然后,裁减全局路径和局部路径(与机器人当前位置距离超过1m的旧的路径会被裁减掉)。有了局部的目标点,就可以做规划了。