ROS学习笔记(7):Navigation 导航
发布日期:2021-10-03 22:59:06 浏览次数:28 分类:技术文章

本文共 3650 字,大约阅读时间需要 12 分钟。

目录


8 Navigation

Navigation是机器人最基本的功能之一,ROS为我们提供了一整套Navigation的解决方案,包括全局与局部的路径规划、代价地图、异常行为恢复、地图服务器等。这个功能放在Navigation Stack这个ROS的metapackage中,里面包含了路径规划、定位、地图、异常行为恢复等方面的package。

包名

功能

amcl

定位

fake_localization

定位

map_server

提供地图

move_base

路径规划节点

nav_core

路径规划的接口类,包括base_local_planner、

base_global_planner和recovery_behavior三个接口

base_local_planner

实现了Trajectory Rollout和DWA两种局部规划算法

dwa_local_planner

重新实现了DWA局部规划算法

parrot_planner

实现了较简单的全局规划算法

navfn

实现了Dijkstra和A*全局规划算法

global_planner

重新实现了Dijkstra和A*全局规划算法

clear_costmap_recovery

实现了清除代价地图的恢复行为

rotate_recovery

实现了旋转的恢复行为

move_slow_and_clear

实现了缓慢移动的恢复行为

costmap_2d

二维代价地图

voxel_grid

三维小方块

robot_pose_ekf

机器人位姿的卡尔曼滤波

 

8.1 Navigation工作框架

输入:

  • /tf :提要提供的tf包括 map_frame 、 odom_frame 、 base_frame 以及机器人各关节之间的完整的一棵tf树。
  • /odom :里程计信息
  • /scan 或 /pointcloud :传感器的输入信息,最常用的是激光雷达(sensor_msgs/LaserScan类型),也有用点云数据(sensor_msgs/PointCloud)的。
  • /map :地图,可以由SLAM程序来提供,也可以由 map_server 来指定已知地图。

     以上四个Topic是必须持续提供给导航系统的,下面一个是可随时发布的topic:

  • move_base_simple/goal :目标点位置。

输出:

  • /cmd_vel : geometry_msgs/Twist 类型,为每一时刻规划的速度信息。格式如下:

geometry_msgs/Vector3 linear

  float64 x

  float64 y

  float64 z

geometry_msgs/Vector3 angular

  float64 x

  float64 y

  float64 z

move_base提供的Service

  • make_plan: nav_msgs/GetPlan类型,请求为一个目标点,响应为规划的轨迹,但不执行该轨迹。
  • clear_unknown_space: std_srvs/Empty类型,允许用户清除未知区域地图。
  • clear_costmaps: std_srvs/Empty类型,允许用户清楚代价地图上的障碍物。

8.2 move_base

move_base是Navigation中的核心节点,它在导航的任务中处于支配地位,其他的一些package都是它的插件。

move_base要运行起来,需要选择好插件,包括三种插件: base_local_planner 、base_global_planner 和 recovery_behavior ,这三种插件都得指定,否则系统会指定默认值。Navigation为我们提供了不少候选的插件,可以在配置move_base时选择。

base_local_planner插件:

  • base_local_planner: 实现了Trajectory Rollout和DWA两种局部规划算法
  • dwa_local_planner: 实现了DWA局部规划算法,可以看作是base_local_planner的改进版本

base_global_planner插件:

  • parrot_planner: 实现了较简单的全局规划算法
  • navfn: 实现了Dijkstra和A*全局规划算法
  • global_planner: 重新实现了Dijkstra和A*全局规划算法,可以看作navfn的改进版

recovery_behavior插件:

  • clear_costmap_recovery: 实现了清除代价地图的恢复行为
  • rotate_recovery: 实现了旋转的恢复行为
  • move_slow_and_clear: 实现了缓慢移动的恢复行为

costmap插件:

      该插件默认已经选择好,默认即为costmap_2d,不可更改。

在move_base的参数设置里可以选择插件。由于要配置的参数太多,通常会将配置写在一个yaml文件中,我们用 param/move_base_params.yaml 来保存以上参数。

8.3 Costmap

ROS里的地图就是 /map 这个topic,它也是一张图片,一个像素代表了实际的一块面积,用灰度值来表示障碍物存在的可能性。然而在实际的导航任务中,光有一张地图是不够的,机器人需要能动态的把障碍物加入,或者清楚已经不存在的障碍物,有些时候还要在地图上标出危险区域,为路径规划提供更有用的信息。

因为导航的需要,所以出现了代价地图。代价地图可以理解为,在 /map 之上新加的另外几层地图,不仅包含了原始地图信息,还加入了其他辅助信息。

代价地图有以下特点:

1.首先,代价地图有两张,一张是 local_costmap ,一张是 global_costmap ,分别用于局部路径规划器和全局路径规划器,而这两个costmap都默认并且只能选择 costmap_2d 作为插件。

2. 无论是 local_costmap 还是 global_costmap ,都可以配置他们的Layer,可以选择多个层次。  

      costmap的Layer包括以下几种:

  • Static Map Layer:静态地图层,通常都是SLAM建立完成的静态地图。
  • Obstacle Map Layer:障碍地图层,用于动态的记录传感器感知到的障碍物信息。
  • Inflation Layer:膨胀层,在以上两层地图上进行膨胀(向外扩张),以避免机器人的外
  • 壳会撞上障碍物。
  • Other Layers:你还可以通过插件的形式自己实现costmap,目前已有 Social Costmap
  • Layer 、 Range Sensor Layer 等开源插件。

      可以同时选择多个Layer并存。

costmap配置也同样用yaml 来保存,由于costmap通常分为local和global的coastmap,我们习惯把两个代价地图分开。

8.4 map_server

在固定场景下,我们已经知道了地图(无论通过SLAM还是测量),这样机器人每次启动最好就能直接加载已知地图,而不是每次开机都重建。在这种情况下,就需要有一个节点来发布 /map ,提供场景信息。map_server就是这样一个功能包,它可以将已知地图发布出来,供导航和其他功能使用,也可以保存SLAM建立的地图。

要让map_server发布 /map ,需要输入给它两个文件:

  • 地图文件,通常为pgm格式;
  • 地图的描述文件,通常为yaml格式

有了以上两个文件,就可以通过指令来加载这张地图, map_server相关命令如下:

  • rosrun map_server map_server  Software_Museum.yaml    加载自定义的地图
  • rosrun map_server map_saver -f mymap     保存当前地图为mymap.pgn和mymap.yaml

map_server会提供以下topic和service:

  • Topic
  • /map_metadata: 发布地图的描述信息
  • /map: 发布锁存的地图消息
  • Service
  • static_map: 用于请求和响应当前的静态地图。

Param:map_server有一个参数需要设置,就是发布地图的frame。

~frame_id: string类型,默认为map。 绑定发布的地图与tf中的哪个frame,通常就是map。

8.5 AMCL 定位

Adaptive Mentcarto Localization(AMCL):蒙特卡洛自适应定位是一种很常用的定位算法,它通过比较检测到的障碍物和已知地图来进行定位。

AMCL上的通信架构如下图:

与之前SLAM的框架很像,最主要的区别是 /map 作为了输入,而不是输出,因为AMCL算法只负责定位,而不管建图。

转载地址:https://blog.csdn.net/lclfans1983/article/details/105399759 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:基于systemback的ROS系统镜像备份和安装方案
下一篇:ROS学习笔记(6):ROS激光SLAM

发表评论

最新留言

不错!
[***.144.177.141]2024年04月03日 07时38分04秒