Geometrically Constrained Trajectory Optimization for Multicopters 论文分析

这篇论文题目为"针对多旋翼飞行器的几何约束轨迹优化方法"(Geometrically Constrained Trajectory Optimization for Multicopters),主要讲了一种高效求解多旋翼无人机在复杂环境下轨迹规划问题的优化框架。

1. 引言

多旋翼无人机要实现自主导航,需要能够在复杂环境中快速规划出安全且动力学可行的轨迹。但现有的轨迹规划方法在求解质量、计算效率和约束满足度等方面难以兼顾。本文提出了一种轻量级且灵活的轨迹优化框架,可有效平衡上述需求。

该框架的理论基础是针对无约束最优控制问题提出了必要充分条件,可直接构造出最优解的解析形式。基于此,设计了一种新的轨迹表示方法MINCO(Minimum Control),可灵活控制轨迹形状和时间分配。利用光滑映射可方便地消除各种几何约束。提出了一种分离约束评估和轨迹参数化的方法来支持各种状态输入约束。最终,原问题可转化为一个无约束优化问题高效求解。

2.预备知识

2.1 微分平坦性

多旋翼动力学通常可写为仿射非线性系统的形式:
x ˙ = f ( x ) + g ( x ) u \dot{x}=f(x)+g(x)u x˙=f(x)+g(x)u
其中 x ∈ R n x\in\mathbb{R}^n xRn为状态, u ∈ R m u\in\mathbb{R}^m uRm为输入。如果存在一个平坦输出 z ∈ R m z\in\mathbb{R}^m zRm,使得状态和输入都可由其有限阶导数表示:
x = Ψ x ( z , z ˙ , … , z ( s − 1 ) ) u = Ψ u ( z , z ˙ , … , z ( s ) ) \begin{aligned} x&=\Psi_x(z,\dot{z},\ldots,z^{(s-1)})\\ u&=\Psi_u(z,\dot{z},\ldots, z^{(s)}) \end{aligned} xu=Ψx(z,z˙,,z(s1))=Ψu(z,z˙,,z(s))
则称该系统是微分平坦的。平坦映射 Ψ x , Ψ u \Psi_x,\Psi_u Ψx,Ψu消除了系统的微分约束。例如四旋翼的平坦输出通常选取为:
z = ( p x , p y , p z , ψ ) T z=(p_x,p_y,p_z,\psi)^T z=(px,py,pz,ψ)T
其中 ( p x , p y , p z ) (p_x,p_y,p_z) (px,py,pz)为质心平移,$ \psi 为偏航角。利用 为偏航角。利用 为偏航角。利用\Psi_x,\Psi_u 可将对 可将对 可将对z$的约束转化为对状态输入的等价约束。

2.2 平坦输出空间的直接优化

基于上述性质,可以直接在平坦输出空间对 z ( t ) : [ 0 , T ] ↦ R m z(t):[0,T]\mapsto \mathbb{R}^m z(t):[0,T]Rm进行优化,再通过 Ψ x , Ψ u \Psi_x,\Psi_u Ψx,Ψu映射回状态输入空间。目标函数选取为正则化的二次型控制量:
∫ 0 T v ( t ) T W v ( t ) d t + ρ ( T ) \int_{0}^{T}v(t)^TWv(t)dt+\rho(T) 0Tv(t)TWv(t)dt+ρ(T)

其中 v ( t ) = z ( s ) ( t ) v(t) = z^{(s)}(t) v(t)=z(s)(t), W ≻ 0 W \succ 0 W0。几何约束为 z ( t ) ∈ F , ∀ t ∈ [ 0 , T ] z(t) \in \mathcal{F}, \forall t \in [0, T] z(t)F,t[0,T],表示轨迹要始终在一个无碰撞区域 F \mathcal{F} F 内。状态输入约束则表示为

G D ( x ( t ) , u ( t ) ) ⪯ 0 , ∀ t ∈ [ 0 , T ] G_D(x(t),u(t))\preceq 0,\forall t\in[0,T] GD(x(t),u(t))0,t[0,T]
它可以通过 Ψ x , Ψ u \Psi_x,\Psi_u Ψx,Ψu等价转化为对 z z z的约束:
G ( z ( t ) , z ˙ ( t ) , … , z ( s ) ( t ) ) ⪯ 0 , ∀ t ∈ [ 0 , T ] G(z(t),\dot{z}(t),\ldots,z^{(s)}(t))\preceq0,\forall t\in[0,T] G(z(t),z˙(t),,z(s)(t))0,t[0,T]
最终,可得到如下平坦空间的轨迹优化问题:
min ⁡ z ( t ) , T ∫ 0 T v ( t ) T W v ( t ) d t + ρ ( T ) s.t. z ( s ) ( t ) = v ( t ) , ∀ t ∈ [ 0 , T ] G ( z ( t ) , … , z ( s ) ( t ) ) ⪯ 0 , ∀ t ∈ [ 0 , T ] z ( t ) ∈ F , ∀ t ∈ [ 0 , T ] z [ s − 1 ] ( 0 ) = z ˉ o , z [ s − 1 ] ( T ) = z ˉ f \begin{aligned} \min_{z(t),T}\quad & \int_{0}^{T}v(t)^TWv(t)dt+\rho(T)\\ \textrm{s.t.}\quad & \begin{aligned} z^{(s)}(t)&=v(t),\forall t\in[0,T]\\ G(z(t),\ldots,z^{(s)}(t))&\preceq 0,\forall t\in[0,T] \\ z(t)&\in\mathcal{F},\forall t\in[0,T]\\ z^{[s-1]}(0)&=\bar{z}_o,z^{[s-1]}(T)=\bar{z}_f \end{aligned} \end{aligned} z(t),Tmins.t.0Tv(t)TWv(t)dt+ρ(T)z(s)(t)G(z(t),,z(s)(t))z(t)z[s1](0)=v(t),t[0,T]0,t[0,T]F,t[0,T]=zˉo,z[s1](T)=zˉf
其中 z ˉ o , z ˉ f \bar{z}_o,\bar{z}_f zˉo,zˉf为边界条件。无碰撞区域 F \mathcal{F} F用凸集的并 F ≈ F ~ = ∪ i = 1 M P P i \mathcal{F}\approx\tilde{\mathcal{F}}=\cup_{i=1}^{M_P} \mathcal{P}_i FF~=i=1MPPi近似表示,其中 P i \mathcal{P}_i Pi可以是球形或多面体区域。

3. 多阶段控制量最小化

本节分析在没有函数不等式约束时的多阶段控制量最小化问题,提出了一般情况下的最优性必要充分条件,利用该条件可直接构造出全局最优解的解析形式。基于此设计了MINCO(Minimum Control)轨迹类及其空间-时间变形方法,以满足不同任务的需求。

3.1 无约束控制量最小化

为得到一种灵活表征轨迹的方式,考虑求解如下M阶段无约束最优控制问题:
min ⁡ z ( t ) ∫ t 0 t M v ( t ) T W v ( t ) d t s.t. z ( s ) ( t ) = v ( t ) , ∀ t ∈ [ t 0 , t M ] z [ s − 1 ] ( t 0 ) = z ˉ o , z [ s − 1 ] ( t M ) = z ˉ f z [ d i − 1 ] ( t i ) = z ˉ i , 1 ≤ i < M t i − 1 < t i , 1 ≤ i ≤ M \begin{aligned} \min_{z(t)} \quad & \int_{t_0}^{t_M}v(t)^TWv(t)dt \\ \textrm{s.t.}\quad & \begin{aligned} z^{(s)}(t)&=v(t),\forall t\in[t_0,t_M] \\ z^{[s-1]}(t_0)=\bar{z}_o,z^{[s-1]}&(t_M)=\bar{z}_f \\ z^{[d_i-1]}(t_i)&=\bar{z}_i,1\leq i<M \\ t_{i-1}&<t_i,1\leq i\leq M \end{aligned} \end{aligned} z(t)mins.t.t0tMv(t)TWv(t)dtz(s)(t)z[s1](t0)=zˉo,z[s1]z[di1](ti)ti1=v(t),t[t0,tM](tM)=zˉf=zˉi,1i<M<ti,1iM
其中 t 0 , … , t M t_0,\ldots,t_M t0,,tM为 fixed 时间戳,把整个时域 [ t 0 , t M ] [t_0,t_M] [t0,tM]分成 M 段。 z ˉ o , z ˉ f ∈ R m s \bar{z}_o,\bar{z}_f\in \mathbb{R}^{ms} zˉo,zˉfRms为边界条件, z ˉ i ∈ R m d i ( d i ≤ s ) \bar{z}_i\in \mathbb{R}^{md_i}(d_i\leq s) zˉiRmdi(dis)为中间点 t i t_i ti 处指定的 d i d_i di阶导数值。

现有方法大多只研究了特殊情形下的必要条件。本文给出了一般情况下该问题的最优性必要充分条件:

