欢迎光临
我们一直在努力

【一看就会】DWA动态窗口控制算法

文章目录

  • 前言
  • 一、输入输出
    • 输入
    • 输出
  • 二、逻辑
    • 第一步:构建“动态窗口”
    • 第二步:采样与轨迹推演
    • 第三步:多维度评分
    • 第四步:选择最优轨迹并输出
    • 第五步:循环
  • 总结

前言

DWA算法在机器人控制领域经常用到,尤其是nav2开源算法对其进行了升级成了DWB。 本文讲解一下这个DWA控制算法。

很多人把DWA划分在局部路径规划中,但我还是习惯把它当成一个控制算法来讲。

DWA是为了差速模型而设计的,不适用于阿克曼等模型。


一、输入输出

老规矩,还是先讲输入输出。

输入

DWA的输入主要来自三个部分: 当前机器人状态 (Odometry) 全局路径参考 (Global Plan) 局部环境感知 (Local Costmap)

输出

线速度 角速度

二、逻辑

提醒一下,全程要记得输入输出。 从输入到输出,DWA的计算可以分为五步。

第一步:构建“动态窗口”

既然是动态窗口控制算法,那首先就要解释清楚,这个动态窗口指的是速度窗口。 这个速度窗口,是机器人当前时刻,速度能达到的速度范围。 这个速度窗口有两个,一个是机器人的线速度,一个是机器人的角速度。 计算依据: 机器人的物理极限:v_min ~ v_max,ω_min ~ ω_max 当前速度:v_current、ω_current 加速度极限:acc_lim_x、acc_lim_theta 控制周期:dt(比如0.1秒)

计算公式:

v ∈ [max(v_min, v_current acc_lim_x * dt), min(v_max, v_current + acc_lim_x * dt)]
ω ∈ [max(ω_min, ω_current acc_lim_theta * dt), min(ω_max, ω_current + acc_lim_theta * dt)]

这个线速度和角速度范围就是动态窗口。

第二步:采样与轨迹推演

前面有了速度的动态窗口,DWA会均匀采样多组速度组合 (v, ω)。 例如:线速度采样 vx_samples = 20 个点,角速度采样 vtheta_samples = 20 个点 总共就有 20 × 20 = 400 组速度组合 对于每一组 (v, ω),DWA都会做轨迹推演: 假设机器人以这个恒定速度行驶一段模拟时间 sim_time(如1.7秒) 利用运动学模型(如差速轮模型),计算未来这段时内的轨迹点序列 这些轨迹点会落在局部代价地图上

这样子就出现了400条预测轨迹。

第三步:多维度评分

上一步计算出来了400条预测轨迹,这一步就需要给这些预测轨迹打分。 打分公式:

G(v, ω) = α · heading(v, ω) + β · dist(v, ω) + γ · velocity(v, ω)

评分项 含义 权重 调参效果 heading(朝向) 轨迹终点朝向与目标方向的一致性 α α越大,机器人越“执着”转向目标 dist(安全) 轨迹与最近障碍物的距离,越远分越高 β β越大,机器人越“胆小”,避障更激进 velocity(速度) 鼓励机器人跑得快 γ γ越大,机器人越“急性子”

关键机制:如果某条轨迹上的点与障碍物距离小于安全阈值,该轨迹会被直接判负分或淘汰,确保安全性优先。

而nav2中的DWB(DWA升级版),在这一项中新增了评分项: PathAlign:轨迹是否贴合全局路径 GoalDist:轨迹终点离目标点有多近

第四步:选择最优轨迹并输出

前面把400条预测轨迹都算出了分数,那这一步就选出分数最高的那条路。 然后这条路对应的(v*, ω*)就是输出的线速度和角速度指令了。

第五步:循环

进入下一个循环,继续实时计算。


总结

DWA是差速机器人运动控制中非常经典的一种算法。

赞(0)
未经允许不得转载:171主机测评 » 【一看就会】DWA动态窗口控制算法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址