type
status
date
slug
summary
tags
category
icon
password
dwa 介绍
- dwa原理介绍: 【ROS 2D导航原理系列(六)|局部路径规划-DWA算法】
- 本文内容基于ros navigation下的move base框架,其中的dwa local planner就是本文的dwa
- 如何调参
- 对于dwa而言,似乎很多参数都是互相关联的,所以在调整参数时,最好是一个参数一个参数进行调整,先调整一个参数到合适的值,再去调整下一个。
- 要调整dwa的参数,首先需要了解各个参数的含义:
首先是速度相关的参数,如下:
参数名 含义 acc_lim_x (m/s^2) 机器人在x方向的加速度限制 acc_lim_y (m/s^2) 机器人在y方向的加速度限制 acc_lim_th (r/s^2) 机器人角加速度限制的绝对值,这个值肯定大于0 max_vel_trans (m/s) 机器人最大平移速度限制 min_vel_trans (m/s) 机器人最小平移速度限制 max_vel_x (m/s) 机器人在x方向上的最大速度 min_vel_x (m/s) 机器人在x方向上的最小速度 max_vel_y (m/s) 机器人在y方向上的最大速度 min_vel_x (m/s) 机器人在y方向上的最小速度 max_rot_vel (r/s) 机器人最大角速度 min_rot_vel (r/s) 机器人最小角速度
首先,在调试这组参数的时候,需要把值尽量设置的大一点,不然小车会出现一卡一卡的情况,或者根本就不动,然后再根据你的需要调整这些速度的值。
恩,经验之谈,加速度最大还是尽量大一点,速度则可以稍微小一点,不然小车还是会一卡一卡的。
与目标点相关的参数
参数名 | 含义 |
yaw_goal_tolerance | 小车到达目标点后在角度上与目标点的容忍度 |
xy_goal_tolerance | 小车到达目标点后在x与y方向上与目标点的容忍度 |
latch_xy_goal_tolerance (布尔值) | 是否锁定目标公差,当目标公差被锁定时,如果机器人到达目标 xy 位置,它将简单地旋转到位,即使它在这样做时最终超出目标公差。 |
理论上,小车不可能做到百分百达到目标点,所以需要设置一个容忍度,当小车与目标点的差距在容忍度范围内时,dwa则认为小车达到了目标点。
所以在调整这组参数时,一开始最好也先设置大一点,再慢慢减小,需要注意的是,当参数过小时,小车接近目标点后会产生振荡现象。
dwa的向前模拟参数
参数名 | 含义 |
sim_time | 向前模拟轨迹的时间 |
sim_granularity | 向前模拟轨迹的点的间距 |
vx_samples | 在x轴向速度空间中的样本数 |
vy_samples | 在y轴向速度空间中的样本数 |
vth_samples | 在角速度空间中的样本数 |
controller_frequency | 控制器频率 |
这组向前模拟参数会影响dwa每次规划的路径长短,当向前模拟时间越长时,dwa会规划出更长的路径,反之,时间越短,路径就更短。并且,这个模拟时间越长,每次规划也要消耗更多的cpu。
根据我的经验,这个模拟时间最少要大于1.5s,最多不要超过4s,当时间过短时,规划出的路径非常短,小车可能不会动,当时间过长时,不利于小车通过较狭窄的地方。
另外,控制器频率最好也高一点,比如20~30HZ的样子,这样小车走起来会比较顺滑。
至于样本数和点的间距,似乎调整下来没啥大区别。
轨迹评分参数
参数名 | 含义 |
path_distance_bias | 局部路径保持在全局路径附近的权重 |
goal_distance_bias | 控制器达到目标点的程度的权重 |
occdist_scale | 控制器避开障碍物的权重 |
forward_point_distance | 小车中心点到放置附加得分点的距离 |
stop_time_buffer | 当轨迹有效时,小车必须在碰撞前的多长时间停止 |
scaling_speed | 开始缩放小车足迹时,速度的绝对值 |
max_scaling_factor | 缩放机器人足迹的权重 |
publish_cost_grid | 是否发布成本点云图 |
这组参数其实主要关注前面四个即可,其计算公式为:
需要注意的是,
path_distance_bias
参数是值越大则权重越大,而goal_distance_bias
则是值越小权重越小,这两个权重越大,则dwa规划出来的路线会越贴近全局路径。- 一些需要关注的事情
- 需要注意的是,dwa属于局部路径规划,所以其避障依赖
move base
框架下的obstacle layer
,这个obstacle layer
属于costmap的一层,它可以使用LaserScan
或者PointCloud
数据作为输入,所以这个layer能使用雷达或者任何能将数据转换成PointCloud
的传感器作为输入(比如:摄像头),而关于obstacle layer
的配置,善用搜索引擎即可找到答案。需要注意到obstacle layer
似乎对于像cartographer
输出的去畸变以及优化后的PointCloud
数据似乎兼容性不好,几乎无法使用。 - 实际使用中会发现,dwa是先到达目标点,然后再旋转到与目标点相同的角度上的。
- dwa在启动时,往往会走一段小弧线再走直线。
- 由于基于
move base
框架,所以在rviz
中,当小车的model边界(Polygon)与obstacle layer
发生碰撞时,move base
会自杀,然而现实中可能此时小车并未碰撞到障碍物,因为obstacle layer
的传感器输入是存在噪声的,另外就是小车的定位本质上也是有误差存在的。