定理2(最优性条件): 如果 z ∗ ( t ) : [ t 0 , t M ] ↦ R m z^*(t):[t_0,t_M]\mapsto\mathbb{R}^m z(t):[t0,tM]Rm满足以下条件,则它是问题的全局最优解,反之亦然:

  • 映射 z ∗ ( t ) : [ t i − 1 , t i ] ↦ R m z^*(t):[t_{i-1},t_i]\mapsto\mathbb{R}^m z(t):[ti1,ti]Rm 可参数化为2s-1次多项式, ∀ 1 ≤ i ≤ M \forall 1\leq i\leq M ∀1iM;
  • 满足边界条件 z [ s − 1 ] ( t 0 ) = z ˉ o z^{[s-1]}(t_0)=\bar{z}_o z[s1](t0)=zˉo z [ s − 1 ] ( t M ) = z ˉ f z^{[s-1]}(t_M)=\bar{z}_f z[s1](tM)=zˉf;
  • 满足中间时刻 t i t_i ti的条件 z [ d i − 1 ] ( t i ) = z ˉ i z^{[d_i-1]}(t_i)=\bar{z}_i z[di1](ti)=zˉi;
  • z ∗ ( t ) z^*(t) z(t) t i t_i ti点处 d ˉ i − 1 \bar{d}_i-1 dˉi1阶连续可微,其中 d ˉ i = 2 s − d i , ∀ 1 ≤ i < M \bar{d}_i=2s-d_i, \forall 1\leq i<M dˉi=2sdi,∀1i<M

此外,满足上述条件的轨迹是唯一的。

3.2 无需显式目标函数的最小化

定理2提供了直接构造问题最优解的方法,计算复杂度是关于M的线性阶。不需要显式或隐式地计算目标函数及其梯度。

考虑一条第i段轨迹表示为2s-1次多项式:
p i ( t ) = c i T β ( t − t i − 1 ) , t ∈ [ t i − 1 , t i ] p_i(t)=c_i^T\beta(t-t_{i-1}),t\in[t_{i-1},t_i] pi(t)=ciTβ(tti1),t[ti1,ti]
其中 β ( x ) = ( 1 , x , … , x N ) T \beta(x)=(1,x,\ldots,x^N)^T β(x)=(1,x,,xN)T为基函数, c i ∈ R 2 s × m c_i\in\mathbb{R} ^{2s\times m} ciR2s×m为系数矩阵。整条轨迹可表示为系数矩阵 c ∈ R 2 M s × m c\in\mathbb{R}^{2Ms\times m} cR2Ms×m和时间向量 T ∈ R > 0 M \mathbf{T}\in\mathbb{R}_{>0}^M TR>0M的组合:
c = ( c 1 T ⋮ c M T ) , T = ( T 1 , … , T M ) T c=\begin{pmatrix} c_1^T\\ \vdots\\ c_M^T \end{pmatrix},\quad \mathbf{T}=(T_1,\ldots,T_M)^T c= c1TcMT ,T=(T1,,TM)T
其中 T i T_i Ti表示第i段的持续时间, t i = ∑ j = 1 i T j t_i=\sum_{j=1}^i T_j ti=j=1iTj为时间戳, T = ∥ T ∥ 1 T=\|\mathbf{T}\|_1 T=T1为总时长。

为计算式(3)的解析解,我们直接对系数矩阵 c c c施加最优性条件。记 D 0 ∈ R s × m , D M ∈ R s × m , D i ∈ R d i × m D_0\in\mathbb{R}^{s\times m},D_M\in\mathbb{R}^{s\times m},D_i\in\mathbb{R}^{d_i\times m} D0Rs×m,DMRs×m,DiRdi×m分别为边界和中间点处的导数值。在 t i t_i ti点的条件可表示为:
( E i F i ) ( c i c i + 1 ) = ( D i 0 d ˉ i × m ) (E_i \quad F_i)\begin{pmatrix} c_i\\c_{i+1} \end{pmatrix}=\begin{pmatrix} D_i\\0_{\bar{d}_i\times m} \end{pmatrix} (EiFi)(cici+1)=(Di0dˉi×m)
其中
E i = ( β ( T i ) , … , β ( d i − 1 ) ( T i ) , β ( T i ) , … , β ( d ˉ i − 1 ) ( T i ) ) T F i = ( 0 , − β ( 0 ) , … , − β ( d ˉ i − 1 ) ( 0 ) ) T \begin{aligned} E_i&=(\beta(T_i),\ldots,\beta^{(d_i-1)}(T_i),\beta(T_i),\ldots,\beta^{(\bar{d}_i-1)}(T_i))^T \\ F_i&=(0,-\beta(0),\ldots,-\beta^{(\bar{d}_i-1)}(0))^T \end{aligned} EiFi=(β(Ti),,β(di1)(Ti),β(Ti),,β(dˉi1)(Ti))T=(0,β(0),,β(dˉi1)(0))T
此处 β ( k ) \beta^{(k)} β(k)表示 β \beta β的k阶导数。边界条件可类似表示:
F 0 = ( β ( 0 ) , … , β ( s − 1 ) ( 0 ) ) T E M = ( β ( T M ) , … , β ( s − 1 ) ( T M ) ) T \begin{aligned} F_0&=(\beta(0),\ldots,\beta^{(s-1)}(0))^T\\ E_M&=(\beta(T_M),\ldots,\beta^{(s-1)}(T_M))^T \end{aligned} F0EM=(β(0),,β(s1)(0))T=(β(TM),,β(s1)(TM))T

将所有片段的条件组合可得关于最优系数 c c c的线性方程组 M c = b \mathbf{M}c=b Mc=b,其中
M = ( F 0 E 1 F 1 E 2 F 2 ⋱ ⋱ E M − 1 F M − 1 E M ) \mathbf{M}=\begin{pmatrix} F_0 & & & &\\ E_1 & F_1 & & &\\ & E_2 & F_2 &&\\ & & \ddots &\ddots & \\ & & & E_{M-1} & F_{M-1}\\ & & & & E_M \end{pmatrix} M= F0E1F1E2F2EM1FM1EM
b = ( D 0 T D 1 T 0 m × d ˉ 1 ⋮ D M − 1 T 0 m × d ˉ M − 1 D M T ) b=\begin{pmatrix} D_0^T\\D_1^T\\0_{m\times\bar{d}_1}\\ \vdots\\D_{M-1}^T\\0_{m\times\bar{d}_{M-1}}\\D_M^T \end{pmatrix} b= D0TD1T0m×dˉ1DM1T0m×dˉM1DMT

定理2保证了对于任意 T ≻ 0 \mathbf{T}\succ0 T0, 系数矩阵 M \mathbf{M} M是非奇异的。因此,唯一解 c c c可通过求解带状线性方程组 M c = b \mathbf{M}c=b Mc=b得到,计算复杂度为 O ( M ) \mathcal{O}(M) O(M)

这种无需显式目标函数,直接施加最优性条件构造解的方法,具有简单、高效、稳定、易扩展等优点。基于它设计的MINCO轨迹类可作为优化框架的可靠子模块。

3.3 带空间-时间变形的MINCO轨迹

为灵活满足各种任务需求,我们选择中间点 q = ( q 1 , … , q M − 1 ) q=(q_1,\ldots,q_{M-1}) q=(q1,,qM1)和时间向量 T \mathbf{T} T作为式(3)的参数。对于任意 q , T q,\mathbf{T} q,T,定理2可唯一确定出一条无约束最优解,我们将其定义为MINCO(Minimum Control)轨迹类:

T MINCO = { p ( t ) : [ 0 , T ] ↦ R m ∣ c = c ( q , T )  由定理2确定 , ∀ q ∈ R m × ( M − 1 ) , T ∈ R > 0 M } \mathcal{T}_{\text{MINCO}}=\{p(t):[0,T]\mapsto\mathbb{R}^m| c=c(q,\mathbf{T}) \text{ 由定理2确定}, \forall q\in\mathbb{R}^{m\times(M-1)}, \mathbf{T}\in\mathbb{R}_{>0}^M\} TMINCO={p(t):[0,T]Rmc=c(q,T) 由定理2确定,qRm×(M1),TR>0M}

MINCO类的任意元素都可由 q q q T \mathbf{T} T紧致参数化。设计如下的迭代过程实现轨迹的空间-时间变形:

对任意的目标函数 K ( c , T ) K(c,\mathbf{T}) K(c,T),在MINCO类上可表示为关于 q , T q,\mathbf{T} q,T的函数:
$$
W(q,\mathbf{T})=K(c(q,\mathbf{T}),\mathbf{T})为优化该目标函数,需要计算梯度 ∂ W / ∂ q \partial W/\partial q W/q ∂ W / ∂ T \partial W/\partial \mathbf{T} W/T。下面给出了一种线性复杂度的传播方案。

将线性方程组(12)改写为:
M ( T ) c ( q , T ) = b ( q ) \mathbf{M}(\mathbf{T})c(q,\mathbf{T})=b(q) M(T)c(q,T)=b(q)

q i , j q_{i,j} qi,j求导可得:
∂ c ∂ q i , j = M − 1 ∂ b ∂ q i , j \frac{\partial c}{\partial q_{i,j}}=\mathbf{M}^{-1}\frac{\partial b}{\partial q_{i,j}} qi,jc=M1qi,jb

