Drone DWA
本项目实现了无人机路径规划的 动态窗口法 (DWA)。以下是一些关键资源:
理论
动态窗口法(DWA)在三维路径规划中的改进与实现
引言
动态窗口法(Dynamic Window Approach, DWA)是一种经典的机器人运动规划算法,广泛应用于实时避障与目标导航问题。其核心思想是在动态约束下,对速度空间内的可能值进行采样,通过轨迹预测和评价选择最优运动指令。然而,传统DWA算法主要面向二维平面场景,对于三维复杂环境(如无人机路径规划)存在一定的局限性。为此,本文基于DWA的核心思想,结合速度、加速度限制以及障碍物限制,设计了一种改进的三维动态窗口法,并通过优化轨迹评价函数实现高效、安全的路径规划。
DWA算法的核心步骤
动态窗口法的基本步骤包括动态窗口定义、轨迹预测、轨迹评价和最优轨迹选择。这些步骤为无人机的三维路径规划提供了系统化的解决方案。
1. 定义动态窗口
动态窗口是速度、加速度和障碍物限制下的速度取值范围。具体定义如下:
-
速度限制
无人机的速度范围由物理性能决定:
v x , v y , v z ∈ [ v min , v max ] v_x, v_y, v_z \in [v_{\text{min}}, v_{\text{max}}] vx,vy,vz∈[vmin,vmax] -
加速度限制
动态窗口进一步受加速度约束,定义为:
v x , v y , v z ∈ [ v current − a max ⋅ Δ T , v current + a max ⋅ Δ T ] v_x, v_y, v_z \in [v_{\text{current}} - a_{\text{max}} \cdot \Delta T, v_{\text{current}} + a_{\text{max}} \cdot \Delta T] vx,vy,vz∈[vcurrent−amax⋅ΔT,vcurrent+amax⋅ΔT] -
障碍物限制
为保证安全性,动态窗口中的速度组合需满足障碍物安全距离的限制:
d min ( v x , v y , v z ) ≥ d safe d_{\text{min}}(v_x, v_y, v_z) \geq d_{\text{safe}} dmin(vx,vy,vz)≥dsafe
2. 轨迹预测
根据动态窗口内的速度组合,采用无人机的运动学模型预测其未来轨迹。轨迹的计算公式如下:
x
k
+
1
=
x
k
+
v
k
⋅
Δ
T
,
y
k
+
1
=
y
k
+
v
k
⋅
Δ
T
,
z
k
+
1
=
z
k
+
v
z
⋅
Δ
T
.
\begin{aligned} x_{k+1} &= x_k + v_k \cdot \Delta T, \\ y_{k+1} &= y_k + v_k \cdot \Delta T, \\ z_{k+1} &= z_k + v_z \cdot \Delta T. \end{aligned}
xk+1yk+1zk+1=xk+vk⋅ΔT,=yk+vk⋅ΔT,=zk+vz⋅ΔT.
3. 轨迹评价
轨迹评价是DWA算法的核心环节,衡量每条轨迹的优劣。本文改进后的评价函数综合考虑了目标距离、障碍物距离和时间效率,具体定义如下:
G
(
trajectory
)
=
α
⋅
goal_score
+
β
⋅
obstacle_score
+
γ
⋅
speed_score
G(\text{trajectory}) = \alpha \cdot \text{goal\_score} + \beta \cdot \text{obstacle\_score} + \gamma \cdot \text{speed\_score}
G(trajectory)=α⋅goal_score+β⋅obstacle_score+γ⋅speed_score
其中,
α
,
β
,
γ
\alpha, \beta, \gamma
α,β,γ 为评价权重,分别反映目标距离、障碍物安全性和速度偏好的重要性。
以下详细介绍三个评分的计算方法。
目标得分(Goal Score)
目标得分衡量轨迹终点与目标点的距离,同时引入理论最优路径以提高评价的物理意义。
-
理论最优路径的最远点
根据无人机的最大速度和时间步长,计算无人机在目标方向上理论上能够达到的最远点:
reachable_point = start_point + d ⃗ goal ⋅ ( robot.v_max ⋅ robot.dt ) \text{reachable\_point} = \text{start\_point} + \vec{d}_{\text{goal}} \cdot (\text{robot.v\_max} \cdot \text{robot.dt}) reachable_point=start_point+dgoal⋅(robot.v_max⋅robot.dt)
其中:- start_point \text{start\_point} start_point 为轨迹的起点;
- d ⃗ goal \vec{d}_{\text{goal}} dgoal 是起点到目标点的单位方向向量。
-
轨迹终点与目标点的距离
计算轨迹终点与目标点的欧几里得距离:
goal_distance = ∥ trajectory [ − 1 ] − goal ∥ \text{goal\_distance} = \|\text{trajectory}[-1] - \text{goal}\| goal_distance=∥trajectory[−1]−goal∥ -
最小目标距离
理论最优路径的最小目标距离为最远点与目标点的距离:
min_goal_distance = ∥ reachable_point − goal ∥ \text{min\_goal\_distance} = \|\text{reachable\_point} - \text{goal}\| min_goal_distance=∥reachable_point−goal∥ -
归一化目标得分
根据实际目标距离与理论最优距离计算得分:
goal_score = min_goal_distance goal_distance + ϵ \text{goal\_score} = \frac{\text{min\_goal\_distance}}{\text{goal\_distance} + \epsilon} goal_score=goal_distance+ϵmin_goal_distance
障碍物得分(Obstacle Score)
障碍物得分反映轨迹点与障碍物之间的距离,定义为:
-
遍历轨迹点和障碍物
对轨迹中每个点,计算其到所有障碍物的最小距离:
d t i = { ∥ p t − o i ∥ − r , 球形障碍物 max ( 0 , ∥ p t x y − o i x y ∥ − r ) , 圆柱形障碍物(满足高度条件) ∞ , 未知类型或超出高度范围 d_t^i = \begin{cases} \|\mathbf{p}_t - \mathbf{o}_i\| - r, & \text{球形障碍物} \\ \max\left(0, \|\mathbf{p}_t^{xy} - \mathbf{o}_i^{xy}\| - r \right), & \text{圆柱形障碍物(满足高度条件)} \\ \infty, & \text{未知类型或超出高度范围} \end{cases} dti=⎩ ⎨ ⎧∥pt−oi∥−r,max(0,∥ptxy−oixy∥−r),∞,球形障碍物圆柱形障碍物(满足高度条件)未知类型或超出高度范围 -
根据距离定义得分
根据最小距离与安全距离的关系,障碍物得分定义为:
obstacle_score = { min_obstacle_distance , 若min_obstacle_distance < 0 min_obstacle_distance safe_distance , 若 0 ≤ min_obstacle_distance < safe_distance 1.0 , 若min_obstacle_distance ≥ safe_distance \text{obstacle\_score} = \begin{cases} \text{min\_obstacle\_distance}, & \text{若} \text{min\_obstacle\_distance} < 0 \\ \frac{\text{min\_obstacle\_distance}}{\text{safe\_distance}}, & \text{若} 0 \leq \text{min\_obstacle\_distance} < \text{safe\_distance} \\ 1.0, & \text{若} \text{min\_obstacle\_distance} \geq \text{safe\_distance} \end{cases} obstacle_score=⎩ ⎨ ⎧min_obstacle_distance,safe_distancemin_obstacle_distance,1.0,若min_obstacle_distance<0若0≤min_obstacle_distance<safe_distance若min_obstacle_distance≥safe_distance
速度得分(Speed Score)
速度得分衡量轨迹的时间效率,定义如下:
-
计算平均速度
平均速度为轨迹总距离与总时间的比值:
average_speed = total_distance total_time \text{average\_speed} = \frac{\text{total\_distance}}{\text{total\_time}} average_speed=total_timetotal_distance -
归一化速度得分
将平均速度裁剪到无人机的速度范围 [ v_min , v_max ] [\text{v\_min}, \text{v\_max}] [v_min,v_max],并归一化:
speed_score = average_speed − v_min v_max − v_min \text{speed\_score} = \frac{\text{average\_speed} - \text{v\_min}}{\text{v\_max} - \text{v\_min}} speed_score=v_max−v_minaverage_speed−v_min
4. 选择最优轨迹
通过计算所有轨迹的综合得分,选择得分最高的轨迹作为下一步的运动指令。
改进优势
-
目标导向性增强
引入理论最优路径,使轨迹评价更符合物理实际,激励无人机选择最短时间路径。 -
障碍物规避优化
精确考虑障碍物的三维结构和安全距离要求,有效提高避障能力。 -
时间效率提升
通过速度评分综合考虑轨迹的时间效率,确保无人机的运动规划高效可靠。
总结
本文提出了一种改进的动态窗口法算法,适用于三维复杂环境中的无人机实时路径规划。该算法通过目标得分、障碍物得分和速度得分的综合评价,显著提升了路径规划的可靠性和安全性。未来,可结合机器学习技术进一步优化轨迹评价函数,提高算法的鲁棒性和自适应能力,为无人机和机器人路径规划提供更广泛的应用支持。
一般障碍物的距离公式推导
在三维路径规划中,无人机可能面临多种类型的障碍物,如球形、圆柱形、或其他复杂形状。为了统一对这些障碍物的距离计算,这里推导一种通用形式的障碍物距离公式,将特定类型的障碍物转化为统一的数学表达。
1. 定义与假设
假设:
- 无人机当前轨迹点 p t = ( x t , y t , z t ) \mathbf{p}_t = (x_t, y_t, z_t) pt=(xt,yt,zt)。
- 障碍物的中心或基点为 o i = ( x i , y i , z i ) \mathbf{o}_i = (x_i, y_i, z_i) oi=(xi,yi,zi)。
- 障碍物的形状由其类型(如球体、圆柱体等)和参数(如半径 r r r 和高度 h h h)描述。
目标:
- 计算任意轨迹点 p t \mathbf{p}_t pt 到障碍物的最小安全距离 d t i d_t^i dti。
2. 一般公式定义
设障碍物的表面满足隐函数
f
(
p
t
,
o
i
)
=
0
f(\mathbf{p}_t, \mathbf{o}_i) = 0
f(pt,oi)=0,则轨迹点
p
t
\mathbf{p}_t
pt 到障碍物的距离
d
t
i
d_t^i
dti 定义为:
d
t
i
=
min
q
∈
S
∥
p
t
−
q
∥
d_t^i = \min_{\mathbf{q} \in S} \|\mathbf{p}_t - \mathbf{q}\|
dti=q∈Smin∥pt−q∥
其中:
- S S S 是障碍物的表面,由 f ( q , o i ) = 0 f(\mathbf{q}, \mathbf{o}_i) = 0 f(q,oi)=0 描述;
- q \mathbf{q} q 是障碍物表面上的点。
该公式的几何意义是轨迹点 p t \mathbf{p}_t pt 到障碍物表面 S S S 的最小距离。
3. 特定类型障碍物的距离公式
(1) 球形障碍物
球形障碍物的中心为
o
i
\mathbf{o}_i
oi,半径为
r
r
r。其表面方程为:
f
(
q
,
o
i
)
=
∥
q
−
o
i
∥
−
r
=
0
f(\mathbf{q}, \mathbf{o}_i) = \|\mathbf{q} - \mathbf{o}_i\| - r = 0
f(q,oi)=∥q−oi∥−r=0
因此,轨迹点
p
t
\mathbf{p}_t
pt 到球形障碍物的最小距离为:
d
t
i
=
∥
p
t
−
o
i
∥
−
r
d_t^i = \|\mathbf{p}_t - \mathbf{o}_i\| - r
dti=∥pt−oi∥−r
(2) 圆柱形障碍物
圆柱形障碍物以 o i = ( x i , y i , z i ) \mathbf{o}_i = (x_i, y_i, z_i) oi=(xi,yi,zi) 为底面中心,半径为 r r r,高度为 h h h。其表面包括以下部分:
-
侧面:满足水平距离为 r r r:
f side ( q , o i ) = ∥ q x y − o i x y ∥ − r = 0 f_{\text{side}}(\mathbf{q}, \mathbf{o}_i) = \|\mathbf{q}^{xy} - \mathbf{o}_i^{xy}\| - r = 0 fside(q,oi)=∥qxy−oixy∥−r=0
其中 q x y = ( x q , y q ) \mathbf{q}^{xy} = (x_q, y_q) qxy=(xq,yq) 表示点在水平面的投影。 -
底面和顶面:满足高度范围约束 z i ≤ z q ≤ z i + h z_i \leq z_q \leq z_i + h zi≤zq≤zi+h。
轨迹点 p t \mathbf{p}_t pt 到圆柱形障碍物的最小距离分以下几种情况:
- 若点在圆柱高度范围内,则距离为:
d t i = ∥ p t x y − o i x y ∥ − r d_t^i = \|\mathbf{p}_t^{xy} - \mathbf{o}_i^{xy}\| - r dti=∥ptxy−oixy∥−r - 若点高于或低于圆柱范围,则需计算到顶面或底面的最短距离:
d t i = ( ∥ p t x y − o i x y ∥ − r ) 2 + Δ z 2 d_t^i = \sqrt{(\|\mathbf{p}_t^{xy} - \mathbf{o}_i^{xy}\| - r)^2 + \Delta z^2} dti=(∥ptxy−oixy∥−r)2+Δz2
其中 Δ z = min ( ∣ z t − z i ∣ , ∣ z t − ( z i + h ) ∣ ) \Delta z = \min(|z_t - z_i|, |z_t - (z_i + h)|) Δz=min(∣zt−zi∣,∣zt−(zi+h)∣)。
(3) 其他复杂障碍物
对于复杂障碍物,其表面通常由隐式函数
f
(
q
,
o
i
)
=
0
f(\mathbf{q}, \mathbf{o}_i) = 0
f(q,oi)=0 描述。轨迹点到障碍物的距离可以通过最小化求解问题计算:
d
t
i
=
min
q
∈
S
∥
p
t
−
q
∥
d_t^i = \min_{\mathbf{q} \in S} \|\mathbf{p}_t - \mathbf{q}\|
dti=q∈Smin∥pt−q∥
这里可以采用数值优化方法(如梯度下降法或基于凸优化的方法)来求解。
4. 通用距离公式
将以上特例整合,通用障碍物距离公式可表达为:
d
t
i
=
{
∥
p
t
−
o
i
∥
−
r
,
球形障碍物
max
(
0
,
∥
p
t
x
y
−
o
i
x
y
∥
−
r
)
+
Δ
z
,
圆柱形障碍物
min
q
∈
S
∥
p
t
−
q
∥
,
其他障碍物
d_t^i = \begin{cases} \|\mathbf{p}_t - \mathbf{o}_i\| - r, & \text{球形障碍物} \\ \max\left(0, \|\mathbf{p}_t^{xy} - \mathbf{o}_i^{xy}\| - r \right) + \Delta z, & \text{圆柱形障碍物} \\ \min_{\mathbf{q} \in S} \|\mathbf{p}_t - \mathbf{q}\|, & \text{其他障碍物} \end{cases}
dti=⎩
⎨
⎧∥pt−oi∥−r,max(0,∥ptxy−oixy∥−r)+Δz,minq∈S∥pt−q∥,球形障碍物圆柱形障碍物其他障碍物
其中,
Δ
z
\Delta z
Δz 表示轨迹点到圆柱体底面或顶面的高度差,具体为:
Δ
z
=
{
0
,
z
i
≤
z
t
≤
z
i
+
h
min
(
∣
z
t
−
z
i
∣
,
∣
z
t
−
(
z
i
+
h
)
∣
)
,
否则
\Delta z = \begin{cases} 0, & z_i \leq z_t \leq z_i + h \\ \min(|z_t - z_i|, |z_t - (z_i + h)|), & \text{否则} \end{cases}
Δz={0,min(∣zt−zi∣,∣zt−(zi+h)∣),zi≤zt≤zi+h否则