赞
踩
《The Dynamic Window Approach To Collision Avoidance》
《The Dynamic Window Approach To Collision Avoidance》
《State Space Sampling of Feasible Motions for High-Performance Mobile Robot Navigation in ComplexEnvironments》
DWA局部路径规划算法论文阅读:The Dynamic Window Approach to Collision Avoidance。
AtsushiSakai/PythonRobotics
七种代价函数的选取
机器人获得目的地信息后,首先全局路径规划规划出一条大致可行的路线,然后局部路径规划器根据这条路线及costmap的信息规划出机器人在局部时做出具体行动策略,ROS中主要是使用了DWA算法。在ROS中每当move_base处于规划状态就调用DWA算法计算出一条最佳的速度指令,发送给机器人运动底盘执行。
ros导航功能包-古月居
ros-planning/navigation
ROS采用了Gerkey的论文:《planning and control in unstructured Terrain》
动态窗口是由一系列的约束构成,其中约束主要包括差动机器人的非完整约束、环境障碍物约束与受结构与电机影响的动力学约束。
优点:
缺点:
以两轮移动机器人模型,分两个方面进行分析。
在上述三条约束条件的限制下,速度空间(v,w)会有一定的范围,另外会随着电机的线加速度、角加速度进行变换,速度空间会动态变化,我们将其称为动态窗口。在满足约束条件的情况下,进行采样(v,w),可以得到相应的轨迹:
在速度空间(v,w)中采样,根据运动学模型推测对应的轨迹,接下来引入评价函数,对轨迹进行打分,选取最优的轨迹。
DWA(动态窗口)算法是用于局部路径规划的算法,已经在ROS中实现,在move_base堆栈中:http://wiki.ros.org/dwa_local_planner
DWA算法第一次提出应该是1997年,发在了《IEEE Robotics and Automation Magazines》上
路径规划算法主要包括全局路径规划和局部路径规划。局部路径规划主要用于动态环境下的导航和避障,对于无法预测的障碍物DWA算法可以较好地解决。DWA算法的优点是计算负复杂度较低,由于考虑到速度和加速度的限制,只有安全的轨迹会被考虑,且每次采样的时间较短,因此轨迹空间较小。采样的速度即形成了一个动态窗口。
对于轨迹的评价函数主要包括三个方面:与目标的接近程度、机器人前进的速度、与下一个障碍物的距离。简而言之就是在局部规划出一条路径,希望与目标越来越近,且速度较快,与障碍物尽可能远。评价函数权衡以上三个部分得到一条最优路径。
该论文相对于之前的创新点在于:
该部分作者说明了全局路径规划的优点在于计算时可以离线进行,但是目前ROS中全局路径也在导航过程中不断变化。缺点在于不能适应环境变化以及计算复杂度太高,尤其是环境不断变化时。局部路径规划的缺点在于不能保证得到最优解,容易陷入局部最优(如U形障碍环境)。优点在于计算速度快,适合环境不断变化。
对比了其他的局部路径规划算法的优缺点,势场法计算速度很快,但是在狭窄区域会产生震荡,如果目标点在两个很近的障碍物之间,则可能找不到路径。
为了使运动学方程更加接近实际,将模型的速度设为随时间变化的分段函数,在该假设下,机器人轨迹可看做许多的圆弧积分组成,采用该方法使得障碍物碰撞检测很方便,因为圆弧与障碍物的交点很好求。
令 x ( t ) 令x(t) 令x(t), y ( t ) y(t) y(t), θ ( t ) \theta(t) θ(t)分别表示机器人在 t t t时刻的x坐标、y坐标以及朝向角, x ( t 0 ) x(t_0) x(t0)和 x ( t n ) x(t_n) x(tn)分别表示机器人在 t 0 t_0 t0和 t 1 t_1 t1时刻的x坐标,令 v ( t ) v(t) v(t)表示机器人的平移速度。
x ( t n ) = x ( t 0 ) + ∫ t 0 t n v ( t ) ∗ c o s θ ( t ) d t (1) x(t_n)=x(t_0)+\int_{t_0}^{t_n}v(t)*cos\theta (t)dt \tag{1} x(tn)=x(t0)+∫t0tnv(t)∗cosθ(t)dt(1)
y ( t n ) = y ( t 0 ) + ∫ t 0 t n v ( t ) ∗ s i n θ ( t ) d t (2) y_(t_n)=y(t_0)+\int_{t_0}^{t_n}v(t)*sin\theta (t)dt \tag{2} y(tn)=y(t0)+∫t0tnv(t)∗sinθ(t)dt(2)
等式(1)和等式(2)取决于机器人的速度,但机器人速度不能直接设定。机器人速度 v ( t ) v(t) v(t)取决于初始时刻 t 0 t_0 t0的速度以及时间 t 0 t_0 t0、机器人在时间间隔 t ^ ∈ [ t 0 , t ] \hat{t}\in [t_0,t] t^∈[t0,t]的平移加速度 v ˙ ( t ^ ) \dot{v}(\hat{t}) v˙(t^)。同样的, θ ( t ) \theta(t) θ(t)也是初始转向角 θ ( t 0 ) \theta(t_0) θ(t0)函数(设 t 0 t_0 t0时刻的初始旋转速度为 w ( t 0 ) w(t_0) w(t0), t ^ ∈ [ t 0 , t ] \hat{t}\in [t_0,t] t^∈[t0,t]的旋转加速度为 w ˙ ( t ^ ) \dot{w}(\hat{t}) w˙(t^),则式(1)可写为:
x ( t n ) = x ( t 0 ) + ∫ t 0 t n ( v ( t 0 ) + ∫ t 0 t v ˙ ( t ^ ) d t ^ ) ∗ c o s ( θ ( t 0 ) + ∫ t 0 t ( ( w ( t 0 ) + ∫ t 0 t ˉ w ˙ ( t ~ ) d t ~ ) d t ~ ) d t (3) x(t_n)=x(t_0)+\int_{t_0}^{t_n}\left(v(t_0)+\int_{t_0}^{t}\dot{v}(\hat{t})d\hat{t}\right)*cos\left (\theta (t_0)+\int_{t_0}^{t}\left((w(t_0)+\int_{t_0}^{\bar{t}}\dot{w}(\widetilde{t})d\widetilde{t}\right)d\widetilde{t}\right )dt\tag{3} x(tn)=x(t0)+∫t0tn(v(t0)+∫t0tv˙(t^)dt^)∗cos(θ(t0)+∫t0t((w(t0)+∫t0tˉw˙(t )dt )dt )dt(3)
此时机器人的轨迹由初始时刻的状态以及加速度决定,可以认为这些状态是可控的,同时由于机器人内部结构原因,其加速度也不是一直变化(类似于连续函数),因此可以将 t 0 t_0 t0到 t n t_n tn看作是很多个时间片,积分可以转换为求和,假设有n个时间片,在每个时间片 [ t i , t i + 1 ] [t_i,t_{i+1}] [ti,ti+1],机器人的加速度 v i ˙ \dot{v_i} vi˙和 w ˙ \dot{w} w˙保持不变,设 Δ t i = t − t i \Delta_t^i=t-t_i Δti=t−ti则式(3)可以转化为:
x ( t n ) = x ( t 0 ) + ∑ i = 0 n − 1 ∫ t i t i + 1 ( v ( t i ) + v i ˙ ∗ Δ t i ) ∗ c o s ( θ ( t i ) + w ( t i ) ∗ Δ t i + 1 2 w i ˙ ∗ ( Δ t i ) 2 ) d t (4) x(t_n)=x(t_0)+\sum_{i=0}^{n-1}\int_{t_i}^{t_{i+1}}\left (v(t_i)+\dot{v_i}*\Delta_t^i\right )*cos\left (\theta(t_i)+w(t_i)*\Delta_t^i+\frac{1}{2}\dot{w_i}*(\Delta_t^i)^2\right )dt\tag{4} x(tn)=x(t0)+i=0∑n−1∫titi+1(v(ti)+vi˙∗Δti)∗cos(θ(ti)+w(ti)∗Δti+21wi˙∗(Δti)2)dt(4)
等式(4)虽然与机器人的动力控制相关,但是不能决定机器人具体的驾驶方向,对于障碍物与机器人轨迹的交点也很难求出,继续进行简化,既然时间间隔都很小,因此可以假设在每一个时间片内速度保持不变,则 v ( t i ) + v i ˙ ∗ Δ t i v(t_i)+\dot{v_i}*\Delta_t^i v(ti)+vi˙∗Δti可近似为 v i ∈ [ v ( t i ) , v ( t i + 1 ) ] v_i\in[v(t_i),v(t_{i+1})] vi∈[v(ti),v(ti+1)],同理, θ ( t i ) + w ( t i ) ∗ Δ t i + 1 2 w i ˙ ∗ ( Δ t i ) 2 \theta(t_i)+w(t_i)*\Delta_t^i+\frac{1}{2}\dot{w_i}*(\Delta_t^i)^2 θ(ti)+w(ti)∗Δti+21wi˙∗(Δti)2近似为 θ ( t i ) + w i ∗ Δ t i \theta (t_i)+w_i*\Delta_t^i θ(ti)+wi∗Δti,其中 w ( i ) ∈ [ w ( t i ) , w ( t i + 1 ] w(i)\in [w(t_i),w(t_{i+1}] w(i)∈[w(ti),w(ti+1],则式(4)可写为:
x ( t n ) = x ( t 0 ) + ∑ i = 0 n − 1 ∫ t i t i + 1 v i ∗ c o s ( θ ( t i ) + w i ∗ ( t ^ − t i ) ) d t ^ (5) x(t_n)=x(t_0)+\sum_{i=0}^{n-1}\int_{t_i}^{t_{i+1}}v_i*cos\left (\theta(t_i)+w_i*(\hat{t}-t_i) \right )d\hat{t}\tag{5} x(tn)=x(t0)+i=0∑n−1∫titi+1vi∗cos(θ(ti)+wi∗(t^−ti))dt^(5)
解这个积分方程,简化为:
x ( t n ) = x ( t 0 ) + ∑ i = 0 n − 1 F x i ( t i + 1 ) (6) x(t_n)=x(t_0)+\sum_{i=0}^{n-1}F_x^i(t_{i+1})\tag{6} x(tn)=x(t0)+i=0∑n−1Fxi(ti+1)(6)
其中:
F
x
i
(
t
i
)
=
{
v
i
w
i
(
s
i
n
θ
(
t
i
)
−
s
i
n
(
θ
(
t
i
)
+
w
i
∗
(
t
−
t
i
)
)
)
,
w
i
≠
0
v
i
c
o
s
(
θ
(
t
i
)
)
∗
t
,
w
i
=
0
(7)
F_x^i(t_{i})= \left\{
同理,对应的y坐标公式为:
y ( t n ) = y ( t 0 ) + ∑ i = 0 n − 1 F y i ( t i + 1 ) (8) y(t_n)=y(t_0)+\sum_{i=0}^{n-1}F_y^i(t_{i+1})\tag{8} y(tn)=y(t0)+i=0∑n−1Fyi(ti+1)(8)
F
y
i
(
t
i
)
=
{
−
v
i
w
i
(
c
o
s
θ
(
t
i
)
−
c
o
s
(
θ
(
t
i
)
+
w
i
∗
(
t
−
t
i
)
)
)
,
w
i
≠
0
v
i
s
i
n
(
θ
(
t
i
)
)
∗
t
,
w
i
=
0
(9)
F_y^i(t_{i})= \left\{
(推导了一遍总感觉式(7)和式(9)的第一项前面少了一个负号)
当 w i = 0 w_i=0 wi=0时,机器人行走轨迹为一条直线,当 w i ≠ = 0 w_i\ne =0 wi==0时,机器人轨迹为圆弧,设
M x i = − v i w i ∗ s i n θ ( t i ) (10) M_x^i = -\frac{v_i}{w_i}*sin\theta(t_i)\tag{10} Mxi=−wivi∗sinθ(ti)(10)
M y i = v i w i ∗ c o s θ ( t − i ) (11) M_y^i = \frac{v_i}{w_i}*cos\theta(t-i)\tag{11} Myi=wivi∗cosθ(t−i)(11)
则:
( F x i − M x i ) 2 + ( F x i − M x i ) 2 = ( v i w i ) 2 (12) (F_x^i-M_x^i)^2+(F_x^i-M_x^i)^2=(\frac{v_i}{w_i})^2\tag{12} (Fxi−Mxi)2+(Fxi−Mxi)2=(wivi)2(12)
式(12)说明第i段圆弧轨迹的圆心为 ( M x i , M y i ) (M_x^i,M_y^i) (Mxi,Myi),半径为 v i w i \frac{v_i}{w_i} wivi。
根据上述公式可以求出机器人的轨迹,即通过一系列分段的圆弧和直线来拟合轨迹。
误差上界:
将机器人轨迹进行分段会在控制点之间产生线性误差,即 t i + 1 − t i t_{i+1}-t_i ti+1−ti之间的误差,设x坐标和y坐标的误差分别为 E x i E_x^i Exi和 E y i E_y^i Eyi, Δ t i = t i + 1 − t i \Delta t_i=t_{i+1}-t_i Δti=ti+1−ti,由于 v i ∈ [ v ( t i ) , v ( t i + 1 ) ] v_i\in [v(t_i),v(t_{i+1})] vi∈[v(ti),v(ti+1)],易知最大误差 E x i , E y i ≤ ∣ v ( t i + 1 ) − v ( t i ) ∣ ∗ Δ t i E_x^i,E_y^i\leq|v(t_{i+1})-v(t_i)|*\Delta t_i Exi,Eyi≤∣v(ti+1)−v(ti)∣∗Δti,在 Δ t i \Delta t_i Δti内是线性的。注意该上界误差仅仅可用于机器人内部预测,而实际机器人位置一般通过里程计测量。
动态窗口法在速度空间中进行速度采样,并对随机采样的速度进行限制,减小采样数目,在使用代价函数进行评价。
主要算法步骤如下
1.速度搜索空间,根据以下三点进行速度空间降采样
2.求最优值
代价函数:
G ( v , w ) = σ ( α ∗ h e a d i n g ( v , w ) + β ∗ d i s t ( v , w ) + γ ∗ v e l ( v , w ) ) (13) G(v,w)=\sigma\left(\alpha *heading(v,w)+\beta *dist(v,w)+\gamma *vel(v,w)\right)\tag{13} G(v,w)=σ(α∗heading(v,w)+β∗dist(v,w)+γ∗vel(v,w))(13)
最大值即使最优值最大:
(a)Target heading:heading用于评价机器人与目标位置的夹角,当机器人朝着目标前进时,该值取最大。
(b)Clearance:dist 用于表示与机器人轨迹相交的最近的障碍物距离。
(c) Velocity:vel 表示机器人的前向移动速度,支持快速移动。
其中\sigma 使得三个部分的权重更加平滑,使得轨迹与障碍物之间保持一定的间隙。
安全的速度是指机器人能够在撞掉障碍物之前停下, d i s t ( v , w ) dist(v,w) dist(v,w)为机器人轨迹上与障碍物的最近距离,设刹车时的加速度为 v ˙ b \dot v_b v˙b和 w ˙ b \dot w_b w˙b,则 V a V_a Va为机器人不与障碍物碰撞的速度集合:
V a = { v , w ∣ v ≤ 2 ∗ d i s t ( v , w ) ∗ v ˙ b ∩ w ≤ 2 ∗ d i s t ( v , w ) ∗ w ˙ b } (14) V_a=\left\{v,w | v\leq\sqrt{2*dist(v,w)*\dot v_b } \cap w\leq \sqrt{2*dist(v,w)*\dot w_b} \right\}\tag{14} Va={v,w∣v≤2∗dist(v,w)∗v˙b ∩w≤2∗dist(v,w)∗w˙b }(14)
考虑到机器人的动力加速度,搜索空间降采样到动态窗口,只保留以当前加速度可到达的速度,设 t t t为时间间隔, ( v a , w a ) (v_a,w_a) (va,wa)为实际速度,则动态窗口的速度集合为 V d V_d Vd:
V d = { v , w ∣ v ∈ [ v a − v ˙ ∗ t , v a + v ˙ ∗ t ] ∩ w ∈ [ w a − w ˙ ∗ t , w a + w ˙ ∗ t ] } (15) V_d=\left\{v,w | v\in [v_a-\dot v*t,v_a+\dot v*t] \cap w\in [w_a-\dot w*t,w_a+\dot w*t ] \right\}\tag{15} Vd={v,w∣v∈[va−v˙∗t,va+v˙∗t]∩w∈[wa−w˙∗t,wa+w˙∗t]}(15)
该集合以外的速度都不能在该时间间隔内达到。
综上,最终的搜索空间:
V r = V s ∩ V a ∩ V d (16) V_r=V_s\cap V_a\cap V_d\tag{16} Vr=Vs∩Va∩Vd(16)
最终的代价函数(13)是基于速度 V r V_r Vr计算的。其中:
Target Heading:表示机器人与目标点的对齐程度,用 180 − θ 180-\theta 180−θ表示, θ \theta θ为机器人与目标夹角,夹角越大,代价值越小。
Clearance:表示与机器人轨迹相交的最近障碍物的距离,如果障碍物与机器人轨迹不相交,则设为一个较大的值。
Velocity:机器人某条轨迹的速度 v v v。
平滑处理:
评价函数的三个部分都被正则化到 [ 0 , 1 ] [0,1] [0,1]上,实验中设置了 α = 2 \alpha = 2 α=2, β = 0.2 \beta=0.2 β=0.2, γ = 0.2 \gamma=0.2 γ=0.2,平滑处理可以使机器人与障碍物之间有一定的间隙(裕度)。
实现细节:
参数设定:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。