进而有:
∂ W ∂ q i , j = Tr { ( ∂ c ∂ q i , j ) T ∂ K ∂ c } = Tr { ( ∂ b ∂ q i , j ) T ( M − T ∂ K ∂ c ) } \frac{\partial W}{\partial q_{i,j}}=\text{Tr}\left\{\left(\frac{\partial c}{\partial q_{i,j}}\right)^T\frac{\partial K}{\partial c}\right\}=\text{Tr}\left\{\left(\frac{\partial b}{\partial q_{i,j}}\right)^T\left(\mathbf{M}^{-T}\frac{\partial K}{\partial c}\right)\right\} qi,jW=Tr{(qi,jc)TcK}=Tr{(qi,jb)T(MTcK)}

b ( q ) b(q) b(q)的定义(15)可知, ∂ b / ∂ q i , j \partial b/\partial q_{i,j} b/qi,j仅在 ( 2 i − 1 ) s + 1 (2i-1)s+1 (2i1)s+1行和 j j j列有一个非零元素1。将所有结果堆叠即得:
∂ W ∂ q i = ( M − T ∂ K ∂ c ) T e ( 2 i − 1 ) s + 1 \frac{\partial W}{\partial q_i}=\left(\mathbf{M}^{-T}\frac{\partial K}{\partial c}\right)^Te_{(2i-1)s+1} qiW=(MTcK)Te(2i1)s+1

其中 e j e_j ej I 2 M s \mathbf{I}_{2Ms} I2Ms的第 j j j列。定义矩阵 G ∈ R 2 M s × m \mathbf{G}\in\mathbb{R}^{2Ms\times m} GR2Ms×m为:
M T G = ∂ K ∂ c \mathbf{M}^T\mathbf{G}=\frac{\partial K}{\partial c} MTG=cK

只需计算一次 G \mathbf{G} G即可得到所有 1 ≤ i < M 1\leq i< M 1i<M ∂ W / ∂ q i \partial W/\partial q_i W/qi。由于已经对 M \mathbf{M} M做了带状PLU分解,可直接利用分解结果避免求逆 M T \mathbf{M}^T MT。设 M = P L U \mathbf{M}=\mathbf{P}\mathbf{L}\mathbf{U} M=PLU,其中 P \mathbf{P} P为置换阵, L \mathbf{L} L为下三角带状阵, U \mathbf{U} U为上三角带状阵,则有:
M T = L ˉ U ˉ P T \mathbf{M}^T=\bar{\mathbf{L}}\bar{\mathbf{U}}\mathbf{P}^T MT=LˉUˉPT
其中
L ˉ = U T ( U ∘ I ) − 1 ,   U ˉ = ( I ∘ U ) L T \bar{\mathbf{L}}=\mathbf{U}^T(\mathbf{U}\circ \mathbf{I})^{-1},\ \bar{\mathbf{U}}=(\mathbf{I}\circ \mathbf{U})\mathbf{L}^T Lˉ=UT(UI)1, Uˉ=(IU)LT

∘ \circ 表示Hadamard积,即逐元素乘积。这样 G \mathbf{G} G也能以线性复杂度求解。将 G \mathbf{G} G分块为:
G = ( G 0 T G 1 T ⋮ G M − 1 T G M T ) \mathbf{G}=\begin{pmatrix} \mathbf{G}_0^T\\ \mathbf{G}_1^T\\\vdots\\\mathbf{G}_{M-1}^T\\ \mathbf{G}_M^T \end{pmatrix} G= G0TG1TGM1TGMT
其中 G 0 ∈ R s × m , G M ∈ R s × m , G i ∈ R 2 s × m , 1 ≤ i < M \mathbf{G}_0\in\mathbb{R}^{s\times m},\mathbf{G}_M\in\mathbb{R}^{s\times m},\mathbf{G}_i\in\mathbb{R}^{2s\times m},1\leq i<M G0Rs×m,GMRs×m,GiR2s×m,1i<M。最终 ∂ W / ∂ q \partial W/\partial q W/q可表示为:

∂ W ∂ q = ( G 1 T e 1 ⋮ G M − 1 T e 1 ) \frac{\partial W}{\partial q}=\begin{pmatrix} \mathbf{G}_1^Te_1\\ \vdots\\ \mathbf{G}_{M-1}^Te_1 \end{pmatrix} qW= G1Te1GM1Te1
其中 e 1 e_1 e1 I 2 s \mathbf{I}_{2s} I2s的第一列。该操作相当于取出 G T \mathbf{G}^T GT M − 1 M-1 M1个特定的列。

类似地,对 T i \mathbf{T}_i Ti求导可得:
∂ M ∂ T i c + M ∂ c ∂ T i = 0 \frac{\partial \mathbf{M}}{\partial \mathbf{T}_i}c+\mathbf{M}\frac{\partial c}{\partial \mathbf{T}_i}=0 TiMc+MTic=0
从而:
∂ W ∂ T i = ∂ K ∂ T i + Tr { ( ∂ c ∂ T i ) T ∂ K ∂ c } = ∂ K ∂ T i − Tr { ( ∂ M ∂ T i c ) T M − T ∂ K ∂ c } = ∂ K ∂ T i − Tr { G T ∂ M ∂ T i c } \frac{\partial W}{\partial \mathbf{T}_i}=\frac{\partial K}{\partial \mathbf{T}_i}+\text{Tr}\left\{\left(\frac{\partial c}{\partial \mathbf{T}_i}\right)^T\frac{\partial K}{\partial c}\right\}=\frac{\partial K}{\partial \mathbf{T}_i}-\text{Tr}\left\{\left(\frac{\partial\mathbf{M}}{\partial \mathbf{T}_i}c\right)^T\mathbf{M}^{-T}\frac{\partial K}{\partial c}\right\}=\frac{\partial K}{\partial \mathbf{T}_i}-\text{Tr}\left\{\mathbf{G}^T\frac{\partial \mathbf{M}}{\partial \mathbf{T}_i}c\right\} TiW=TiK+Tr{(Tic)TcK}=TiKTr{(TiMc)TMTcK}=TiKTr{GTTiMc}

根据 M \mathbf{M} M的带状结构,有:
G T ∂ M ∂ T i c = G i T ∂ E i ∂ T i c i \mathbf{G}^T\frac{\partial \mathbf{M}}{\partial \mathbf{T}_i}c=\mathbf{G}_i^T\frac{\partial E_i}{\partial \mathbf{T}_i}c_i GTTiMc=GiTTiEici

因此 ∂ W / ∂ T i \partial W/\partial \mathbf{T}_i W/Ti可表示为:
∂ W ∂ T i = ∂ K ∂ T i − Tr { G i T ∂ E i ∂ T i c i } \frac{\partial W}{\partial \mathbf{T}_i}=\frac{\partial K}{\partial \mathbf{T}_i}-\text{Tr}\left\{\mathbf{G}_i^T\frac{\partial E_i}{\partial \mathbf{T}_i}c_i\right\} TiW=TiKTr{GiTTiEici}

式中 ∂ E i / ∂ T i \partial E_i/\partial \mathbf{T}_i Ei/Ti可由(13)解析求导得到。对每个 1 ≤ i ≤ M 1\leq i\leq M 1iM计算(34)式即得 ∂ W / ∂ T \partial W/\partial \mathbf{T} W/T

至此,我们完成了 ∂ W / ∂ q \partial W/\partial q W/q ∂ W / ∂ T \partial W/\partial \mathbf{T} W/T的计算,其复杂度均为 O ( M ) \mathcal{O}(M) O(M)。将该方法与常见优化器结合,即可高效实现 T MINCO \mathcal{T}_{\text{MINCO}} TMINCO的空间-时间变形,同时保持局部光滑性。

这一节主要研究了一类无约束的多阶段控制量最小化问题, 总结下:

首先,考虑如下的多阶段最优控制问题:
min ⁡ z ( t ) ∫ t 0 t M v ( t ) T W v ( t ) d t s.t. z ( s ) ( t ) = v ( t ) , ∀ t ∈ [ t 0 , t M ] z [ s − 1 ] ( t 0 ) = z ˉ o , z [ s − 1 ] ( t M ) = z ˉ f z [ d i − 1 ] ( t i ) = z ˉ i , 1 ≤ i < M t i − 1 < t i , 1 ≤ i ≤ M \begin{aligned} \min_{z(t)} \quad & \int_{t_0}^{t_M}v(t)^TWv(t)dt \\ \textrm{s.t.}\quad & \begin{aligned} z^{(s)}(t)&=v(t),\forall t\in[t_0,t_M] \\ z^{[s-1]}(t_0)=\bar{z}_o,z^{[s-1]}&(t_M)=\bar{z}_f \\ z^{[d_i-1]}(t_i)&=\bar{z}_i,1\leq i<M \\ t_{i-1}&<t_i,1\leq i\leq M \end{aligned} \end{aligned} z(t)mins.t.t0tMv(t)TWv(t)dtz(s)(t)z[s1](t0)=zˉo,z[s1]z[di1](ti)ti1=v(t),t[t0,tM](tM)=zˉf=zˉi,1i<M<ti,1iM

