ROS与navigation教程-dwa_local_planner(DWA)
说明:
介绍dwa_local_planner(DWA)的概念和相关知识。
代码库
概要
该包使用DWA(Dynamic Window Approach)算法实现了平面上移动机器人局部导航功能。
给定一个全局路径规划和代价地图,局部路径规划器生成的速度命令发送到移动基座。
该包支持任何footprint表示为凸多边形或圆形的机器人,同时将其配置公开为可在启动文件中设置的ROS参数。 该规划器的参数也可重新动态配置。
该包的ROS封装继承了BaseLocalPlanner接口。
dwa_local_planner包提供了一个驱动平面中移动基座的控制器,其将路径规划器和机器人连接到一起。
移动过程中,路径规划器会在机器人周围创建可以表示为栅格地图的评价函数。其中控制器的主要任务就是利用评价函数确定发送给基座的速度(dx,dy,dtheta)。
DWA(Dynamic Window Approach)算法的基本思路如下:
在机器人控制空间(dx,dy,dta)中离散采样。
对于每个采样速度,从机器人的当前状态执行正向移动模拟,以预测如果在一些(短)时间段内应用采样速度将会发生什么。
从以下方面来评价正向移动模拟产生的每个轨迹:接近障碍物,接近目标,接近全局路径和速度。 放弃非法轨迹(与障碍物相撞的轨迹)。
选择最高得分的轨迹,并将相关速度发送到移动基座。
冲洗并重复。
DWAPlannerROS
dwa_local_planner::DWAPlannerROS对象是dwa_local_planner::DWAPlanner对象的ROS封装,在初始化时指定的ROS命名空间使用,继承了nav_core::BaseLocalPlanner接口。
创建dwa_local_planner::DWAPlannerROS对象的例子:
#include
#include
#include
...
tf::TransformListener tf(ros::Duration(10));
costmap_2d::Costmap2DROS costmap("my_costmap", tf);
dwa_local_planner::DWAPlannerROS dp;
dp.initialize("my_dwa_planner", &tf, &costmap);
( 1 ) API Stability