【ROS】DWA 规划器
【ROS】DWA 规划器
- 前言
- DWA 规划器概述
- 轨迹生成
- 轨迹评估
- 如何使用 DWA 规划器
- 示例:配置 DWA 规划器的启动文件
- DWA 参数说明
- DWA 参数文件示例 `dwa_local_planner_params.yaml`
- DWA规划器快速调参
- 在 RViz 中显示 DWA 的轨迹路径
前言
本文将介绍 ROS 导航系统中常用的一种局部规划器 —— DWA 规划器(Dynamic Window Approach Planner)。
DWA 规划器采用动态窗口算法:在局部路径规划范围内生成一个动态窗口,并在该窗口中模拟多条备选轨迹。随后,根据每条轨迹与全局路径的贴合程度、轨迹终点与目标点的距离以及轨迹与障碍物之间的距离等因素进行综合评估,最终选择一条兼顾目标引导性与避障安全性的最优执行轨迹。
我的环境:
本教程使用的环境是:实体 ROS 小车,Ubuntu 18.04,ROS1 Melodic
参考资料:
- ROS导航系统 | DWA规划器 | DWA Planner
- ROS Wiki - dwa_local_planner
DWA 规划器概述
DWA(Dynamic Window Approach,动态窗口法)是一种常用的局部路径规划算法,主要用于机器人在避障环境中的运动控制。
它的核心思想是:在当前时刻,根据机器人动力学约束,生成一系列可能的速度和轨迹选项,并从中挑选最优轨迹执行。
轨迹生成
在生成轨迹时,DWA 会综合考虑以下因素:
- 当前速度和加速度限制(不能加速太猛)
- 与障碍物的距离(需要保留刹车距离)
- 尽快靠近目标点
这些条件限定了一个“动态窗口”,在这个窗口内生成可能的运动轨迹。
轨迹评估
生成轨迹后,DWA 会对它们进行评分,从中挑选最优轨迹。主要评估标准包括:
- 与全局路径的贴合程度
- 距离目标点的远近
- 与障碍物的距离(越远越安全)
最终选出一条在速度、路径目标、避障安全性之间综合表现最好的轨迹。
特点说明:
由于 DWA 更关注轨迹的平滑性和动态避障,实际轨迹往往不会严格贴着全局路径走,而是优先选择更安全或更容易控制的路线。
如何使用 DWA 规划器
在 move_base
中启用 DWA(Dynamic Window Approach)规划器非常简单,只需完成以下两步配置:
-
指定使用 DWA 规划器
<param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
这行代码告诉
move_base
使用 DWA 作为局部路径规划器。 -
加载 DWA 规划器的参数文件
<rosparam file="$(find your_robot_navigation)/config/dwa_local_planner_params.yaml" command="load" />
这会将你设置好的 DWA 参数加载进 ROS 参数服务器中,确保规划器按照你的配置运行。
示例:配置 DWA 规划器的启动文件
下面是一个完整的 launch
文件示例,展示如何在 move_base
中集成 DWA 规划器:
<launch><node name="move_base" pkg="move_base" type="move_base" output="screen"><param name="base_global_planner" value="global_planner/GlobalPlanner" /><!-- 局部规划器配置:使用 DWA Planner--><param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" /><rosparam file="$(find your_robot_navigation)/config/costmap_common_params.yaml" command="load" /><rosparam file="$(find your_robot_navigation)/config/global_costmap.yaml" command="load" /><rosparam file="$(find your_robot_navigation)/config/local_costmap.yaml" command="load" /><!-- 加载 DWA 规划器的参数文件 --><rosparam file="$(find your_robot_navigation)/config/dwa_local_planner_params.yaml" command="load" /></node>
</launch>
配置完成后,move_base
就会使用你设定的 DWA 规划器参数进行本地路径规划和避障控制了。
DWA 参数说明
DWA(动态窗口算法)有多种参数可供调整,详细参数说明可参考 ROS Wiki - dwa_local_planner 2.2小节。
DWA 主要有以下几类参数:
-
速度参数
设定机器人的最大速度、加速度等,依据机器人本身的性能来调整。 -
目标容差参数
设定机器人到达目标点的容差范围,即机器人何时可以认为已经到达目标点。 -
向前模拟参数
设置生成轨迹时的长度和数量,决定了机器人在模拟中会生成多少条可选轨迹。 -
轨迹评分参数
==用于在多条备选轨迹中选择最优执行轨迹。==主要考虑:- 轨迹与全局路径的接近程度
- 轨迹到达目标点的接近程度
- 轨迹与障碍物的距离(避障能力)
这三项的权重决定了 DWA 如何从生成的轨迹中挑选最终执行的路径。
-
防震动参数
控制轨迹平滑性,减少机器人运动过程中的震动。 -
辅助调试选项
决定是否在 RViz 中显示备选轨迹、障碍物代价地图、以及 DWA 基础坐标系(odom)。 -
底盘类型选择
选择是否切换为全向底盘(Omni)或差分驱动底盘。
对于初学者来说,最关键的参数是 轨迹评分参数 中的前三个权重:靠近全局路径、接近导航目标点、避障。调整这些参数可以决定如何从备选轨迹中选出最优执行路径。
DWA 参数文件示例 dwa_local_planner_params.yaml
DWAPlannerROS:# 速度参数max_vel_x: 0.3 # 最大x方向速度min_vel_x: -0.05 # 最小x方向速度 (设置负数将会允许倒车)max_vel_y: 0.0 # 差分驱动机器人的最大y方向速度为 0.0min_vel_y: 0.0 # 差分驱动机器人的最小y方向速度为 0.0max_vel_trans: 0.3 # 最大平移速度min_vel_trans: 0.01 # 最小平移速度 (建议不要设置为 0.0 )trans_stopped_vel: 0.1 # 当平移速度小于这个值,就让机器人停止acc_lim_trans: 2.5 # 最大平移加速度acc_lim_x: 2.5 # x方向的最大加速度上限acc_lim_y: 0.0 # y方向的加速度上限 (差分驱动机器人应该设置为 0.0 )max_vel_theta: 1.0 # 最大旋转速度,略小于基座的功能min_vel_theta: -0.01 # 当平移速度可以忽略时的最小角速度theta_stopped_vel: 0.1 # 当旋转速度小于这个值,就让机器人停止acc_lim_theta: 6.0 # 旋转的加速度上限# 目标容差参数yaw_goal_tolerance: 0.1 # 目标航向容差xy_goal_tolerance: 0.05 # 目标xy容差latch_xy_goal_tolerance: false # 到达目标容差范围后,停止移动,只旋转调整航向# 向前模拟参数sim_time: 1.7 # 模拟时间,默认值 1.7vx_samples: 3 # x方向速度采样数,默认值 3vy_samples: 1 # 差分驱动机器人y方向速度采样数,只有一个样本vtheta_samples: 20 # 旋转速度采样数,默认值 20# 轨迹评分参数path_distance_bias: 32.0 # 靠近全局路径的权重,默认值 32.0goal_distance_bias: 24.0 # 接近导航目标点的权重,默认值 24.0occdist_scale: 0.01 # 控制器避障的权重,默认值 0.01forward_point_distance: 0.325 # 从机器人到评分点的距离,默认值 0.325stop_time_buffer: 0.2 # 在碰撞前机器人必须停止的时间长度,留出缓冲空间,默认值 0.2scaling_speed: 0.25 # 缩放机器人速度的绝对值,默认值 0.25max_scaling_factor: 0.2 # 机器人足迹在高速时能缩放的最大系数,默认值 0.2# 防振动参数oscillation_reset_dist: 1.05 # 重置振动标志前需要行进的距离,默认值 0.05# 辅助调试选项publish_traj_pc: true # 是否在 Rviz 里发布轨迹publish_cost_grid_pc: true # 是否在 Rviz 里发布代价代价值网格global_frame_id: odom # 基础坐标系# 差分驱动机器人配置holonomic_robot: false # 是否为全向移动机器人
DWA规划器快速调参
在运行DWA规划器进行导航时,可以通过启动一个 rqt_reconfigure 节点来快速调整参数。使用以下指令启动:
rosrun rqt_reconfigure rqt_reconfigure
启动后,左侧选择 move_base
并选中 DWAPlannerROS
,在右侧即可动态调整参数。
调整完参数后,可以在 RViz 中观察导航效果,快速验证参数调整对导航的影响,提升调试效率。
在 RViz 中显示 DWA 的轨迹路径
为了在 RViz 中观察 DWA 规划器生成的路径和备选轨迹,可以按照以下步骤进行设置:
1. 显示局部规划路径(即实际执行轨迹)
- 点击左下角的 “Add” 按钮;
- 添加 Path 类型;
- 设置订阅话题为:
/move_base/DWAPlannerROS/local_plan
; - 在样式中选择 Billboards(粗线条),这样轨迹显示更清晰。
2. 显示 DWA 的备选轨迹集合
- 再次点击 “Add”;
- 添加 PointCloud2 类型;
- 设置订阅话题为:
/move_base/DWAPlannerROS/trajectory_cloud
。