赞
踩
采用运动动力学路径搜索方法在离散化控制空间中寻找安全、运动可行、最短时间的初始轨迹。利用b样条的凸包特性,结合欧几里得距离场(EDF)的梯度信息和动态约束,采用b样条优化方法提高轨迹的平滑度和间隙。最后,通过将最终轨迹表示为非均匀b样条,采用迭代时间调整方法保证轨迹的动态可行和开放性。
在四旋翼运动规划领域存在两个重要的未被解决的问题:1、有限的时间和板载计算资源下,现有工作不能保证高成功率地生成安全和运动动力学可行的轨迹;2、为保证运动动力学可行性,对速度和加速度进行了较大限制。
在本文中,我们提出了一种完整且鲁棒的在线轨迹生成方法来系统地解决这两个问题。采用了基于启发式搜索和线性二次最小时间控制的运动路径搜索方法。该算法在离散化控制空间中高效地搜索安全、可行且时间最短的初始路径。然后通过精心设计的b样条优化来优化初始路径,该优化利用b样条的凸包特性来结合梯度信息和动态约束。该算法改进了初始路径,快速收敛到平滑、安全、动态可行的轨迹。最后,将轨迹表示为非均匀b样条,研究了导数控制点与时间分配的关系。在此基础上,采用迭代时间调整的方法将不可行的速度和加速度剔除,同时避免了对它们的保守约束。
前端运动动力学路径搜索模块来源于为自动驾驶提出的混合状态A算法。它在体素网格地图中搜索一条相对于持续时间和控制成本最小的轨迹。
如算法 1 和图 2 所示,搜索循环和标准 A 算法类似,其中
P
P
P 和
C
C
C 分别为开集和闭集。用符合四旋翼的运动基元代替直线作为边。一个结构
N
o
d
e
Node
Node 被用来记录一个基元、基元结束的体素和
g
c
g_c
gc 和
f
c
f_c
fc 代价(Sect. III-B)。基元迭代地扩展(Expand())体素网格地图,除了具有最小的
f
c
f_c
fc 的基元,在同一体素网格结束的其他基元都将被修剪(Prune())。之后 CheckFeasible() 会检查剩下的基元的安全性和动力学可行性。这个过程一直到有基元抵达终点或 AnalyticExpand() 成功为止。
首先讨论 Expand() 中使用的运动基元的生成。四旋翼系统的微分平坦特性允许使用三个一维时间参数化多项式函数来表示轨迹[1]。
p
(
t
)
:
=
[
p
x
(
t
)
,
p
y
(
t
)
,
p
z
(
t
)
]
T
,
p
μ
(
t
)
=
∑
k
=
0
K
a
k
t
k
p(t) :=[p_x(t),p_y(t),p_z(t)]^T, \quad p_\mu (t)= \sum_{k=0}^{K}a_k t^k
p(t):=[px(t),py(t),pz(t)]T,pμ(t)=k=0∑Kaktk
其中
μ
∈
{
x
,
y
,
z
}
\mu \in \{x,y,z\}
μ∈{x,y,z}。从四旋翼系统的角度来看,它对应于一个线性时不变(LTI)系统。让
x
(
t
)
:
=
[
p
(
t
)
⊤
,
p
˙
(
t
)
⊤
,
⋅
⋅
⋅
,
p
(
n
−
1
)
(
t
)
⊤
]
⊤
∈
X
⊂
R
3
n
\mathbf{x}(t):=[{\bf p}(t)^{\top},\dot{\mathbf{p}}(t)^{\top},\cdot\cdot\cdot,{\mathbf{p}}^{(n-1)}(t)^{\top}]^{\top}\in\mathcal{X}\subset\mathbb{R}^{3n}
x(t):=[p(t)⊤,p˙(t)⊤,⋅⋅⋅,p(n−1)(t)⊤]⊤∈X⊂R3n 作为状态向量。让
u
(
t
)
:
=
p
(
n
)
(
t
)
∈
U
:
=
[
−
u
m
a
x
,
u
m
a
x
]
3
⊂
R
3
\mathbf{u}(t):=\ {\bf p}^{(n)}\left(t\right)\;\in\;{\mathcal U}:\ =\;\left[-u_{\mathrm{max}},\,u_{\mathrm{max}}\right]^{3}\;\subset \mathbb{R}^{3}
u(t):= p(n)(t)∈U: =[−umax,umax]3⊂R3 作为控制输入。状态空间模型可以被定义为:
x
˙
=
A
x
+
B
u
A
=
[
0
I
3
0
⋯
0
0
0
I
3
⋯
0
⋮
⋮
⋮
⋱
⋮
0
⋯
⋯
0
I
3
0
⋯
⋯
0
0
]
,
B
=
[
0
0
⋮
0
I
3
]
状态方程的完全解为:
x
(
t
)
=
e
A
t
x
(
0
)
+
∫
0
t
e
A
(
t
−
τ
)
B
U
(
τ
)
d
τ
{\bf x}(t)\,=\,e^{{\bf A}t}{\bf x}(0)\,+\,\int_{0}^{t}e^{{\bf A}(t-\tau)}{\bf B}_{\bf U}(\tau)\,\,d\tau
x(t)=eAtx(0)+∫0teA(t−τ)BU(τ)dτ
上述方程给出了初始状态
为
x
(
0
)
为x(0)
为x(0),控制输入为
u
(
t
)
u(t)
u(t) 的四旋翼系统的轨迹。
在 Expand() 中,给定无人机的当前状态,在持续时间
τ
\tau
τ 内应用一组离散的控制输入
U
D
⊂
U
\mathcal U_D \subset \mathcal U
UD⊂U。在实际中,我们选择
n
=
2
n=2
n=2,这对应于一个二重积分。每个轴
[
−
u
m
a
x
,
u
m
a
x
]
[-u_{max},u_{max}]
[−umax,umax] 被均匀离散为
{
−
u
m
a
x
,
−
r
−
1
r
u
m
a
x
,
⋅
⋅
⋅
,
r
−
1
r
u
m
a
x
,
u
m
a
x
}
\left\{-\mathcal{u}_{m a x},-\frac{r-1}{r}\mathcal{u}_{m a x},\cdot\cdot\cdot ,\ \frac{r-1}{r}\mathcal{u}_{m a x},\ \ u_{m a x}\right\}
{−umax,−rr−1umax,⋅⋅⋅, rr−1umax, umax},这会得到
(
2
r
+
1
)
3
(2r+1)^3
(2r+1)3 个基元。
想要得到在时间和控制代价上都最优的轨迹,所以定义轨迹的代价为:
J
(
T
)
=
∫
0
T
∥
u
(
t
)
∥
2
d
t
+
ρ
T
\mathcal{J}(T)=\int_{0}^{T}\|\mathbf{u}(t)\|^{2}d t+\rho T
J(T)=∫0T∥u(t)∥2dt+ρT
在这个定义下,EdgeCost() 计算由离散输入
u
(
t
)
=
u
d
u(t)=u_d
u(t)=ud 和持续时间
τ
\tau
τ(
e
c
=
(
∣
∣
u
d
∣
∣
2
+
ρ
)
τ
e_{c}=(||{\bf u}_{d}||^{2}+\rho)\tau
ec=(∣∣ud∣∣2+ρ)τ)生成的运动基元的代价。
用
g
c
g_c
gc 表示从开始状态
x
s
x_s
xs 到当前状态
x
c
x_c
xc 的一条最优路径的实际代价。最优路径由
J
J
J 个基元组成,则:
g
c
=
∑
j
=
1
J
(
∣
∣
u
d
j
∣
∣
2
+
ρ
)
τ
g_{c}=\sum_{j=1}^{J}(||{\bf u}_{d j}||^{2}+\rho)\tau
gc=∑j=1J(∣∣udj∣∣2+ρ)τ。
设计了一个启发项 Heuristic()。通过应用 Pontryagins 最小化原理[16],计算了从
x
c
x_c
xc 到目标状态
x
g
x_g
xg 的最小化
J
(
T
)
\mathcal{J}(T)
J(T) 的封闭轨迹:
p
μ
∗
(
t
)
=
1
6
α
μ
t
3
+
1
2
β
μ
t
2
+
v
μ
c
+
p
μ
c
[
α
μ
β
μ
]
=
1
T
3
[
−
12
6
T
6
T
−
2
T
2
]
[
p
μ
g
−
p
μ
c
−
v
μ
c
T
v
μ
g
−
v
μ
c
]
J
∗
(
T
)
=
∑
μ
∈
{
x
,
y
,
z
}
(
1
3
α
μ
2
T
3
+
α
μ
β
μ
T
2
+
β
μ
2
T
)
其中,
p
μ
c
,
v
μ
c
,
p
μ
g
,
v
μ
g
p_{\mu c},v_{\mu c},p_{\mu g},v_{\mu g}
pμc,vμc,pμg,vμg 是当前和目标的位置和速度。为找到代价最小的最优时间
T
T
T,将
α
μ
,
β
μ
\alpha_{\mu},\beta_{\mu}
αμ,βμ 代入
J
∗
(
T
)
\mathcal{J}^{*}(T)
J∗(T) 并找到
∂
J
∗
(
T
)
∂
T
=
0
\frac{\partial{\mathcal{J}}^{*}(T)}{\partial T}=0
∂T∂J∗(T)=0 的根。选取代价最小记为
m
i
n
J
∗
min\mathcal{J}^{*}
minJ∗并且轨迹可行的根,记为
T
h
T_h
Th。使用
J
∗
(
T
h
)
\mathcal{J}^{*}(T_h)
J∗(Th) 作为启发项
h
c
h_c
hc。最后,
f
c
f_c
fc:
f
c
=
g
c
+
h
c
=
g
c
+
J
∗
(
T
h
)
f_{c}=g_{c}+h_{c}=g_{c}+\mathcal{J}^{*}(T_{h})
fc=gc+hc=gc+J∗(Th)。
因为输入是离散的,所以很难找到一个完全处于目标状态的基元端点。为了弥补这一缺陷并加速搜索,引入了一个分析扩展方案。当一个节点从开集弹出的时候,会使用与 Sec.III-B 中相同的方法计算一条从 x c x_c xc 到 x g x_g xg 的轨迹。如果它通过了安全和动力学可行性检查,搜索会被提前终止。这个策略对于提高效率是有效的尤其在稀疏环境中,因为它有更高的成功率并且会更早地终止搜索。
由路径搜索所产生的路径可能不是最优的。此外,因为自由空间的距离信息被忽略会导致路径经常会接近障碍物(如图 5)。因此,采用提出的 B 样条优化来提高路径的平滑度和间隙。利用 B 样条的凸包性融合来自欧氏距离场和动态约束的梯度信息,它可以在很短的时间内收敛,生成平滑、安全和动态可行的轨迹。
B 样条是一个单独由它的阶数
p
b
p_b
pb,
N
+
1
N+1
N+1 个控制点
Q
0
,
Q
1
,
.
.
.
,
Q
N
{Q_0,Q_1,...,Q_N}
Q0,Q1,...,QN 集合以及一个节点向量
[
t
0
,
t
q
,
.
.
.
,
t
M
]
[t_0,t_q,...,t_M]
[t0,tq,...,tM] 所决定的分段多项式,其中
Q
i
∈
R
3
,
t
m
∈
R
,
M
=
N
+
p
b
+
1
Q_i \in \mathbb{R}^{3},t_m \in \mathbb{R},M=N+p_b+1
Qi∈R3,tm∈R,M=N+pb+1。B 样条轨迹用时间
t
t
t 来参数化,
t
∈
[
t
p
b
,
t
M
−
p
b
]
t \in [t_{pb},t_{M-pb}]
t∈[tpb,tM−pb]。对于均匀 B 样条,每个节点跨度都是相同的,
Δ
t
m
=
t
m
+
1
−
t
m
\Delta t_{m}\,\ =\,t_{m+1}\,-\,t_{m}
Δtm =tm+1−tm。为求出
t
∈
[
t
m
,
t
m
+
1
]
⊂
[
t
p
b
,
t
M
−
p
b
]
t \in[t_{m},\,t_{m+1}]\subset[t_{p_{b}},\,t_{M-p_{b}}]
t∈[tm,tm+1]⊂[tpb,tM−pb] 时刻的位置,首先将
t
t
t 归一化为
s
(
t
)
=
(
t
−
t
m
)
/
Δ
t
s(t) = (t-t_m)/{\Delta t}
s(t)=(t−tm)/Δt。之后采用矩阵表示来求出位置[17]:
p
(
s
(
t
)
)
=
s
(
t
)
⊤
M
p
b
+
1
q
m
s
(
t
)
=
[
1
s
(
t
)
s
2
(
t
)
⋯
s
p
b
(
t
)
]
⊤
q
m
=
[
Q
m
−
p
b
Q
m
−
p
b
+
1
Q
m
−
p
b
+
2
⋯
Q
m
]
⊤
其中,
M
p
b
+
1
M_{pb+1}
Mpb+1 是一个由
p
b
p_b
pb 决定的常数矩阵。本文中,
p
b
p_b
pb 被设置为 3。导数的计算是完全相同的,因为 B 样条的导数也是 B 样条。
B 样条曲线的凸包特性(图3)对于优化公式的设计至关重要。我们在 Sect.IV -B 节中表明,它对于确保整个轨迹的动态可行性和安全性非常有用。
如图3,本文广泛使用凸包性来确保动态可行性和安全性。
动态可行性要求约束所有的速度和加速度控制点
{
V
0
,
V
1
,
.
.
.
,
V
N
−
1
}
\{V_0,V_1,...,V_{N-1}\}
{V0,V1,...,VN−1},
{
A
0
,
A
1
,
.
.
.
,
A
N
−
2
}
\{A_0,A_1,...,A_{N-2}\}
{A0,A1,...,AN−2},使其满足
V
i
∈
[
−
v
m
a
x
,
v
m
a
x
]
3
V_i \in [-v_{max},v_{max}]^3
Vi∈[−vmax,vmax]3,
A
i
∈
[
−
a
m
a
x
,
a
m
a
x
]
3
A_i \in [-a_{max},a_{max}]^3
Ai∈[−amax,amax]3。
V
i
,
A
i
V_i,A_i
Vi,Ai 由下式计算,其中
Δ
t
\Delta t
Δt 是节点跨度。
V
i
=
1
Δ
t
(
Q
i
+
1
−
Q
i
)
,
A
i
=
1
Δ
t
(
V
i
+
1
−
V
i
)
\mathbf{V}_{i}=\frac{1}{\Delta t}(\mathbf{Q}_{i+1}-\mathbf{Q}_{i}),\quad\mathbf{A}_{i}=\frac{1}{\Delta t}(\mathbf{V}_{i+1}-\mathbf{V}_{i})
Vi=Δt1(Qi+1−Qi),Ai=Δt1(Vi+1−Vi)
为了 B 样条的安全性,需要确保所有的凸包都是无碰撞的。即需要确保任意一个被占据的体素与任一个凸包上的点
Q
h
Q_h
Qh 之间的距离
d
h
>
0
d_h > 0
dh>0 (如图4)。
根据三角形不等式,可知:
d
h
>
d
c
−
r
h
d_h > d_c - r_h
dh>dc−rh,
d
c
d_c
dc 是任意两个体素和控制点之间的距离。因为
Q
h
Q_h
Qh 是凸包内的点,所以也有:
r
h
≤
r
12
+
r
23
+
r
34
r_h ≤ r_{12} +r_{23} + r_{34}
rh≤r12+r23+r34。两式相结合,则有:
d
h
>
d
c
−
(
r
12
+
r
23
+
r
34
)
d_h > d_c - (r_{12} +r_{23} + r_{34})
dh>dc−(r12+r23+r34)。因此,只需要保证:
d
c
>
0
,
r
j
,
j
+
1
<
d
c
/
3
(
j
∈
{
1
,
2
,
3
}
)
(
8
)
d_{c}>0,\quad r_{j,j+1}<d_{c}/3\ \ (j\in\{1,2,3\}) \quad(8)
dc>0,rj,j+1<dc/3 (j∈{1,2,3})(8)
之后就可以保证凸包是无碰撞的。
对于由
N
+
1
N+1
N+1 个控制点定义的
p
b
p_b
pb 阶 B 样条轨迹,优化
N
+
1
−
2
p
b
N+1-2p_b
N+1−2pb 个控制点的子集
{
Q
p
b
,
Q
p
b
+
1
,
.
.
.
,
Q
N
−
p
b
}
\{Q_{p_b},Q_{p_b+1},...,Q_{N-p_b}\}
{Qpb,Qpb+1,...,QN−pb}。首位的
p
b
p_b
pb 个控制点不应该被改变,因为它们决定了边界状态。总的代价函数被定义为:
f
t
o
t
a
l
=
λ
1
f
s
+
λ
2
f
c
+
λ
3
(
f
v
+
f
a
)
f_{t o t a l}=\lambda_{1}f_{s}+\lambda_{2}f_{c}+\lambda_{3}(f_{v}+f_{a})
ftotal=λ1fs+λ2fc+λ3(fv+fa)
其中,
f
s
f_s
fs 和
f
c
f_c
fc 平滑度和碰撞代价,
f
v
f_v
fv 和
f
a
f_a
fa 是速度和加速度的柔性限制,
λ
1
,
λ
2
,
λ
3
\lambda_1,\lambda_2,\lambda_3
λ1,λ2,λ3 用来平衡平滑度、安全性和动态可行性。
通过一个捕捉轨迹几何信息的函数来定义平滑度代价
f
s
f_s
fs,并且不依赖时间分配,与最近采用 snap 或 jerk 平方的积分的工作不同。原因是在优化之后时间分配可能会调整(Sect. V)。这可能会改变轨迹的导数改变,使优化后的 snap(jerk) 不那么有意义。使用弹性带代价函数(elastic
band cost function)[18, 19](控制点
Q
p
b
−
2
,
Q
p
b
−
1
Q_{p_b-2},Q_{p_b-1}
Qpb−2,Qpb−1 和
Q
N
−
p
b
+
1
,
Q
N
−
p
b
+
2
Q_{N-p_b+1},Q_{N-p_b+2}
QN−pb+1,QN−pb+2 没有被优化但是需要评估其总体平滑度。同样地,他们中的一些点作为常量被包含进等式 14,来计算导数):
f
s
=
∑
i
=
p
b
−
1
N
−
p
b
+
1
∥
(
Q
i
+
1
−
Q
i
)
⏟
F
i
+
1
,
i
+
(
Q
i
−
1
−
Q
i
)
⏟
F
i
−
1
,
i
∥
2
f_{s}=\sum_{i=p_{b}-1}^{N-p_{b}+1}\|\underbrace{\left(\mathbf{Q}_{i+1}-\mathbf{Q}_{i}\right)}_{\mathbf{F}_{i+1, i}}+\underbrace{\left(\mathbf{Q}_{i-1}-\mathbf{Q}_{i}\right)}_{\mathbf{F}_{i-1, i}}\|^{2}
fs=i=pb−1∑N−pb+1∥Fi+1,i
(Qi+1−Qi)+Fi−1,i
(Qi−1−Qi)∥2
从物理的角度,这个公式将一条轨迹看作一个弹性带,其中每个项
F
i
+
1
,
i
=
Q
i
+
1
−
Q
i
F_{i+1,i} = Q_{i+1}-Q_i
Fi+1,i=Qi+1−Qi 和
F
i
−
1
,
i
=
Q
i
−
1
−
Q
i
F_{i-1,i} = Q_{i-1}-Q_i
Fi−1,i=Qi−1−Qi 是分别连接节点
Q
i
+
1
,
Q
i
Q_{i+1},Q_{i}
Qi+1,Qi 和
Q
i
−
1
,
Q
i
Q_{i-1},Q_{i}
Qi−1,Qi的两个弹簧的合力。如果所有项都等于 0,那么所有的控制点将均匀地分布在一条直线上,这是理想的平滑度。
同样地,碰撞代价表示为障碍物作用在每个控制点上的排斥力:
f
c
=
∑
i
=
p
b
N
−
p
b
F
c
(
d
(
Q
i
)
)
f_{c}=\sum_{i=p_{b}}^{N-p_{b}}F_{c}(d(Q_{i}))
fc=i=pb∑N−pbFc(d(Qi))
其中,
d
(
Q
i
)
d(Q_i)
d(Qi) 是
Q
i
Q_i
Qi 与最近的障碍物的距离。
F
c
F_c
Fc 是一个可微的潜在代价函数,其中
d
t
h
r
d_{thr}
dthr 是指定障碍物清除的阈值:
F
c
(
d
(
Q
i
)
)
=
{
(
d
(
Q
i
)
−
d
t
h
r
)
2
d
(
Q
i
)
≤
d
t
h
r
0
d
(
Q
i
)
>
d
t
h
r
(
12
)
F_{c}(d({\bf Q}_{i}))=\left\{
如 Sect.IV-B,要使轨迹无碰撞,等式 8 必须被满足。因为碰撞代价会将控制点推离障碍物,所以
d
c
>
0
d_c > 0
dc>0 是显然满足的。同时,
r
j
,
j
+
1
r_{j,j+1}
rj,j+1 是只依赖于 B 样条参数化的可调参数。在实际中,只要选择足够小的
r
j
,
j
+
1
,
(
j
∈
{
0
,
1
,
.
.
.
,
N
}
r_{j,j+1},(j \in \{0,1,...,N\}
rj,j+1,(j∈{0,1,...,N},在大多数情况下轨迹是安全的(在我们的实现中
r
j
,
j
+
1
<
0.2
r_{j,j+1} < 0.2
rj,j+1<0.2)。在环境十分混乱等极端情况下可能会失效。即便如此,可以选择更小的
r
j
,
j
+
1
r_{j,j+1}
rj,j+1 来重新参数化 B 样条曲线,之后等式 8 可以被满足。
采用与等式 12类似的方程,沿着轨迹超过最大允许值
v
m
a
x
,
a
m
a
x
v_{max},a_{max}
vmax,amax 方向惩罚速度和加速度。一维速度
v
μ
v_{\mu}
vμ 的惩罚是:
F
v
(
v
μ
)
=
{
(
v
μ
2
−
v
m
a
x
2
)
2
v
μ
2
>
v
m
a
x
2
0
v
μ
2
≤
v
m
a
x
2
F_{v}(v_{\mu})=\left\{
其中,
μ
∈
{
x
,
y
,
z
}
\mu \in \{x,y,z\}
μ∈{x,y,z}。加速度惩罚有相同的形式。应用凸包性(图 3),定义了
f
v
,
f
a
f_v,f_a
fv,fa,使不可行的速度和加速度控制点会被惩罚:
f
v
=
∑
μ
∈
{
x
,
y
,
z
}
∑
i
=
p
b
−
1
N
−
p
b
F
v
(
V
i
μ
)
,
f
a
=
∑
μ
∈
{
x
,
y
,
z
}
∑
i
=
p
b
−
2
N
−
p
b
F
a
(
A
i
μ
)
f_{v}=\sum_{\substack{\mu \in \\\{x, y, z\}}} \sum_{i=p_{b}-1}^{N-p_{b}} F_{v}\left(V_{i \mu}\right), \quad f_{a}=\sum_{\substack{\mu \in \\\{x, y, z\}}} \sum_{i=p_{b}-2}^{N-p_{b}} F_{a}\left(A_{i \mu}\right)
fv=μ∈{x,y,z}∑i=pb−1∑N−pbFv(Viμ),fa=μ∈{x,y,z}∑i=pb−2∑N−pbFa(Aiμ)
虽然在路径搜索和优化中约束了动力学可行性,有时仍然会得到不可行的轨迹。基本的原因是梯度信息倾向于延长整个轨迹,同时使其远离障碍物。因此,无人机必须飞行更激进以便在相同时间内飞行更远的距离,如果原来的运动已经逼近物理极限,这会不可避免地导致过度激进的运动。
为保证动态可行性,采用了一种基于导数控制点和非均匀 B 样条时间分配(节点跨度)之间关系的时间调整方法。由于这种关系,可以通过调整相关的时间分配来改变所期望的飞行激烈程度。因此,可以在没有过度保守的约束的情况下确保动态可行性。
首先介绍了时间调整的数学基础。然后提出了 Alg. 2 来解决过于激进的轨迹。
非均匀 B 样条是一种更一般的 B 样条。它与均匀 B 样条唯一的不同是它的每一个节点跨度
Δ
t
m
=
t
m
+
1
−
t
m
\Delta t_m = t_{m+1} - t_m
Δtm=tm+1−tm 是相互独立的。非均匀 B 样条的一阶 导数
V
i
′
V_i^{'}
Vi′ 和二阶导数
A
i
′
A_i^{'}
Ai′ 的控制点可由下式计算:
V
i
′
=
p
b
(
Q
i
+
1
−
Q
i
)
t
i
+
p
b
+
1
−
t
i
+
1
,
A
i
′
=
(
p
b
−
1
)
(
V
i
+
1
′
−
V
i
′
)
t
i
+
p
b
+
1
−
t
i
+
2
(
15
)
根据凸包性,要保证由非均匀 B 样条表示的轨迹的动态可行性,只需要保证一阶和二阶导数的所有控制点在可行域内即可。在 Sect. V-B 中,展示了通过改变不可行控制点相关的节点跨度即可达到这一目的。
使
V
i
′
=
[
V
i
,
x
′
,
V
i
,
y
′
,
V
i
,
z
′
]
⊤
{\bf V}_{i}^{\prime}\,=\,[{\bf V}_{i,x}^{\prime},{\bf V}_{i,y}^{\prime},{\bf V}_{i,z}^{\prime}]^{\top}
Vi′=[Vi,x′,Vi,y′,Vi,z′]⊤ 为不可行的速度控制点。
V
i
,
μ
′
V_{i,\mu}^{'}
Vi,μ′ 是最大的不可行分量并且
∣
V
i
,
μ
′
∣
=
v
m
\mid V_{i,\mu}^{\prime}\mid=v_{m}
∣Vi,μ′∣=vm。从等式 15 可知,
V
i
,
μ
′
V_{i,\mu}^{'}
Vi,μ′ 受持续时间
t
i
+
p
b
+
1
−
t
i
+
1
t_{i+p_{b}+1}-t_{i+1}
ti+pb+1−ti+1 影响。如果改变持续时间为
t
^
^
i
+
p
b
+
1
−
t
^
i
+
1
=
μ
v
(
t
i
+
p
b
+
1
−
t
i
+
1
)
\hat{\hat{t}}_{i+p_{b}+1}-\hat{t}_{i+1}={\mu}_{v}(t_{i+p_{b}+1}-t_{i+1})
t^^i+pb+1−t^i+1=μv(ti+pb+1−ti+1),
V
i
,
μ
′
V_{i,\mu}^{'}
Vi,μ′ 也将改变为:
V
^
i
,
μ
=
P
b
t
^
i
+
p
b
+
1
−
t
^
i
+
1
(
(
Q
i
+
1
,
μ
−
Q
i
,
μ
)
=
1
μ
v
p
b
t
i
+
p
b
+
1
−
t
i
+
1
(
Q
i
+
1
,
μ
−
Q
i
,
μ
)
=
1
μ
v
V
i
,
μ
′
\hat{V}_{i,\mu}=\,\frac{P b}{\hat{t}_{i+p_{b}+1}-\hat{t}_{i+1}}((Q_{i+1,\mu}-Q_{i,\mu}) \\ \qquad=\,\frac{1}{\mu_{v}}\frac{p_{b}}{t_{i+p_{b}+1}-t_{i+1}}(Q_{i+1,\mu}-Q_{i,\mu})=\frac{1}{\mu_{v}}V_{i,\mu}^{\prime}
V^i,μ=t^i+pb+1−t^i+1Pb((Qi+1,μ−Qi,μ)=μv1ti+pb+1−ti+1pb(Qi+1,μ−Qi,μ)=μv1Vi,μ′
因此,如果我们设
μ
v
=
v
m
v
m
a
x
\mu_{v} = \frac {v_m}{v_{max}}
μv=vmaxvm,之后速度是可行的,因为
∣
V
^
i
,
μ
∣
=
v
m
a
x
v
m
∣
V
i
,
μ
′
=
v
m
a
x
∈
[
−
v
m
a
x
,
v
m
a
x
]
\mid\hat{V}_{i,\mu}\mid=\,\textstyle{\frac{v_{m a x}}{v_{m}}}\mid V_{i,\mu}^{'} = v_{max}\in\lbrack-v_{m a x},v_{m a x}\rbrack
∣V^i,μ∣=vmvmax∣Vi,μ′=vmax∈[−vmax,vmax]。
加速度可行性的实施是类似的。
A
i
,
μ
′
A_{i,\mu}^{'}
Ai,μ′ 实际受
t
i
+
p
b
+
2
−
t
i
+
1
t_{i+p_{b}+2}-t_{i+1}
ti+pb+2−ti+1,因为它与
V
i
,
μ
′
V_{i,\mu}^{'}
Vi,μ′ 和
V
i
+
1
,
μ
′
V_{i+1,\mu}^{'}
Vi+1,μ′ 相连接。对于
m
∈
{
i
+
1
,
i
+
2
,
.
.
.
,
i
+
p
b
+
1
}
m \in \{i+1,i+2,...,i+p_b+1\}
m∈{i+1,i+2,...,i+pb+1},改变
Δ
t
m
=
t
m
+
1
−
t
m
\Delta t_m = t_{m+1}-t_m
Δtm=tm+1−tm 为
Δ
t
^
m
=
μ
a
Δ
t
m
\Delta\hat{t}_{m}=\mu_{a}\Delta t_{m}
Δt^m=μaΔtm,可得:
A
^
i
,
μ
=
p
b
−
1
t
^
i
+
p
b
+
1
−
t
^
i
+
2
(
V
^
i
+
1
,
μ
−
V
^
i
,
μ
)
=
1
μ
a
p
b
−
1
t
i
+
p
b
+
1
−
t
i
+
2
(
1
μ
a
V
i
+
1
,
μ
′
−
1
μ
a
V
i
,
μ
′
)
=
1
μ
a
2
p
b
−
1
t
i
+
p
b
+
1
−
t
i
+
2
(
V
i
+
1
,
μ
′
−
V
i
,
μ
′
)
=
1
μ
a
2
A
i
,
μ
′
类似地,使
μ
a
=
(
a
m
a
m
a
x
)
1
2
\mu_a=(\frac{a_m}{a_{max}})^{\frac{1}{2}}
μa=(amaxam)21,可得
∣
A
^
i
,
μ
∣
=
a
m
a
x
a
m
∣
A
i
,
μ
′
∣
=
a
m
a
x
∈
[
−
a
m
a
x
,
a
m
a
x
]
\mid\hat{A}_{i,\mu}\mid\ =\ \frac{a_{m a x}}{a_{m}}\mid A_{i,\mu}^{\prime}\mid\ =a_{m a x}\ \in\ [-{a_{m a x}},{a_{m a x}}]
∣A^i,μ∣ = amamax∣Ai,μ′∣ =amax ∈ [−amax,amax]。
基于 Sect. V-B,采用 Alg. 2 来实现动态可行性。它迭代地找到轨迹中不可行的速度和加速度控制点
V
and
A
\mathcal{V} \text { and } \mathcal{A}
V and A(第 2 行),并调整相关的节点跨度(第 3-10 行)。因为一个结点跨度
∆
t
m
∆t_m
∆tm 会影响几个控制点,反之亦然,用两个略大于1的常数
α
v
α_v
αv 和
α
a
α_a
αa 来限定
µ
v
µ_v
µv 和
µ
a
µ_a
µa (第5,9行)可以防止任何时间跨度被过度延长。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。