这里 t 0 , … , t M t_0,\ldots,t_M t0,,tM为固定的时间戳,将整个时域 [ t 0 , t M ] [t_0,t_M] [t0,tM]分成 M M M段。 z ˉ o , z ˉ f ∈ R m s \bar{z}_o,\bar{z}_f\in \mathbb{R}^{ms} zˉo,zˉfRms为边界条件, z ˉ i ∈ R m d i ( d i ≤ s ) \bar{z}_i\in \mathbb{R}^{md_i}(d_i\leq s) zˉiRmdi(dis)为中间时刻 t i t_i ti处的 d i d_i di阶导数值。目标是找到一条 s s s阶导数为 v ( t ) v(t) v(t)的轨迹 z ( t ) z(t) z(t)使得控制量 ∫ v ( t ) T W v ( t ) d t \int v(t)^TWv(t)dt v(t)TWv(t)dt最小。

本文给出了上述问题最优解应满足的必要充分条件,称为 定理2 :

若映射 z ∗ ( t ) : [ t 0 , t M ] ↦ R m z^*(t):[t_0,t_M]\mapsto\mathbb{R}^m z(t):[t0,tM]Rm满足:

  1. 在每段 [ t i − 1 , t i ] [t_{i-1},t_i] [ti1,ti]上可参数化为 2 s − 1 2s-1 2s1次多项式;
  2. 满足边界条件 z [ s − 1 ] ( t 0 ) = z ˉ o z^{[s-1]}(t_0)=\bar{z}_o z[s1](t0)=zˉo z [ s − 1 ] ( t M ) = z ˉ f z^{[s-1]}(t_M)=\bar{z}_f z[s1](tM)=zˉf;
  3. 满足中间点条件 z [ d i − 1 ] ( t i ) = z ˉ i z^{[d_i-1]}(t_i)=\bar{z}_i z[di1](ti)=zˉi;
  4. t i t_i ti点处 2 s − d i − 1 2s-d_i-1 2sdi1阶连续可微;

z ∗ ( t ) z^*(t) z(t)为问题的唯一最优解,反之亦然。

该定理来源于最优控制的Pontryagin极大值原理,证明涉及将原问题转化为等价的Mayer型问题并分析其一阶最优性条件。虽然细节较多,但结论非常简洁:最优轨迹可用一系列 2 s − 1 2s-1 2s1次多项式精确表示,多项式系数由定理2的条件唯一确定。

基于定理2,文中提出了一种称为MINCO(Minimum Control)的轨迹表示方法:
p i ( t ) = c i T β ( t − t i − 1 ) , t ∈ [ t i − 1 , t i ] β ( t ) = ( 1 , t , … , t 2 s − 1 ) T \begin{aligned} p_i(t)&=c_i^T\beta(t-t_{i-1}),t\in[t_{i-1},t_i]\\ \beta(t)&=(1,t,\ldots,t^{2s-1})^T \end{aligned} pi(t)β(t)=ciTβ(tti1),t[ti1,ti]=(1,t,,t2s1)T

这里 c i ∈ R 2 s × m c_i\in\mathbb{R}^{2s\times m} ciR2s×m为第 i i i段轨迹的多项式系数矩阵。将MINCO的分段表达式和定理2的条件结合,可得关于系数 c = ( c 1 T , … , c M T ) T c=(c_1^T,\ldots,c_M^T)^T c=(c1T,,cMT)T的线性方程组:
M c = b \mathbf{M}c=b Mc=b

这里的 M \mathbf{M} M是由多项式基函数在 t i t_i ti处的值构成的分块矩阵,反映了轨迹连续性条件; b b b则由边界条件和中间点条件构成。定理2保证了 M \mathbf{M} M可逆,因此 c = M − 1 b c=\mathbf{M}^{-1}b c=M1b可唯一确定MINCO类的最优轨迹。

该结论的重要意义在于,它给出了无约束控制量最小化问题的解析解,且求解复杂度为 O ( M ) O(M) O(M)。这为后续研究轨迹的参数敏感性和变形奠定了基础。文中进一步分析了MINCO关于中间点 q i q_i qi和时间分配 T i T_i Ti的梯度,给出了线性时间复杂度的梯度传播方案,使得MINCO能以很低的计算代价适应不同的任务需求。

总的来说,定理2是多阶段控制量最小化的理论基础,而MINCO是其高效的数值求解方法。本节在理论和应用两个层面上系统地分析了这类问题,这些结论为后文构建更一般的轨迹优化框架提供了支撑。

4. 几何约束下的飞行轨迹优化

本节提出了一个统一的优化框架,可处理带不同时间正则项 ρ ( T ) \rho(T) ρ(T)、空间约束 F ~ \tilde{\mathcal{F}} F~和连续时间约束 G G G的飞行轨迹优化问题。该框架本质上将原问题松弛到MINCO类,并利用空间-时间变形来满足各种可行性要求。
设计了轻量级方案消除几何约束,使轨迹能自由变形。对连续时间约束,提出了时间积分罚函数以保证可行性且不牺牲可扩展性。最终,带约束的轨迹优化被转化为一个稀疏无约束优化,可高效可靠地求解。

4.1 时间约束消除

对于固定总时间 T Σ T_\Sigma TΣ M M M片轨迹,其时间向量 T \mathbf{T} T的可行域是 R > 0 M \mathbb{R}_{>0}^M R>0M中的一个 ( M − 1 ) (M-1) (M1)-单纯形的相对内部,如图3所示。常见的优化算法大多针对欧式空间设计,在流形上需要频繁收缩,计算效率低。为此,我们给出了 T \mathbf{T} T的显式微分同胚,将其映射到欧式空间,从而方便使用高效的无约束优化器。

对多项式样条而言,式(11)中的控制量是 c c c T \mathbf{T} T的函数,记为 J c ( c , T ) J_c(c,\mathbf{T}) Jc(c,T)。文献[28]给出了 J c J_c Jc及其梯度的解析表达式。由于MINCO的系数由 c ( q , T ) c(q,\mathbf{T}) c(q,T)决定,式(11)的目标函数可改写为:
J ( q , T ) = J q ( q , T ) + ρ ( ∥ T ∥ 1 ) J(q,\mathbf{T})=J_q(q,\mathbf{T})+\rho(\|\mathbf{T}\|_1) J(q,T)=Jq(q,T)+ρ(T1)
其中 J q ( q , T ) = J c ( c ( q , T ) , T ) J_q(q,\mathbf{T})=J_c(c(q,\mathbf{T}),\mathbf{T}) Jq(q,T)=Jc(c(q,T),T)。显然,由 J c J_c Jc及其梯度计算 J q J_q Jq及其梯度的复杂度为 O ( M ) \mathcal{O}(M) O(M)

直接用 ∂ J / ∂ T \partial J/\partial \mathbf{T} J/T来优化 T \mathbf{T} T会遇到问题,因为 J q ( q , T ) J_q(q,\mathbf{T}) Jq(q,T)的定义域为 T ∈ R > 0 M \mathbf{T}\in\mathbb{R}_{>0}^M TR>0M。当任意 T i → 0 T_i\rightarrow 0 Ti0 q q q中没有连续重复点时, J q J_q Jq无界。此外,固定总时间正则项 ρ f \rho_f ρf进一步限制了 J J J的定义域为 ∑ i = 1 M − 1 T i < T Σ \sum_{i=1}^{M-1}T_i<T_\Sigma i=1M1Ti<TΣ

为消除这些隐式约束,考虑 ρ f \rho_f ρf对应的可行域:
T f = { T ∈ R M ∣ ∥ T ∥ 1 = T Σ , T ≻ 0 } \mathcal{T}_f=\{\mathbf{T}\in\mathbb{R}^M | \|\mathbf{T}\|_1=T_\Sigma,\mathbf{T}\succ0\} Tf={TRM∣∥T1=TΣ,T0}

容易看出,当 q q q非平凡时, J ( q , ⋅ ) J(q,\cdot) J(q,)有界的充要条件是 T ∈ RelInt ( T f ) \mathbf{T}\in\text{RelInt}(\mathcal{T}_f) TRelInt(Tf),即 T f \mathcal{T}_f Tf的相对内部。我们有如下结论:

命题1: T f \mathcal{T}_f Tf R M − 1 \mathbb{R}^{M-1} RM1微分同胚。设 τ = ( τ 1 , … , τ M − 1 ) ∈ R M − 1 \tau=(\tau_1,\ldots,\tau_{M-1})\in\mathbb{R}^{M-1} τ=(τ1,,τM1)RM1,一个 C ∞ C^\infty C微分同胚由下式给出( 1 ≤ i < M 1\leq i<M 1i<M):
T i = e τ i 1 + ∑ j = 1 M − 1 e τ j T Σ , T M = T Σ − ∑ j = 1 M − 1 T j T_i=\frac{e^{\tau_i}}{1+\sum_{j=1}^{M-1}e^{\tau_j}}T_\Sigma,\quad T_M=T_\Sigma-\sum_{j=1}^{M-1}T_j Ti=1+j=1M1eτjeτiTΣ,TM=TΣj=1M1Tj

