赞
踩
本系列文章主要解析浙大高飞老师FAST-Lab团队的文章EGO-Planner,该算法作为现在无人机的主流轨迹规划算法值得详细解读,笔者利用自己有限的理解力做一个笔记摘录,若有问题请各位大佬评论区指正。本文主要解析论文部分。
原代码和论文
基于梯度的运动规划是UAV局部轨迹生成的主流方法,将无人机局部轨迹生成问题归结为无约束非线性优化问题。许多轨迹规划算法直接利用ESDF地图中丰富的梯度信息优化轨迹。
本文争对传统的基于梯度优化的轨迹,是先建立ESDF地图然后再利用ESDF地图中的梯度信息对轨迹进行优化,但是在EWOK一文中给出了整个一个轨迹规划流程中的时间分布如下图,建图占用时间过大。本文旨在只在必要时计算梯度,避免在与局部轨迹无关的区域计算ESDF。
主要贡献有下:
避障轨迹的形成过程:
第一步,生成一条只满足终端约束不考虑避障的B样条曲线Φ;
第二步,迭代检测每个碰撞段,用图搜索算法(论文结尾提到用的A*)生成一条无碰撞路径
Γ
\Gamma
Γ(图a);
第三步,轨迹Φ上控制点
Q
i
Q_i
Qi的切向量定义为
R
i
R_i
Ri,过控制点
Q
i
Q_i
Qi切向量
R
i
R_i
Ri(直接用
(
Q
i
+
1
−
Q
i
−
1
)
/
2
Δ
t
(Q_{i+1}-Q_{i-1})/2\Delta t
(Qi+1−Qi−1)/2Δt计算)的垂直平面
Ψ
\Psi
Ψ与
Γ
\Gamma
Γ相交形成线l,l与障碍物j的表面相交于点
p
i
j
p_{ij}
pij,同时获得向量
v
i
j
v_{ij}
vij,v是Q指向p的单位向量,形成(p,v)对(图b);
第四步,根据(p,v)对定义距离场
d
i
j
=
(
Q
i
−
p
i
j
)
⋅
v
i
j
d_{ij}=(Q_i-p_{ij})\cdot v_{ij}
dij=(Qi−pij)⋅vij(论文中没有讲清楚这个定义,此时的
Q
i
Q_i
Qi不是原本的控制点,而是想要寻找的避障的新控制点,而v固定不再改变),
d
i
j
d_{ij}
dij大于0表示不在该障碍物j内。
该节还给出了一个减少迭代过程中产生重复{p,v}对,判断是否为新的障碍物标准:如果控制点
Q
i
Q_i
Qi处于障碍物中时,并且对于当前得到的所有障碍物j满足
d
i
j
>
0
d_{ij}>0
dij>0,则障碍物为新发现的障碍物,从而只计算影响轨迹的障碍物信息,减少运行时间。
轨迹优化主要用的也是B样条轨迹进行平滑度和最小损失的优化,可以参考FAST-Planner的笔记,根据四旋翼的微分平坦性,优化问题被定义为:
min
Q
J
=
λ
s
J
s
+
λ
c
J
c
+
λ
d
J
d
\min_Q J=\lambda_sJ_s+\lambda_cJ_c+\lambda_dJ_d
QminJ=λsJs+λcJc+λdJd
与FAST-Planner一样 J s J_s Js为平滑项惩罚, J c J_c Jc为碰撞项惩罚, J d J_d Jd为动力学可行性惩罚, λ \lambda λ为惩罚项的权重。
根据B样条的两个性质:1.凸包;2.pb阶B样条的k次导数为pb-k阶B样条。只要最小化B样条路径轨迹的二阶和三阶控制点的平方和就能有效减少加速度和加加速度的平方和(这里可参考minimum snap):
J
s
=
∑
i
=
1
N
c
−
2
∣
∣
A
i
∣
∣
2
2
+
∑
i
=
1
N
c
−
3
∣
∣
J
i
∣
∣
2
2
J_s=\sum_{i=1}^{N_c-2}||A_i||_2^2+\sum_{i=1}^{N_c-3}||J_i||_2^2
Js=i=1∑Nc−2∣∣Ai∣∣22+i=1∑Nc−3∣∣Ji∣∣22
碰撞惩罚使控制点远离障碍物,通过采用安全间隙和惩罚控制点
d
i
j
<
s
f
d_{ij}<s_f
dij<sf来实现,下式是该论文设计的一个二次连续可微惩罚函数,随着
d
i
j
d_{ij}
dij的减小而抑制其斜率,这里的
d
i
j
d_{ij}
dij是第二节的控制点距离场,
s
f
s_f
sf为给定的安全间隙
对所有控制点的惩罚求和得到总的碰撞项惩罚:
J
c
=
∑
i
=
1
N
c
j
c
(
Q
i
)
J_c=\sum_{i=1}^{N_c}j_c(Q_i)
Jc=i=1∑Ncjc(Qi)
相比于传统用三线性插值的方法求碰撞项的梯度,本文直接用惩罚函数对控制点求导获得梯度:
也可称为动力学惩罚,受限于物理的速度、加速度、加加速度的极限,在计算轨迹时,要设定可行性惩罚,通过限制轨迹在每一维上的高阶导数来保证其可行性。根据B样条曲线的性质,对控制点的导数进行约束足以约束整个B样条。
本优化目标函数是
min
Q
J
=
λ
s
J
s
+
λ
c
J
c
+
λ
d
J
d
\min_Q J=\lambda_sJ_s+\lambda_cJ_c+\lambda_dJ_d
QminJ=λsJs+λcJc+λdJd
轨迹执行过程中会随着新障碍物的加入不断改变目标函数,这就要求求解器能够快速重启并求解,并且目标函数主要由二次项组成,所以Hessian信息能够加快收敛速度。但是精确的Hessian矩阵求解会消耗大量计算资源。所以采用拟牛顿法(quasi-Newton methods)从梯度信息来近似计算Hessian。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。