type
status
date
slug
summary
tags
category
icon
password

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的传感器输入是存在噪声的,另外就是小车的定位本质上也是有误差存在的。