利用该微分同胚,可直接在 R M − 1 \mathbb{R}^{M-1} RM1上关于 τ \tau τ最小化 J J J,因为可行域约束被自动满足了。优化 τ \tau τ需要梯度传播。将 ∂ J q / ∂ T \partial J_q/\partial \mathbf{T} Jq/T分块为 ( g a T , g b ) T (g_a^T,g_b)^T (gaT,gb)T,其中 g a ∈ R M − 1 , g b ∈ R g_a\in\mathbb{R}^{M-1},g_b\in\mathbb{R} gaRM1,gbR。对(37)式求导可得 J J J关于 τ \tau τ的梯度:
∂ J ∂ τ = ( g a − g b 1 ) ∘ e [ τ ] 1 + ∥ e [ τ ] ∥ 1 − ( g a T e [ τ ] − g b ∥ e [ τ ] ∥ 1 ) e [ τ ] ( 1 + ∥ e [ τ ] ∥ 1 ) 2 \frac{\partial J}{\partial\tau}=\frac{(g_a-g_b\mathbf{1})\circ e^{[\tau]}}{1+\|e^{[\tau]}\|_1}-\frac{(g_a^Te^{[\tau]}-g_b\|e^{[\tau]}\|_1)e^{[\tau]}}{(1+\|e^{[\tau]}\|_1)^2} τJ=1+e[τ]1(gagb1)e[τ](1+e[τ]1)2(gaTe[τ]gbe[τ]1)e[τ]
其中 e [ ⋅ ] e^{[\cdot]} e[]表示逐元素指数映射, 1 \mathbf{1} 1为全1向量。若指定了初始猜测 T \mathbf{T} T,对应的 τ \tau τ可由微分同胚的逆映射计算:
τ i = ln ⁡ ( T i / T M ) , 1 ≤ i < M \tau_i=\ln(T_i/T_M), 1\leq i<M τi=ln(Ti/TM),1i<M

对于线性时间正则项 ρ s \rho_s ρs,只需确保 T ≻ 0 \mathbf{T}\succ0 T0。此时微分同胚取 T = e [ τ ] T=e^{[\tau]} T=e[τ]即可。

我们统一将微分同胚记为 T ( τ ) \mathbf{T}(\tau) T(τ)。直接在 τ \tau τ上无约束优化 J ( q , T ( τ ) ) J(q,\mathbf{T}(\tau)) J(q,T(τ))即可。尽管 T ( τ ) \mathbf{T}(\tau) T(τ)不保持凸性,但原目标函数 J ( q , T ) J(q,\mathbf{T}) J(q,T)本身就是非凸的。因此唯一的顾虑是 T ( τ ) \mathbf{T}(\tau) T(τ)是否引入了额外的局部极小值。我们有如下结论:

命题2: 设 F : D F ↦ R F:D_F\mapsto\mathbb{R} F:DFR为定义在凸开集 D F ∈ R N D_F\in\mathbb{R}^N DFRN上的任意 C 2 C^2 C2函数。对任意 C 2 C^2 C2微分同胚 G : R N ↦ D F G:\mathbb{R}^N\mapsto D_F G:RNDF,定义 H : R N ↦ R H:\mathbb{R}^N\mapsto\mathbb{R} H:RNR H ( y ) = F ( G ( y ) ) , ∀ y ∈ R N H(y)=F(G(y)),\forall y\in\mathbb{R}^N H(y)=F(G(y)),yRN。对任意 x ∈ D F , y ∈ R N x\in D_F,y\in\mathbb{R}^N xDF,yRN满足 x = G ( y ) x=G(y) x=G(y)或等价地 y = G − 1 ( x ) y=G^{-1} (x) y=G1(x),下列结论总成立:

  • 当且仅当 ∇ H ( y ) = 0 \nabla H(y)=0 H(y)=0时有 ∇ F ( x ) = 0 \nabla F(x)=0 F(x)=0;
  • ∇ F ( x ) = 0 \nabla F(x)=0 F(x)=0时, ∇ 2 F ( x ) \nabla^2F(x) 2F(x)正定(或半正定)当且仅当 ∇ 2 H ( y ) \nabla^2H(y) 2H(y)正定(或半正定)。

命题2确认了 T ( τ ) \mathbf{T}(\tau) T(τ)保持了一阶/二阶必要最优性条件和二阶充分最优性条件。

4.2 球形区域的空间约束消除

为保证运动安全,需要将轨迹限制在可行域 F ~ \tilde{\mathcal{F}} F~内。尽管 F ~ \tilde{\mathcal{F}} F~非凸,但它由一系列局部连通的凸集组成。若每段轨迹都被分配到这些凸集中,则每段的安全约束就变为凸的,可方便地并入 G G G中。借助MINCO的特性,每个凸集的飞行时间可直接优化。因此,我们在优化前固定轨迹分段,而不是引入整数变量。相应地,中间点应被限制在相邻凸集的交集内,形成不等式约束。对于带不等式约束的优化问题,常规方法通过引入额外变量逐步逼近约束。而我们希望直接高效地施加约束,为此提出了空间约束消除方法。

考虑约束 q ∈ P ⊂ R n q\in\mathcal{P}\subset\mathbb{R}^n qPRn,其中 P \mathcal{P} P为闭球域。其维数满足 n ≤ m n\leq m nm,因为 R m \mathbb{R}^m Rm中也存在低维约束。若 P \mathcal{P} P为球形区域 P B \mathcal{P}_B PB:
P B = { x ∈ R n ∣ ∥ x − o ∥ 2 ≤ r } \mathcal{P}_B=\{x\in\mathbb{R}^n|\|x-o\|_2\leq r\} PB={xRn∣∥xo2r}
其中 o o o为球心, r r r为半径。我们利用一个从 R n \mathbb{R}^n Rn P B \mathcal{P}_B PB的光滑满射,使得在 R n \mathbb{R}^n Rn上优化就隐式地满足了 P B \mathcal{P}_B PB约束。如图4所示,该映射由反球极投影(inverse stereographic projection)和正交投影(orthographic projection)复合而成。

首先利用反球极投影将 R n \mathbb{R}^n Rn映射到 S n \mathbb{S}^n Sn,其中 S n \mathbb{S}^n Sn R n + 1 \mathbb{R}^{n+1} Rn+1中的无北极的单位球面:
S n = { x ∈ R n + 1 ∣ ∥ x ∥ 2 = 1 , x n + 1 < 1 } \mathbb{S}^n=\{x\in\mathbb{R}^{n+1} | \|x\|_2=1,x_{n+1}<1\} Sn={xRn+1∣∥x2=1,xn+1<1}
反球极投影 f s f_s fs定义为:
f s ( x ) = ( 2 x T , x T x − 1 ) T x T x + 1 ∈ S n , ∀ x ∈ R n f_s(x)=\frac{(2x^T,x^Tx-1)^T}{x^Tx+1}\in\mathbb{S}^n,\forall x\in\mathbb{R}^n fs(x)=xTx+1(2xT,xTx1)TSn,xRn
注意 f s f_s fs R n \mathbb{R}^n Rn S n \mathbb{S}^n Sn的微分同胚。

然后将 S n \mathbb{S}^n Sn R n + 1 \mathbb{R}^{n+1} Rn+1正交投影回 R n \mathbb{R}^n Rn得到 B n \mathbb{B}^n Bn:
B n = { x ∈ R n ∣ ∥ x ∥ 2 ≤ 1 } \mathbb{B}^n=\{x\in\mathbb{R}^n|\|x\|_2\leq1\} Bn={xRn∣∥x21}
该映射为:
f o ( x ) = ( x 1 , … , x n ) T ∈ B n , ∀ x ∈ S n f_o(x)=(x_1,\ldots,x_n)^T\in\mathbb{B}^n, \forall x\in\mathbb{S}^n fo(x)=(x1,,xn)TBn,xSn
它是从 S n \mathbb{S}^n Sn B n \mathbb{B}^n Bn的光滑满射。 B n \mathbb{B}^n Bn中除球心外的每个点,在 S n \mathbb{S}^n Sn中都有两个对应点。将 f s , f o f_s,f_o fs,fo及一个线性变换复合,得到从 R n \mathbb{R}^n Rn P B \mathcal{P}_B PB的光滑满射:
f B ( x ) = o + 2 r x x T x + 1 ∈ P B , ∀ x ∈ R n f_B(x)=o+\frac{2rx}{x^Tx+1}\in\mathcal{P}_B, \forall x\in\mathbb{R}^n fB(x)=o+xTx+12rxPB,xRn

f B f_B fB引入了一个新坐标 ξ \xi ξ,在 R n \mathbb{R}^n Rn中优化 ξ \xi ξ总能满足 q q q P B \mathcal{P}_B PB约束。对第 i i i个中间点 q i q_i qi,记其新坐标为 ξ i \xi_i ξi。相应地,令 ξ \xi ξ表示 q q q的新坐标。优化 ξ \xi ξ需要传播 ∂ J / ∂ q \partial J/\partial q J/q的梯度。记 ∂ J / ∂ q i \partial J/\partial q_i J/qi的第 i i i项为 g i g_i gi,对 f B f_B fB求导得到 J J J关于 ξ i \xi_i ξi的梯度:
∂ J ∂ ξ i = 2 r i g i ξ i T ξ i + 1 − 4 r i ( ξ i T g i ) ξ i ( ξ i T ξ i + 1 ) 2 \frac{\partial J}{\partial\xi_i}=\frac{2r_ig_i}{\xi_i^T\xi_i+1}-\frac{4r_i(\xi_i^Tg_i)\xi_i}{(\xi_i^T\xi_i+1)^2} ξiJ=ξiTξi+12rigi(ξiTξi+1)24ri(ξiTgi)ξi

若优化需要从初始猜测 q q q开始,可用 f B f_B fB的局部逆计算对应的 ξ \xi ξ。对 1 ≤ i < M 1\leq i<M 1i<M,有:
ξ i = r i − r i 2 − ∥ q i − o i ∥ 2 2 ∥ q i − o i ∥ 2 2 ( q i − o i ) \xi_i=\frac{r_i-\sqrt{r_i^2-\|q_i-o_i\|_2^2}}{\|q_i-o_i\|_2^2}(q_i-o_i) ξi=qioi22riri2qioi22 (qioi)

类似地,我们分析 f B f_B fB P B \mathcal{P}_B PB内约束极小值的影响。尽管 f B f_B fB不具备微分同胚的一一对应性,但其分量都很规则。首先, f o f_o fo只取点的前 n n n个分量,该操作至少保持了 B n \mathbb{B}^n Bn S n \mathbb{S}^n Sn内极小值点处的一阶必要条件。其次, f s f_s fs S n \mathbb{S}^n Sn R n \mathbb{R}^n Rn的微分同胚,满足命题2。因此,我们同样可以确认 f B f_B fB不会引入额外的伪极小值点或消除已有的极小值点。如图5所示,2维球内的约束极小值被变换为无约束极小值。

4.3 多面体区域的空间约束消除

现在考虑消除多面体约束。设 P \mathcal{P} P为有界凸多面体 P H \mathcal{P}_H PH:
P H = { x ∈ R n ∣ A x ⪯ b } \mathcal{P}_H=\{x\in\mathbb{R}^n|Ax\preceq b\} PH={xRnAxb}
其中 Int ( P H ) ≠ ∅ \text{Int}(\mathcal{P}_H)\neq\emptyset Int(PH)=。常见优化算法将 P H \mathcal{P}_H PH的H表示(超平面表示)作为线性不等式约束。本文利用其几何性质来消除这些约束,使MINCO能自由变形。为此,我们改用 P H \mathcal{P}_H PH的V表示(顶点表示),其中 P H \mathcal{P}_H PH内任意点 q q q可表示为所有顶点的带权重的凸组合,即广义重心坐标(barycentric coordinate)。为获得顶点,我们对 P H \mathcal{P}_H PH的对偶多面体应用凸包算法,基于Seidel算法计算的内点。注意对我们的低维情形( n ≤ 4 n\leq 4 n4),该过程引入的计算开销可忽略。

消除多面体约束的过程如图6所示。记 P H \mathcal{P}_H PH n ^ + 1 \hat{n}+1 n^+1个顶点为 ( v 0 , … , v n ^ ) (v_0,\ldots,v_{\hat{n}}) (v0,,vn^),其中 v i ∈ R n , ∀ i v_i\in\mathbb{R}^n,\forall i viRn,i。点 q ∈ P H q\in\mathcal{P}_H qPH的重心坐标即为这些顶点对应的权重。为得到更紧致的形式,定义 v ^ i = v i − v 0 \hat{v}_i=v_i-v_0 v^i=viv0 V ^ = ( v ^ 1 , … , v ^ n ^ ) \hat{V}=(\hat{v}_1,\ldots,\hat{v}_{\hat{n}}) V^=(v^1,,v^n^),则 q q q可表示为:
q = v 0 + V ^ w q=v_0+\hat{V}w q=v0+V^w
其中 w = ( w 1 , … , w n ^ ) T ∈ R n ^ w=(w_1,\ldots,w_{\hat{n}})^T\in\mathbb{R}^{\hat{n}} w=(w1,,wn^)TRn^为重心坐标的最后 n ^ \hat{n} n^项。凸组合中坐标的集合可写为:
P H w = { w ∈ R n ^ ∣ w ⪰ 0 , ∥ w ∥ 1 ≤ 1 } \mathcal{P}_H^w=\{w\in\mathbb{R}^{\hat{n}}|w\succeq0,\|w\|_1\leq1\} PHw={wRn^w0,w11}

多面体理论的主定理确认了 P H w \mathcal{P}_H^w PHw P H \mathcal{P}_H PH在变换(57)下的等价性。通过为 q q q添加辅助变量并做线性映射,多面体被精确转化为 R n ^ + 1 \mathbb{R}^{\hat{n}+1} Rn^+1中的标准单纯形。这个过程除了增加了决策变量的维数外,没有给优化问题引入额外的非线性。因此我们后面只考虑 q q q对应的 w w w作为决策变量。

单纯形约束(58)可通过非线性变换消除。首先利用逐元素平方映射 [ ⋅ ] 2 : R n ^ ↦ R n ^ [\cdot]^2:\mathbb{R}^{\hat{n}}\mapsto\mathbb{R}^{\hat{n}} []2:Rn^Rn^消除非负约束:
w = [ x ] 2 w=[x]^2 w=[x]2
这样, w w w上的约束 P H w \mathcal{P}_H^w PHw被转化为 x x x上的闭单位球约束 B n ^ \mathbb{B}^{\hat{n}} Bn^:
B n ^ = { x ∈ R n ^ ∣ ∥ x ∥ 2 ≤ 1 } \mathbb{B}^{\hat{n}}=\{x\in\mathbb{R}^{\hat{n}}|\|x\|_2\leq1\} Bn^={xRn^∣∥x21}
因此,我们可以再次利用映射 f B f_B fB。复合(57)、 [ ⋅ ] 2 [\cdot]^2 []2 f B f_B fB可得从 R n ^ \mathbb{R}^{\hat{n}} Rn^ P H \mathcal{P}_H PH的光滑满射 f H f_H fH:
f H ( x ) = v 0 + 4 V ^ [ x ] 2 ( x T x + 1 ) 2 ∈ P H , ∀ x ∈ R n ^ f_H(x)=v_0+\frac{4\hat{V}[x]^2}{(x^Tx+1)^2}\in\mathcal{P}_H,\forall x\in\mathbb{R}^{\hat{n}} fH(x)=v0+(xTx+1)24V^[x]2PH,xRn^

f H f_H fH引入了一个新坐标 ξ \xi ξ,任意 ξ ∈ R n ^ \xi\in\mathbb{R}^{\hat{n}} ξRn^都能确保 q ∈ P H q\in\mathcal{P}_H qPH P H \mathcal{P}_H PH的边界也是可达的。类似地,令 ξ \xi ξ表示 q q q的新坐标。优化 ξ \xi ξ需要梯度传播。记 ∂ J / ∂ q \partial J/\partial q J/q中的第 i i i项梯度为 g i g_i gi,则 f H f_H fH层的梯度为:
∂ J ∂ ξ i = 8 ξ i ∘ V ^ T g i ( ξ i T ξ i + 1 ) 2 − 16 g i T V ^ [ ξ i ] 2 ( ξ i T ξ i + 1 ) 3 ξ i \frac{\partial J}{\partial\xi_i}=\frac{8\xi_i\circ\hat{V}^Tg_i}{(\xi_i^T\xi_i+1)^2}-\frac{16g_i^T\hat{V}[\xi_i]^2}{(\xi_i^T\xi_i+1)^3}\xi_i ξiJ=(ξiTξi+1)28ξiV^Tgi(ξiTξi+1)316giTV^[ξi]2ξi

若指定了初始猜测 q q q,对应的 ξ \xi ξ可通过 f H f_H fH的局部逆计算。 q i q_i qi的重心坐标可用Warren等人的解析方法求得。之后再利用 [ ⋅ ] 2 [\cdot]^2 []2 f B f_B fB的解析局部逆即得所需的 ξ i \xi_i ξi。另一种灵活的方法是直接最小化 f H ( ξ ) f_H(\xi) fH(ξ)与给定 q i q_i qi间的平方距离。这两种方法的计算开销都可忽略,但结果很有前景。

f H f_H fH中的 [ ⋅ ] 2 [\cdot]^2 []2给优化引入了额外的非线性。幸运的是,通过 [ ⋅ ] 2 [\cdot]^2 []2做变量替换是不等式转等式的一个特例。具体来说,不等式约束为 − w ⪯ 0 -w\preceq0 w0。引入辅助变量 x x x,等价的等式约束为 − w + [ x ] 2 = 0 -w+[x]^2=0 w+[x]2=0,即 w = [ x ] 2 w=[x]^2 w=[x]2。Bertsekas在文献[55]的4.3节证明了这类约束转换对带不等式约束的优化问题的一阶/二阶必要条件和二阶充分条件是保持的。我们确认 f H f_H fH中的额外非线性在实践中不会排除期望的极小值或产生非期望的极小值。

q q q的直接约束,不管是球形 P B \mathcal{P}_B PB还是多面体 P H \mathcal{P}_H PH,都通过光滑满射 q ( ξ ) q(\xi) q(ξ)消除了。此后我们就可以在 ξ \xi ξ上无约束地优化 J ( q ( ξ ) , T ( τ ) ) J(q(\xi),\mathbf{T}(\tau)) J(q(ξ),T(τ))

4.4 时间积分罚函数

消除直接约束后,MINCO轨迹可自由变形以满足连续时间约束 G G G。然而,在整条轨迹上施加 G G G涉及无穷多不等式,无法用约束优化求解。进一步还需要时间离散化,通常会产生大量决策变量。为保持轨迹参数化的稀疏性,我们将约束评估的分辨率与决策变量数解耦。受约束转录(constraint transcription)的启发,提出用约束违反度的积分将 G G G转化为有限个约束。

对轨迹 p : [ 0 , T ] ↦ R m p:[0,T]\mapsto\mathbb{R}^m p:[0,T]Rm,定义
I G k [ p ] = ∫ 0 T max ⁡ [ G ( p ( t ) , … , p ( s ) ( t ) ) , 0 ] k d t I_G^k[p]=\int_0^T\max[G(p(t),\ldots,p^{(s)}(t)),0]^kdt IGk[p]=0Tmax[G(p(t),,p(s)(t)),0]kdt
其中 k ∈ R > 0 k\in\mathbb{R}_{>0} kR>0,max [ ⋅ , 0 ] k [\cdot,0]^k [,0]k为逐元素取正部再幂的复合函数。对应的泛函型约束等价于等式约束 I G k [ p ] = 0 I_G^k[p]=0 IGk[p]=0。实际上, I G k [ p ] I_G^k[p] IGk[p]是轨迹参数的函数,我们将其作为罚项。当 k = 1 k=1 k=1时为非光滑的精确罚函数,当 k > 1 k>1 k>1时为可微的严好的,我继续讲解并给出代码示例。

从上文可知, I G k [ p ] I_G^k[p] IGk[p] k = 1 k=1 k=1时为非光滑的精确罚函数,在 k > 1 k>1 k>1时为可微的严格凸罚函数。因此,我们可以采用 I G 3 [ p ] I_G^3[p] IG3[p] I G 1 [ p ] I_G^1[p] IG1[p]的光滑逼近。为简洁起见,后面均使用 I G 3 [ p ] I_G^3[p] IG3[p],除非特别说明。我们选择罚函数法有两个原因:一是式(68)中的积分只能数值计算,约束逼近不可避免;二是罚函数法对初值的可行性没要求,而构造可行初值本就不平凡。

定义 p ( t ) p(t) p(t)的时间积分罚函数为:
I G [ p ] = χ T I G k [ p ] I_G[p]=\chi^TI_G^k[p] IG[p]=χTIGk[p]
其中 χ ∈ R ≥ 0 n g \chi\in\mathbb{R}_{\geq0}^{n_g} χR0ng为权重向量,通常取较大常数。若无违反,则 I G [ p ] I_G[p] IG[p]保持为零;否则若 p ( t ) p(t) p(t)的任何部分违反 G G G中任意约束, I G [ p ] I_G[p] IG[p]就会迅速增大。将 I G [ p ] I_G[p] IG[p]并入目标泛函,即可在可接受的公差内满足连续时间约束。

实际中 I G [ p ] I_G[p] IG[p]只能用求积公式计算。为此,先定义采样函数 G τ : R 2 s × m × R > 0 × [ 0 , 1 ] ↦ R n g G_\tau:\mathbb{R}^{2s\times m}\times\mathbb{R}_{>0}\times[0,1]\mapsto\mathbb{R}^{n_g} Gτ:R2s×m×R>0×[0,1]Rng为:
G τ ( c i , T i , τ ) = G ( c i T β ( T i ⋅ τ ) , … , c i T β ( s ) ( T i ⋅ τ ) ) G_\tau(c_i,T_i,\tau)=G(c_i^T\beta(T_i\cdot\tau),\ldots,c_i^T\beta^{(s)}(T_i\cdot\tau)) Gτ(ci,Ti,τ)=G(ciTβ(Tiτ),,ciTβ(s)(Tiτ))
其中 τ ∈ [ 0 , 1 ] \tau\in[0,1] τ[0,1]为归一化时间戳。则 I G [ p ] I_G[p] IG[p]的求积公式 I : R 2 M s × m × R > 0 M ↦ R ≥ 0 I:\mathbb{R}^{2Ms\times m}\times\mathbb{R}_{>0}^M\mapsto\mathbb{R}_{\geq0} I:R2Ms×m×R>0MR0为罚项采样值的加权和:
I ( c , T ) = ∑ i = 1 M T i ∑ j = 0 κ i ω ˉ j χ T max ⁡ [ G τ ( c i , T i , j κ i ) , 0 ] k I(c,\mathbf{T})=\sum_{i=1}^MT_i\sum_{j=0}^{\kappa_i}\bar{\omega}_j\chi^T\max[G_\tau(c_i,T_i,\frac{j}{\kappa_i}),0]^k I(c,T)=i=1MTij=0κiωˉjχTmax[Gτ(ci,Ti,κij),0]k
其中 κ i \kappa_i κi控制分辨率。我们选用了梯形公式 ( ω ˉ 0 , ω ˉ 1 , … , ω ˉ κ i − 1 , ω ˉ κ i ) = ( 1 2 , 1 , … , 1 , 1 2 ) (\bar{\omega}_0,\bar{\omega}_1,\ldots,\bar{\omega}_{\kappa_i-1},\bar{\omega}_{\kappa_i})=(\frac{1}{2},1,\ldots,1,\frac{1}{2}) (ωˉ0,ωˉ1,,ωˉκi1,ωˉκi)=(21,1,,1,21),因为它对 C 2 C^2 C2的病态被积函数的数值积分表现可靠。直观上, I ( c , T ) I(c,\mathbf{T}) I(c,T) I G [ p ] I_G[p] IG[p]的可微逼近,其精度可通过 κ i \kappa_i κi调节。大多数时间戳处的函数值和梯度可并行计算再直接组合。

下面给出计算积分罚函数 I ( c , T ) I(c,\mathbf{T}) I(c,T)的C++代码示例:

// MINCO trajectory: defined by (45)-(47)
struct MINCO {
    int s, m;              // system order and dimension
    vector<MatrixXd> c;    // coefficient matrices for M pieces 
    VectorXd T;            // time durations for M pieces
};

// Evaluates the integral penalty functional I(c,T) in (75)
double evalPenalty(const MINCO& traj, 
                   const VectorXd& chi, 
                   function<VectorXd(Vector3d)> G,
                   int k = 3) 
{
    int M = traj.T.size();                      
    vector<Vector3d> dcp(M), dcv(M), dca(M), dcj(M);  // p,v,a,j
    
    double I = 0.0;
    for (int i = 0; i < M; i++) {
        double Ii = 0.0;
        for (int j = 0; j <= KAPPA; j++) {
            const double tau = j * 1.0 / KAPPA;
            betaVector(tau, traj.T[i], traj.s - 1, dcp[i]); 
            betaVector(tau, traj.T[i], traj.s - 2, dcv[i]);
            betaVector(tau, traj.T[i], traj.s - 3, dca[i]);
            betaVector(tau, traj.T[i], traj.s - 4, dcj[i]);
            
            Vector3d p = dcp[i].transpose() * traj.c[i];
            Vector3d v = dcv[i].transpose() * traj.c[i];
            Vector3d a = dca[i].transpose() * traj.c[i]; 
            Vector3d j = dcj[i].transpose() * traj.c[i];
            
            VectorXd Gtau = G(p, v, a, j);
            
            double w = (j == 0 || j == KAPPA) ? 0.5 : 1.0;
            Ii += w * chi.dot(Gtau.cwiseMax(0.0).array().pow(k));
        }
        I += traj.T[i] * Ii;
    }
    return I;
}

其中betaVector根据计算基函数在 τ \tau τ处的值。可见,惩罚项的计算可方便地并行化。此外,取 k = 1 k=1 k=1时可构造非光滑精确罚函数,若 G G G过于复杂也可考虑自动微分。

4.5 无约束非线性规划求解轨迹优化

由于式中的几何约束 F \mathcal{F} F和连续时间约束 G G G,最优的轨迹参数化通常难以知晓。有别于传统方法用大量变量逼近解,本文提出通过稀疏的无约束非线性规划松弛原问题,并利用MINCO类的空间-时间变形。定义如下松弛:
min ⁡ ξ , τ J ( q ( ξ ) , T ( τ ) ) + I ( c ( q ( ξ ) , T ( τ ) ) , T ( τ ) ) \min_{\xi,\tau} J(q(\xi),\mathbf{T}(\tau))+I(c(q(\xi),\mathbf{T}(\tau)),\mathbf{T}(\tau)) ξ,τminJ(q(ξ),T(τ))+I(c(q(ξ),T(τ)),T(τ))
其中 J J J为MINCO类的时间正则化控制量; I I I为罚函数的求积公式。注意任何特定任务的需求,无论是目标还是约束,都可并入而不影响其结构。

为生成微分平坦多旋翼的轨迹,首先将其平坦输出参数化为MINCO类。在固定数量的片段分配到每个 P i \mathcal{P}_i Pi后,变量替换被施加以自动满足全部直接约束,如正则项 ρ s \rho_s ρs对应的 T ∈ R > 0 \mathbf{T}\in\mathbb{R}_{>0} TR>0 ρ f \rho_f ρf对应的 ∥ T ∥ 1 < T Σ \|\mathbf{T}\|_1<T_\Sigma T1<TΣ以及中间点约束 q i ∈ P d i / K e ∩ P d ( i + 1 ) / K e , ∀ i q_i\in\mathcal{P}_{di/Ke}\cap\mathcal{P}_{d(i+1)/Ke}, \forall i qiPdi/KePd(i+1)/Ke,i。同时,将给定的状态-输入约束 G D G_D GD通过平坦映射 Ψ x , Ψ u \Psi_x,\Psi_u Ψx,Ψu转化为对平坦输出的等价约束 G G G。至此,我们得到了(76)的目标函数。很明显,除 Ψ x \Psi_x Ψx Ψ u \Psi_u Ψu外,其他所有层的梯度传播都已推导。对 Ψ x \Psi_x Ψx Ψ u \Psi_u Ψu,要么采用自动微分,要么参照反向模式自动微分的思路解析推导。Baur-Strassen定理保证其计算效率与平坦映射本身一致。微分只需对给定的平坦动力学做一次性推导。有了梯度信息,就可用L-BFGS算法求解松弛问题。

下面是用C++求解无约束松弛问题的代码框架:

// Unconstrained relaxation of problem (11)
// Objective function: J(q(xi),T(tau)) + I(c(q(xi),T(tau)),T(tau))
struct Objective {
    MINCO traj;                        // trajectory representation
    ConstrG;                          // equivalent constraints
    Penalty I;                         // integral penalty functional
    Reg rho;                           // time regularization term

    // L-BFGS callback
    double operator()(const VectorXd& x, VectorXd& grad) 
    {
        // Unpack optimization variables xi and tau from x
        VectorXd xi  = x.head(DIM_XI);   
        VectorXd tau = x.tail(DIM_TAU);

        // Get intermediate points q and time allocation T   
        VectorXd q = inverseSimplexMap(xi);    // Sec. 4.3, Eq.(85) 
        VectorXd T = diffeoTimeMap(tau);       // Sec. 4.1, Eq.(37)

        // Calculate trajectory parameters c(q,T)
        SparseMatrix<double> M = getM(traj.s, T);   // Eq.(14)
        VectorXd b = getB(traj.s, q, T);             // Eq.(15)
        SparseLU<SparseMatrix<double>> solver;  
        solver.compute(M);
        MatrixXd c = solver.solve(b); 
        
        // Compute objective and gradient  
        double J  = ctrlEffort(c, T) + rho(T.sum());    // Eq.(36)
        double I  = integralPenalty(G, c, T);            // Eq.(75) 

        MatrixXd dJdc, dJdT, dIdc, dIdT;
        ctrlEffortGrad(c, T, dJdc, dJdT); 
        integralPenaltyGrad(G, c, T, dIdc, dIdT);

        MatrixXd dc_dq, dc_dT;
        coeffSensitivity(q, T, dc_dq, dc_dT);    // Sec. 3.3

        VectorXd dq_dxi = simplexMapJacobian(xi);         // Eq.(86)
        MatrixXd dT_dtau = diffeoTimeMapJacobian(tau);    // Eq.(38)

        VectorXd dJdq = (dJdc * dc_dq).rowwise().sum();
        VectorXd dJdT = dJdT + (dJdc * dc_dT).rowwise().sum();  
        VectorXd dIdq = (dIdc * dc_dq).rowwise().sum();
        VectorXd dIdT = dIdT + (dIdc * dc_dT).rowwise().sum();

        grad.head(DIM_XI) = dq_dxi.cwiseProduct(dJdq + dIdq);
        grad.tail(DIM_TAU) = dT_dtau.transpose() * (dJdT + dIdT);

        return J + I; 
    }
};

// Trajectory generation by solving problem (76)
MatrixXd trajOpt(const MINCO& traj, const ConstrG& G, 
                 const Penalty& I, const Reg& rho)  
{
    // Initialize optimization variables
    VectorXd x(DIM_XI + DIM_TAU);
    x.head(DIM_XI) = initSimplexParam(traj.q);  
    x.tail(DIM_TAU) = initDiffeoTimeParam(traj.T);

    // Setup NLP solver  
    Objective obj({traj, G, I, rho});

    LBFGSParam<double> param;
    param.epsilon = 1e-6;
    param.max_iterations = 500;

    LBFGSSolver<double> solver(param);

    // Solve the problem
    double fx;
    int niter = solver.minimize(obj, x, fx);

    // Recover optimal trajectory 
    traj.q = inverseSimplexMap(x.head(DIM_XI));
    traj.T = diffeoTimeMap(x.tail(DIM_TAU));

    SparseMatrix<double> M = getM(traj.s, traj.T);
    VectorXd b = getB(traj.s, traj.q, traj.T);         
    SparseLU<SparseMatrix<double>> slu;
    slu.compute(M);
    MatrixXd c_star = slu.solve(b);
    
    return c_star;
}

其中展示了目标函数Objective的实现和轨迹优化入口函数trajOpt。可见,核心是目标函数和梯度的计算,涉及第3.3节和第4.1-4.4节的相关内容。coeffSensitivity对应式(64)(68)中系数对中间点和时间分配的敏感性分析。几何参数和时间参数分别采用多面体单纯形映射和微分同胚来表示。

5. 应用

本节通过大量仿真实验和实际飞行,展示了所提优化框架在无约束控制量最小化、安全飞行走廊内的轨迹生成以及SE(3)运动规划等方面的性能。实验结果证明了该方法在求解效率、轨迹质量、鲁棒性和通用性上的优越表现。限于篇幅,本文未展示部分应用的技术细节,感兴趣的读者可参考原文。

6. 结论

本文提出了一个灵活高效的多旋翼轨迹规划优化框架,其核心为基于最优性条件的MINCO(Minimum Control)轨迹、基于光滑映射的约束消除方案、基于约束转录的惩罚泛函方法以及平坦映射的反向微分。所有这些技术的高效性和通用性源于其低计算复杂度和少的先验假设。大量仿真实验表明,该框架的求解速度比现有方法高出数个数量级,同时具有顶尖的解的质量。多样化的应用场景展示了该框架

具体的应用案例请看我的下一篇blog

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Based on the given specifications, here is a sample implementation in Java using JavaFX library: ```java import javafx.animation.AnimationTimer; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; import java.util.Random; public class BalloonGame extends Application { private static final int WINDOW_WIDTH = 500; private static final int WINDOW_HEIGHT = 500; private static final Color BACKGROUND_COLOR = Color.BLACK; private static final int MIN_BALLOON_RADIUS = 20; private static final int MAX_BALLOON_RADIUS = 40; private static final double BALLOON_APPEAR_TIME = 2.0; private static final double INITIAL_SPEED = 1.0; private static final int MAX_Y_VELOCITY = 100; private static final Random RANDOM = new Random(); private Pane gamePane; private double lastBalloonTime = 0.0; private double speed = INITIAL_SPEED; @Override public void start(Stage primaryStage) throws Exception { gamePane = new Pane(); gamePane.setPrefSize(WINDOW_WIDTH, WINDOW_HEIGHT); gamePane.setStyle("-fx-background-color: black;"); AnimationTimer gameLoop = new AnimationTimer() { @Override public void handle(long now) { update(now); } }; gameLoop.start(); Scene scene = new Scene(gamePane, WINDOW_WIDTH, WINDOW_HEIGHT); primaryStage.setScene(scene); primaryStage.show(); } private void update(long now) { double elapsedTime = (now - lastBalloonTime) / 1_000_000_000.0; if (elapsedTime >= BALLOON_APPEAR_TIME / speed) { createBalloon(); lastBalloonTime = now; } for (Circle balloon : gamePane.getChildren()) { double yVelocity = MAX_Y_VELOCITY + speed * 50; double y = balloon.getCenterY() + yVelocity * elapsedTime; balloon.setCenterY(y); if (y - balloon.getRadius() > WINDOW_HEIGHT) { gamePane.getChildren().remove(balloon); } } speed = (now / 1_000_000_000.0) / 10.0 + INITIAL_SPEED; } private void createBalloon() { int radius = RANDOM.nextInt(MAX_BALLOON_RADIUS - MIN_BALLOON_RADIUS + 1) + MIN_BALLOON_RADIUS; double x = RANDOM.nextInt(WINDOW_WIDTH - radius * 2) + radius; double y = -radius; Color color = RANDOM.nextBoolean() ? Color.RED : Color.GREEN; Circle balloon = new Circle(x, y, radius, color); gamePane.getChildren().add(balloon); } public static void main(String[] args) { launch(args); } } ``` This implementation uses JavaFX to create the game window and handle the animation loop. It creates balloons as Circle shapes with random radius, position, and color. The balloons move down the screen with a constant y velocity that increases with the game speed. The game speed is determined by the time since the game started, and affects the time between balloons appearing and the y velocity of the balloons.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值