MPC 学习笔记(第二期)
这次主要是针对 MPC 结合固定翼无人机控制的方法进行学习,主要是分析 MPC 要如何与固定翼无人机的控制模型相结合,学习的对象是
Nonlinear MPC for fixed-wing UAV trajectory tracking: Implementation and flight experiments
是使用 NMPC 方法,进行固定翼无人机轨迹跟踪控制的一篇论文。
论文总体内容总结
这篇论文的主旨是:
在已有低层姿态稳定与空速与高度控制器的基础上,构造一个用于固定
翼 UAV 横侧向路径跟踪的高层非线性模型预测控制器(NMPC),并将低层滚转闭环动态通过系统辨识纳入预测模型,最终完成仿真和实飞验证。
论文摘要部分解析
论文先从无人机应用场景切入,包括三维建模、配送、灾害救援、农作物监测和基础设施巡检。然后强调,相比旋翼机,固定翼在续航和速度方面更适合 mapping/sensing;而小型、手抛式固定翼又有部署简单、系统复杂度低的优势。最后落到一个问题:高级控制方法很多仍停留在仿真阶段,需要真实飞行验证。
论文随后开始缩小问题范围,从“固定翼控制”缩小到“基于优化的 trajectory tracking”,再进一步锁定到 NMPC。论文随后回顾了几类已有工作:
#mermaid-svg-VNKK31R6XRKJcVop{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VNKK31R6XRKJcVop .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VNKK31R6XRKJcVop .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VNKK31R6XRKJcVop .error-icon{fill:#552222;}#mermaid-svg-VNKK31R6XRKJcVop .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VNKK31R6XRKJcVop .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VNKK31R6XRKJcVop .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VNKK31R6XRKJcVop .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VNKK31R6XRKJcVop .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VNKK31R6XRKJcVop .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VNKK31R6XRKJcVop .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VNKK31R6XRKJcVop .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VNKK31R6XRKJcVop .marker.cross{stroke:#333333;}#mermaid-svg-VNKK31R6XRKJcVop svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VNKK31R6XRKJcVop p{margin:0;}#mermaid-svg-VNKK31R6XRKJcVop .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-VNKK31R6XRKJcVop .cluster-label text{fill:#333;}#mermaid-svg-VNKK31R6XRKJcVop .cluster-label span{color:#333;}#mermaid-svg-VNKK31R6XRKJcVop .cluster-label span p{background-color:transparent;}#mermaid-svg-VNKK31R6XRKJcVop .label text,#mermaid-svg-VNKK31R6XRKJcVop span{fill:#333;color:#333;}#mermaid-svg-VNKK31R6XRKJcVop .node rect,#mermaid-svg-VNKK31R6XRKJcVop .node circle,#mermaid-svg-VNKK31R6XRKJcVop .node ellipse,#mermaid-svg-VNKK31R6XRKJcVop .node polygon,#mermaid-svg-VNKK31R6XRKJcVop .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VNKK31R6XRKJcVop .rough-node .label text,#mermaid-svg-VNKK31R6XRKJcVop .node .label text,#mermaid-svg-VNKK31R6XRKJcVop .image-shape .label,#mermaid-svg-VNKK31R6XRKJcVop .icon-shape .label{text-anchor:middle;}#mermaid-svg-VNKK31R6XRKJcVop .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-VNKK31R6XRKJcVop .rough-node .label,#mermaid-svg-VNKK31R6XRKJcVop .node .label,#mermaid-svg-VNKK31R6XRKJcVop .image-shape .label,#mermaid-svg-VNKK31R6XRKJcVop .icon-shape .label{text-align:center;}#mermaid-svg-VNKK31R6XRKJcVop .node.clickable{cursor:pointer;}#mermaid-svg-VNKK31R6XRKJcVop .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-VNKK31R6XRKJcVop .arrowheadPath{fill:#333333;}#mermaid-svg-VNKK31R6XRKJcVop .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VNKK31R6XRKJcVop .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VNKK31R6XRKJcVop .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VNKK31R6XRKJcVop .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VNKK31R6XRKJcVop .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VNKK31R6XRKJcVop .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-VNKK31R6XRKJcVop .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VNKK31R6XRKJcVop .cluster text{fill:#333;}#mermaid-svg-VNKK31R6XRKJcVop .cluster span{color:#333;}#mermaid-svg-VNKK31R6XRKJcVop div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VNKK31R6XRKJcVop .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-VNKK31R6XRKJcVop rect.text{fill:none;stroke-width:0;}#mermaid-svg-VNKK31R6XRKJcVop .icon-shape,#mermaid-svg-VNKK31R6XRKJcVop .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VNKK31R6XRKJcVop .icon-shape p,#mermaid-svg-VNKK31R6XRKJcVop .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-VNKK31R6XRKJcVop .icon-shape .label rect,#mermaid-svg-VNKK31R6XRKJcVop .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VNKK31R6XRKJcVop .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-VNKK31R6XRKJcVop .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-VNKK31R6XRKJcVop :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-VNKK31R6XRKJcVop .stage1>*{fill:#E3F0FF!important;stroke:#4B78B8!important;stroke-width:2px!important;color:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage1 span{fill:#E3F0FF!important;stroke:#4B78B8!important;stroke-width:2px!important;color:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage1 tspan{fill:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage2>*{fill:#DFF3EC!important;stroke:#458B78!important;stroke-width:2px!important;color:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage2 span{fill:#DFF3EC!important;stroke:#458B78!important;stroke-width:2px!important;color:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage2 tspan{fill:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage3>*{fill:#FFF1DA!important;stroke:#D28B31!important;stroke-width:2px!important;color:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage3 span{fill:#FFF1DA!important;stroke:#D28B31!important;stroke-width:2px!important;color:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage3 tspan{fill:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage4>*{fill:#E7F4DF!important;stroke:#659E55!important;stroke-width:2px!important;color:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage4 span{fill:#E7F4DF!important;stroke:#659E55!important;stroke-width:2px!important;color:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage4 tspan{fill:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage5>*{fill:#F7E0E0!important;stroke:#B45C5C!important;stroke-width:2px!important;color:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage5 span{fill:#F7E0E0!important;stroke:#B45C5C!important;stroke-width:2px!important;color:#111!important;}#mermaid-svg-VNKK31R6XRKJcVop .stage5 tspan{fill:#111!important;}
二维路径跟踪
多段路径跟踪&避障
自适应预测面
风力感知路径跟随
三维MPC
文章认为,NMPC 虽然很灵活,但其非凸优化问题计算量大,因此早期很难真正在线部署。随后引用 Quirynen 等人的快速积分和自动代码生成方法,以及 ACADO Toolkit,说明到当时为止,实时 NMPC 已经开始变得可行。
作者的想法是,以前的数学工具不支持 NMPC 的实时计算,而且以前的建模也会导致 MPC 的计算量极大,而现在有了
fast integration + code generation + ACADO
\\text{fast integration + code generation + ACADO}
fast integration + code generation + ACADO
就可以把算法真正放到实物的固定翼无人机上了。此外,作者指出,已经有很多不同的 NMPC 方法了,但是他们只建模高层控制量,然后期望底层控制量会完美跟踪高层的控制指令,也就是说,让实际倾角 μ\\muμ 等于期望倾角μr\\mu_rμr
μ=μr.
\\mu=\\mu_r.
μ=μr.
但实际的飞机不是这样的,期望倾角要经过低层姿态控制器和 飞机本体 才能影响实际倾角 μ\\muμ。如果把低层闭环动态也加入 NMPC 的预测模型,那么预测就会更加真实。这就是这一篇论文的核心创新点:
高层运动学+已辨识的底层闭环动态.
高层运动学 + 已辨识的底层闭环动态.
高层运动学+已辨识的底层闭环动态.
那么,既然要把 底层动态 放到 NMPC 中,为什么不直接用传统飞机系统辨识呢?
这是因为传统的 开环参数辨识 太麻烦了,就比如下面的:
通过 副翼偏角 δa\\delta_aδa 辨识 滚转角速度 ppp,或者 副翼偏角 辨识 滚转角
ϕ\\phiϕ
δa→ϕ,δa→p.
\\delta_a \\rightarrow \\phi, \\quad \\delta_a \\rightarrow p.
δa→ϕ,δa→p.
这样的气动辨识通常需要大量飞行试验、专门设施或者复杂激励,在小型 UAV 上并不方便。因此作者转向 闭环系统辨识 这类方法。
也就是研究期望滚转直接到实际滚转这个黑盒或者或灰盒的系统中的参数辨识问题
ϕr→ϕ
\\phi_r \\rightarrow \\phi
ϕr→ϕ
也就是说研究:
高层给低层控制器一个滚转参考后,实际飞机如何响应?
因此,本文的工作可以拆成 3 个部分:
论文主要创新点详解
本博客在这一部分,会对原文中的内容进行讲解和推导
固定翼横侧向控制若从执行器开始建模,典型因果链为:
副翼偏角 -> 滚转角速度 -> 滚转角 -> 地面航迹角 -> 北向和东向位置
δa⟶p⟶ϕ⟶χ˙⟶(n,e),
\\delta_a\\longrightarrow p\\longrightarrow\\phi\\longrightarrow\\dot{\\chi}\\longrightarrow(n,e),
δa⟶p⟶ϕ⟶χ˙⟶(n,e),
其中 δa\\delta_aδa 为副翼偏角,ppp 为滚转角速度,ϕ\\phiϕ 为滚转角,χ\\chiχ 为地面航迹角,(n,e)(n,e)(n,e) 为北向和东向位置。
若高层 NMPC 直接输出 δa\\delta_aδa,预测模型通常需要显式包含
原论文采用已有的 Pixhawk 低层姿态闭环,把高层控制量选择为滚转/倾斜角参考:
u=μr.
\\boxed{u=\\mu_r}.
u=μr.
于是实际控制结构为
期望路径→NMPC→μr→低层姿态环→飞机本体.
\\text{期望路径}\\rightarrow\\boxed{\\text{NMPC}}\\rightarrow\\mu_r
\\rightarrow\\boxed{\\text{低层姿态环}}\\rightarrow\\text{飞机本体}.
期望路径→NMPC→μr→低层姿态环→飞机本体.
即预测模型描述的是“高层命令经过底层闭环之后的飞机响应”,而不是完全开环的气动模型。
论文使用 Techpod 小型固定翼 UAV:翼展约2.6m2.6m2.6m、质量约2.65kg2.65kg2.65kg、标称空速约14m/s14m/s14m/s。Pixhawk 执行 EKF、姿态稳定和 TECS;计算量更大的 NMPC 在 ODROID-U3 上运行,并通过 ROS 与飞控通信[1]。

Techpod 小型固定翼论文原图
低层姿态控制可抽象为
μr→Catt→δa→aircraft→μ.
\\mu_r \\rightarrow C_{\\mathrm{att}} \\rightarrow \\delta_a
\\rightarrow \\text{aircraft} \\rightarrow \\mu.
μr→Catt→δa→aircraft→μ.
NMPC 不需要知道上述每一层的全部内部细节,只需要建立
μr→μ
\\boxed{\\mu_r\\rightarrow\\mu}
μr→μ
的足够准确的低阶闭环模型。
二维固定翼运动学模型
(1) 坐标与变量
定义惯性平面坐标
p=[ne],
\\mathbf{p}=\\begin{bmatrix}n\\\\e\\end{bmatrix},
p=[ne],
其中 nnn 表示 North,eee 表示 East。
定义:
- VVV:空速;
- ξ\\xiξ:相对于空气质量的航向/速度方向;
- χ\\chiχ:相对于地面的航迹角(course angle);
- μ\\muμ:bank angle;
- w=[wnwe]T\\mathbf{w}=\\begin{bmatrix}w_n & w_e\\end{bmatrix}^{T}w=[wnwe]T:水平风速。
论文采用的二维运动学模型为
n˙=Vcosξ+wne˙=Vsinξ+weξ˙=gtanμV
\\begin{aligned}
\\dot n &= V\\cos\\xi + w_n \\\\
\\dot e &= V\\sin\\xi + w_e \\\\
\\dot \\xi &= \\frac{g\\tan\\mu}{V}
\\end{aligned}
n˙e˙ξ˙=Vcosξ+wn=Vsinξ+we=Vgtanμ
(2) 协调转弯公式的完整推导
原文中式(3)来自定高、协调转弯假设。
在稳定水平协调转弯中,升力 LLL 随飞机一起倾斜 μ\\muμ。垂向力平衡:
Lcosμ=mg.
L\\cos\\mu=mg.
Lcosμ=mg.
水平向心力:
Lsinμ=mV2Ra,
L\\sin\\mu=\\frac{mV^2}{R_a},
Lsinμ=RamV2,
其中 RaR_aRa 是相对于空气质量运动的转弯半径。两式相除:
tanμ=V2gRa.
\\tan\\mu=\\frac{V^2}{gR_a}.
tanμ=gRaV2.
另一方面,
ξ˙=VRa.
\\dot\\xi=\\frac{V}{R_a}.
ξ˙=RaV.
代入 Ra=V/ξ˙R_a=V/\\dot\\xiRa=V/ξ˙:
tanμ=Vξ˙g,
\\tan\\mu=\\frac{V\\dot\\xi}{g},
tanμ=gVξ˙,
最终得到
ξ˙=gtanμV.
\\boxed{\\dot\\xi=\\frac{g\\tan\\mu}{V}}.
ξ˙=Vgtanμ.
因此最基本的横向控制因果链为
μ→ξ˙→ξ→(n,e).
\\boxed{\\mu\\rightarrow\\dot\\xi\\rightarrow\\xi\\rightarrow(n,e)}.
μ→ξ˙→ξ→(n,e).
(3)最小空气转弯半径
由协调转弯关系:
Ra=V2gtan∣μ∣.
\\boxed{R_a=\\frac{V^2}{g\\tan|\\mu|}}.
Ra=gtan∣μ∣V2.
若
∣μ∣≤μmax,
|\\mu|\\le\\mu_{\\max},
∣μ∣≤μmax,
则
Ra,min=V2gtanμmax.
\\boxed{R_{a,\\min}=\\frac{V^2}{g\\tan\\mu_{\\max}}}.
Ra,min=gtanμmaxV2.
这解释了为什么固定翼路径跟踪必须考虑可行曲率:给定速度越大、最大 bank 越小,可跟踪圆弧的最小半径越大。
有风和无风时的轨迹跟踪控制区别
空速向量
va=V[cosξsinξ]
\\mathbf{v}_a = V
\\begin{bmatrix}
\\cos\\xi \\\\
\\sin\\xi
\\end{bmatrix}
va=V[cosξsinξ]
地速向量
vg=va+w=[Vcosξ+wnVsinξ+we]
\\mathbf{v}_g=
\\mathbf{v}_a
+\\mathbf{w}=
\\begin{bmatrix}
V\\cos\\xi + w_n \\\\
V\\sin\\xi + w_e
\\end{bmatrix}
vg=va+w=[Vcosξ+wnVsinξ+we]
因此
Vg=(Vcosξ+wn)2+(Vsinξ+we)2,
V_g=
\\sqrt{(V\\cos\\xi+w_n)^2+(V\\sin\\xi+w_e)^2},
Vg=(Vcosξ+wn)2+(Vsinξ+we)2,
且
χ=atan2(Vsinξ+we, Vcosξ+wn)
\\boxed{
\\chi
=\\operatorname{atan2}
\\left(
V\\sin\\xi+w_e,\\;
V\\cos\\xi+w_n
\\right)
}
χ=atan2(Vsinξ+we,Vcosξ+wn)
无风时 χ=ξ\\chi=\\xiχ=ξ;有侧风时一般 χ≠ξ\\chi\\neq\\xiχ=ξ。
例如希望地面航迹沿正北方向,则需 e˙=0\\dot e=0e˙=0,因此
Vsinξ+we=0
V\\sin\\xi+w_e=0
Vsinξ+we=0
以及
sinξ=−weV.
\\boxed{\\sin\\xi=-\\frac{w_e}{V}}.
sinξ=−Vwe.
即飞机需要向迎风侧偏置航向,才能保持期望的跟踪轨迹。
为什么要采用非线性的模型
原文中式(1)和(3)中包含
sinξ,cosξ,tanμ.
\\sin\\xi,\\qquad\\cos\\xi,\\qquad\\tan\\mu.
sinξ,cosξ,tanμ.
因此未来状态一般不能全局写成固定矩阵关系
Z=Gx+HU
\\mathbf{Z}
=\\mathbf{G}\\mathbf{x}
+
\\mathbf{H}\\mathbf{U}
Z=Gx+HU
这正是本文采用 NMPC 的直接原因之一。
2.4 低层控制的闭环辨识
传统开放环辨识可能研究
δa→p或δa→ϕ.
\\delta_a\\rightarrow p
\\quad\\text{或}\\quad
\\delta_a\\rightarrow\\phi.
δa→p或δa→ϕ.
论文需要的是
μr→μ,
\\boxed{\\mu_r\\rightarrow\\mu},
μr→μ,
因为高层 NMPC 直接操纵的是 bank reference,而非副翼。
这种设置的优势在于:
- 利用已稳定的底层闭环动态,便于低阶建模;
- 避免完整气动辨识,减少飞行试验和模型维数。
论文使用 2-1-1 类型阶跃组合进行闭环辨识,在不同滚转幅值下采集多组数据,并比较多个阶次的 ARX 模型。最终综合验证集拟合效果、模型复杂度和 NMPC 在线计算负担,选择二阶模型。
离散 ARX 模型的一般形式为
A(q−1)yk=B(q−1)uk+εk,
A(q^{-1})y_k=B(q^{-1})u_k+\\varepsilon_k,
A(q−1)yk=B(q−1)uk+εk,
其中
A(q−1)=1+a1q−1+⋯+anaq−na,
A(q^{-1})=1+a_1q^{-1}+\\cdots+a_{n_a}q^{-n_a},
A(q−1)=1+a1q−1+⋯+anaq−na,
B(q−1)=b1q−1+⋯+bnbq−nb.
B(q^{-1})=b_1q^{-1}+\\cdots+b_{n_b}q^{-n_b}.
B(q−1)=b1q−1+⋯+bnbq−nb.
二阶滚转闭环模型
论文选择
Gμ(s)=μ(s)μr(s)=b0s2+a1s+a0.
\\boxed{
G_\\mu(s)=\\frac{\\mu(s)}{\\mu_r(s)}
=\\frac{b_0}{s^2+a_1s+a_0}
}.
Gμ(s)=μr(s)μ(s)=s2+a1s+a0b0.
于是
(s2+a1s+a0)μ(s)=b0μr(s),
(s^2+a_1s+a_0)\\mu(s)=b_0\\mu_r(s),
(s2+a1s+a0)μ(s)=b0μr(s),
得到
μ¨=b0μr−a1μ˙−a0μ.
\\boxed{\\ddot\\mu=b_0\\mu_r-a_1\\dot\\mu-a_0\\mu}.
μ¨=b0μr−a1μ˙−a0μ.
令
qμ=μ˙,
q_\\mu=\\dot\\mu,
qμ=μ˙,
则
[μ˙q˙μ]=[qμ−a0μ−a1qμ+b0μr].
\\begin{bmatrix}\\dot\\mu\\\\\\dot q_\\mu\\end{bmatrix}
=\\begin{bmatrix}
q_\\mu\\\\
-a_0\\mu-a_1q_\\mu+b_0\\mu_r
\\end{bmatrix}.
[μ˙q˙μ]=[qμ−a0μ−a1qμ+b0μr].
若分母写成标准形式
s2+2ζωns+ωn2,
s^2+2\\zeta\\omega_ns+\\omega_n^2,
s2+2ζωns+ωn2,
则
ωn=a0,ζ=a12a0.
\\omega_n=\\sqrt{a_0},
\\qquad
\\zeta=\\frac{a_1}{2\\sqrt{a_0}}.
ωn=a0,ζ=2a0a1.
2.6 论文的完整 NMPC 预测模型
忽略路径切换状态时,定义
xp=[neμξqμ]T,u=μr
\\mathbf{x}_p
=\\begin{bmatrix}
n & e & \\mu & \\xi & q_\\mu
\\end{bmatrix}^{T},
\\qquad
u=\\mu_r
xp=[neμξqμ]T,u=μr
完整低阶预测模型为
x˙p=[Vcosξ+wnVsinξ+weqμgtanμVb0u−a1qμ−a0μ]
\\boxed{
\\dot{\\mathbf{x}}_p
=\\begin{bmatrix}
V\\cos\\xi + w_n \\\\
V\\sin\\xi + w_e \\\\
q_\\mu \\\\
\\frac{g\\tan\\mu}{V} \\\\
b_0u – a_1q_\\mu – a_0\\mu
\\end{bmatrix}
}
x˙p=Vcosξ+wnVsinξ+weqμVgtanμb0u−a1qμ−a0μ
在线参数可以写成
θ=[Vwnwe]T
\\boldsymbol{\\theta}
=\\begin{bmatrix}
V & w_n & w_e
\\end{bmatrix}^{T}
θ=[Vwnwe]T
论文在单次预测 horizon 内把当前空速和风估计视为常值在线参数 [1]。
完整状态还包含辅助切换状态:
x=[neμξqμxsw]T
\\boxed{
\\mathbf{x}
=\\begin{bmatrix}
n & e & \\mu & \\xi & q_\\mu & x_{\\mathrm{sw}}
\\end{bmatrix}^{T}
}
x=[neμξqμxsw]T
2.7 路径跟踪控制推导
(1)一般路径误差
二维向量
a=[anae],b=[bnbe]
\\mathbf{a}=\\begin{bmatrix}a_n\\\\a_e\\end{bmatrix},
\\quad
\\mathbf{b}=\\begin{bmatrix}b_n\\\\b_e\\end{bmatrix}
a=[anae],b=[bnbe]
的标量叉积定义为
a×b=anbe−aebn.
\\mathbf{a}\\times\\mathbf{b}=a_nb_e-a_eb_n.
a×b=anbe−aebn.
设 UAV 位置为 p\\mathbf{p}p,路径上距离 UAV 最近的点为 d\\mathbf{d}d,该点处的单位切向量为 Tˉd\\bar{\\mathbf{T}}_dTˉd。论文定义
et=(d−p)×Tˉd.
\\boxed{
e_t=(\\mathbf{d}-\\mathbf{p})\\times\\bar{\\mathbf{T}}_d
}.
et=(d−p)×Tˉd.
参考航迹角
χd=atan2(Tˉd,e,Tˉd,n)
\\boxed{
\\chi_d
=\\operatorname{atan2}
\\left(
\\bar{T}_{d,e},
\\bar{T}_{d,n}
\\right)
}
χd=atan2(Tˉd,e,Tˉd,n)
方向误差
eχ=wrap(χd−χ)
\\boxed{
e_\\chi
=\\operatorname{wrap}
\\left(
\\chi_d-\\chi
\\right)
}
eχ=wrap(χd−χ)
实际实现必须做 angle wrap,可写成
eχ=atan2(sin(χd−χ),cos(χd−χ))
e_\\chi
=\\operatorname{atan2}
\\left(
\\sin(\\chi_d-\\chi),
\\cos(\\chi_d-\\chi)
\\right)
eχ=atan2(sin(χd−χ),cos(χd−χ))
仅有 et=0e_t=0et=0 只能说明飞机瞬时位于路径上;飞机仍可能垂直穿过路径。因此还需要使 eχ→0e_\\chi\\to0eχ→0。
(2)直线路径最近点
直线路径由 a,b∈R2\\mathbf{a},\\mathbf{b}\\in\\R^2a,b∈R2 定义。单位切向量
Tˉ=b−a∥b−a∥2.
\\bar{\\mathbf{T}}=
\\frac{\\mathbf{b}-\\mathbf{a}}{\\|\\mathbf{b}-\\mathbf{a}\\|_2}.
Tˉ=∥b−a∥2b−a.
无限直线投影参数
s=TˉT(p−a)
s
=\\bar{\\mathbf{T}}^{T}
\\left(
\\mathbf{p}
-\\mathbf{a}
\\right)
s=TˉT(p−a)
最近点
d=a+sTˉ.
\\boxed{\\mathbf{d}=\\mathbf{a}+s\\bar{\\mathbf{T}}}.
d=a+sTˉ.
若为有限线段,则
sc=min (max(s,0),∥b−a∥2),
s_c=
\\min\\!\\left(
\\max(s,0),\\|\\mathbf{b}-\\mathbf{a}\\|_2
\\right),
sc=min(max(s,0),∥b−a∥2),
并使用
d=a+scTˉ.
\\mathbf{d}=\\mathbf{a}+s_c\\bar{\\mathbf{T}}.
d=a+scTˉ.
(3)圆弧路径最近点
圆心 c\\mathbf{c}c、半径 RRR:
r=p−c,ρ=∥r∥2,r^=rρ.
\\mathbf{r}=\\mathbf{p}-\\mathbf{c},\\qquad
\\rho=\\|\\mathbf{r}\\|_2,\\qquad
\\hat{\\mathbf{r}}=\\frac{\\mathbf{r}}{\\rho}.
r=p−c,ρ=∥r∥2,r^=ρr.
圆上径向最近点
d=c+Rr^.
\\boxed{\\mathbf{d}=\\mathbf{c}+R\\hat{\\mathbf{r}}}.
d=c+Rr^.
定义
J=[0−110],σ={+1,逆时针−1,顺时针
\\mathbf{J}
=\\begin{bmatrix}
0 & -1 \\\\
1 & 0
\\end{bmatrix},
\\qquad
\\sigma
=\\begin{cases}
+1, & \\text{逆时针} \\\\
-1, & \\text{顺时针}
\\end{cases}
J=[01−10],σ={+1,−1,逆时针顺时针
则
Tˉd=σJr^.
\\boxed{\\bar{\\mathbf{T}}_d=\\sigma \\mathbf{J}\\hat{\\mathbf{r}}}.
Tˉd=σJr^.
原论文指出直线和圆的最近点具有简单解析形式,因此省略具体计算。本节公式是复现所需的标准几何补全。
2.8 Dubins 路径与预测时域内部切换
固定翼不能原地转向,因此 Dubins path 常由 line 与 arc 拼接。原论文把
Pcur,Pnext
P_{\\mathrm{cur}},\\qquad P_{\\mathrm{next}}
Pcur,Pnext
都作为在线参数传入 NMPC。
可表示为
Pline={type,a,b},
P_{\\mathrm{line}}=\\{\\text{type},\\mathbf{a},\\mathbf{b}\\},
Pline={type,a,b},
Parc={type,c,R,dir,ξ0,Δξ}.
P_{\\mathrm{arc}}=
\\{\\text{type},\\mathbf{c},R,\\text{dir},\\xi_0,\\Delta\\xi\\}.
Parc={type,c,R,dir,ξ0,Δξ}.
若飞机将在 horizon 内由当前直线进入圆弧,而整个 horizon 仍然对当前直线计算误差,则后续 reference 是错误的。因此论文引入
xsw
x_{\\mathrm{sw}}
xsw
使预测模型可以在 horizon 内部切换到下一段路径。
一个便于复现的连续逻辑表示为
x˙sw={0,尚未满足切换条件,α,满足切换条件或已进入切换状态,
\\dot x_{\\mathrm{sw}}
=\\begin{cases}
0,&\\text{尚未满足切换条件},\\\\
\\alpha,&\\text{满足切换条件或已进入切换状态},
\\end{cases}
x˙sw={0,α,尚未满足切换条件,满足切换条件或已进入切换状态,
其中 α>0\\alpha>0α>0 仅用于使辅助状态越过阈值;真实飞机完成路径段切换后,再重置 xswx_{\\mathrm{sw}}xsw。
该式是对论文 switch-state 思想的复现友好的一种表示,不声称是原文式(6)的逐字重排。核心思想是:reference segment 本身也要在预测时域内正确演化。
2.9 连续时间 NMPC 最优控制问题
论文使用
y=[eteχμqμμr]T
\\boxed{
\\mathbf{y}
=\\begin{bmatrix}
e_t & e_\\chi & \\mu & q_\\mu & \\mu_r
\\end{bmatrix}^{T}
}
y=[eteχμqμμr]T
连续时间 OCP:
minX,UJ=∫0T[(y−yref)TQ(y−yref)+(u−uref)TR(u−uref)] dt+(y(T)−yref(T))TP(y(T)−yref(T))
\\begin{aligned}
\\min_{\\mathbf{X},\\mathbf{U}} \\quad J
={}&
\\int_0^T
\\Big[
(\\mathbf{y}-\\mathbf{y}_{\\mathrm{ref}})^{T}
\\mathbf{Q}
(\\mathbf{y}-\\mathbf{y}_{\\mathrm{ref}})
\\\\
&\\qquad+
(u-u_{\\mathrm{ref}})^{T}
\\mathbf{R}
(u-u_{\\mathrm{ref}})
\\Big]
\\,\\mathrm{d}t
\\\\
&+
(\\mathbf{y}(T)-\\mathbf{y}_{\\mathrm{ref}}(T))^{T}
\\mathbf{P}
(\\mathbf{y}(T)-\\mathbf{y}_{\\mathrm{ref}}(T))
\\end{aligned}
X,UminJ=∫0T[(y−yref)TQ(y−yref)+(u−uref)TR(u−uref)]dt+(y(T)−yref(T))TP(y(T)−yref(T))
subject to
x˙=f(x,u)y=h(x,u)u(t)∈Ux(0)=x^(t0)
\\begin{aligned}
\\dot{\\mathbf{x}}
&=
f(\\mathbf{x},u)
\\\\
\\mathbf{y}
&=
h(\\mathbf{x},u)
\\\\
u(t)
&\\in
\\mathcal{U}
\\\\
\\mathbf{x}(0)
&=
\\hat{\\mathbf{x}}(t_0)
\\end{aligned}
x˙yu(t)x(0)=f(x,u)=h(x,u)∈U=x^(t0)
控制约束
μr,min≤μr(t)≤μr,max.
\\boxed{\\mu_{r,\\min}\\le\\mu_r(t)\\le\\mu_{r,\\max}}.
μr,min≤μr(t)≤μr,max.
若
Q=diag(qt,qχ,qμ,qq,qΔu),
\\mathbf{Q}=\\operatorname{diag}(q_t,q_\\chi,q_\\mu,q_q,q_{\\Delta u}),
Q=diag(qt,qχ,qμ,qq,qΔu),
则各项分别对应横向误差、航迹角误差、bank 大小、bank rate 和跨迭代 control-horizon deviation 的代价。
跨 NMPC 迭代的控制计划一致性惩罚
记第 kkk 次 NMPC 求解的第 iii 个节点控制为
ui(k),
u_i^{(k)},
ui(k),
上一轮同一节点为
ui(k−1).
u_i^{(k-1)}.
ui(k−1).
论文的思想是惩罚
Δui(k)=ui(k)−ui(k−1).
\\boxed{
\\Delta u_i^{(k)}=
u_i^{(k)}-u_i^{(k-1)}
}.
Δui(k)=ui(k)−ui(k−1).
这不同于传统输入率惩罚
ui−ui−1.
u_i-u_{i-1}.
ui−ui−1.
前者要求“连续两次重规划不要突然推翻近期计划”,后者要求“同一条未来计划内部平滑”。
离散实现可写为
Jcons=∑i=0N−1ρi∥ui(k)−ui(k−1)∥QΔu2.
J_{\\mathrm{cons}}
=\\sum_{i=0}^{N-1}
\\rho_i
\\|u_i^{(k)}-u_i^{(k-1)}\\|_{Q_{\\Delta u}}^2.
Jcons=i=0∑N−1ρi∥ui(k)−ui(k−1)∥QΔu2.
论文指出权重应在 horizon 前部较大、后部减弱。一个便于复现、但不声称为原文唯一实现的例子为
ρi=(N−1−iN−1)2.
\\rho_i=
\\left(\\frac{N-1-i}{N-1}\\right)^2.
ρi=(N−1N−1−i)2.
从连续时间 OCP 到离散 NMPC
设预测网格间隔 Δt\\Delta tΔt,节点数 NNN:
T=NΔt.
\\boxed{T=N\\Delta t}.
T=NΔt.
论文仿真中使用
Δt=0.1 s,N=40 或 80
\\Delta t = 0.1\\,\\mathrm{s},
\\qquad
N = 40 \\ \\text{或}\\ 80
Δt=0.1s,N=40 或 80
即4 s4\\,\\mathrm{s}4s和8 s8\\,\\mathrm{s}8s预测时长;控制器每0.05 s0.05\\,\\mathrm{s}0.05s重算一次。因此预测网格间隔与闭环控制更新周期不必相同。
若
x˙=f(x,u),
\\dot{\\mathbf{x}}=f(\\mathbf{x},u),
x˙=f(x,u),
区间内输入保持不变,则
k1=f(xi,ui)k2=f(xi+Δt2k1,ui)k3=f(xi+Δt2k2,ui)k4=f(xi+Δt k3,ui)
\\begin{aligned}
\\mathbf{k}_1
&=
f(\\mathbf{x}_i,u_i)
\\\\
\\mathbf{k}_2
&=
f\\left(
\\mathbf{x}_i+\\frac{\\Delta t}{2}\\mathbf{k}_1,
u_i
\\right)
\\\\
\\mathbf{k}_3
&=
f\\left(
\\mathbf{x}_i+\\frac{\\Delta t}{2}\\mathbf{k}_2,
u_i
\\right)
\\\\
\\mathbf{k}_4
&=
f\\left(
\\mathbf{x}_i+\\Delta t\\,\\mathbf{k}_3,
u_i
\\right)
\\end{aligned}
k1k2k3k4=f(xi,ui)=f(xi+2Δtk1,ui)=f(xi+2Δtk2,ui)=f(xi+Δtk3,ui)
以及
xi+1=Fd(xi,ui)=xi+Δt6(k1+2k2+2k3+k4)
\\boxed{
\\mathbf{x}_{i+1}
=F_d(\\mathbf{x}_i,u_i)
=\\mathbf{x}_i
+
\\frac{\\Delta t}{6}
\\left(
\\mathbf{k}_1
+
2\\mathbf{k}_2
+
2\\mathbf{k}_3
+
\\mathbf{k}_4
\\right)
}
xi+1=Fd(xi,ui)=xi+6Δt(k1+2k2+2k3+k4)
Direct Multiple Shooting 的完整数学形式
在 direct multiple shooting 中,状态和控制都进入决策向量:
z=[x0T⋯xNTu0⋯uN−1]T
\\mathbf{z}
=\\begin{bmatrix}
\\mathbf{x}_0^{T} &
\\cdots &
\\mathbf{x}_N^{T} &
u_0 &
\\cdots &
u_{N-1}
\\end{bmatrix}^{T}
z=[x0T⋯xNTu0⋯uN−1]T
每个区间独立积分,并施加连续性约束
ci(z)=xi+1−Fd(xi,ui)=0.
\\boxed{
\\mathbf{c}_i(\\mathbf{z})=
\\mathbf{x}_{i+1}-F_d(\\mathbf{x}_i,u_i)=\\mathbf{0}
}.
ci(z)=xi+1−Fd(xi,ui)=0.
初始条件
x0=x^(tk),
\\mathbf{x}_0=\\hat{\\mathbf{x}}(t_k),
x0=x^(tk),
输入约束
umin≤ui≤umax.
u_{\\min}\\le u_i\\le u_{\\max}.
umin≤ui≤umax.
离散代价
Jd=∑i=0N−1[∥yi−yref,i∥Q2+∥ui−uref,i∥R2]+∥yN−yref,N∥P2+Jcons
\\begin{aligned}
J_d
={}&
\\sum_{i=0}^{N-1}
\\left[
\\left\\|
\\mathbf{y}_i-\\mathbf{y}_{\\mathrm{ref},i}
\\right\\|_{\\mathbf{Q}}^2
+
\\left\\|
u_i-u_{\\mathrm{ref},i}
\\right\\|_{\\mathbf{R}}^2
\\right]
\\\\
&+
\\left\\|
\\mathbf{y}_N-\\mathbf{y}_{\\mathrm{ref},N}
\\right\\|_{\\mathbf{P}}^2
+
J_{\\mathrm{cons}}
\\end{aligned}
Jd=i=0∑N−1[∥yi−yref,i∥Q2+∥ui−uref,i∥R2]+∥yN−yref,N∥P2+Jcons
最终得到 NLP:
minzJd(z)s.t.ci(z)=0,x0=x^(tk),umin≤ui≤umax.
\\boxed{
\\begin{aligned}
\\min_{\\mathbf{z}}\\quad&J_d(\\mathbf{z})\\\\
\\text{s.t.}\\quad&
\\mathbf{c}_i(\\mathbf{z})=0,\\\\
&\\mathbf{x}_0=\\hat{\\mathbf{x}}(t_k),\\\\
&u_{\\min}\\le u_i\\le u_{\\max}.
\\end{aligned}}
zmins.t.Jd(z)ci(z)=0,x0=x^(tk),umin≤ui≤umax.
在此基础上,线性系统
xk+1=Axk+Buk
\\mathbf{x}_{k+1}=\\mathbf{A}\\mathbf{x}_k+\\mathbf{B}\\mathbf{u}_k
xk+1=Axk+Buk
可以堆叠为
Z=Gxk+HU,
\\mathbf{Z}=\\mathbf{G}\\mathbf{x}_k+\\mathbf{H}\\mathbf{U},
Z=Gxk+HU,
从而把二次代价化成
KaTeX parse error: Undefined control sequence: \\trans at position 40: …nst}+\\mathbf{f}\\̲t̲r̲a̲n̲s̲ ̲\\mathbf{U}
+\\fr…
无约束时
U⋆=−HQ−1f.
\\mathbf{U}^\\star=-\\mathbf{H}_Q^{-1} \\mathbf{f}.
U⋆=−HQ−1f.
本文中
xi+1=Fd(xi,ui)
\\mathbf{x}_{i+1}=F_d(\\mathbf{x}_i,u_i)
xi+1=Fd(xi,ui)
包含 sinξ,cosξ,tanμ\\sin\\xi,\\cos\\xi,\\tan\\musinξ,cosξ,tanμ,同时路径误差还依赖最近点几何和 KaTeX parse error: Undefined control sequence: \\atanTwo at position 1: \\̲a̲t̲a̲n̲T̲w̲o̲。因此 J(U)J(\\mathbf{U})J(U) 不是全局二次函数,也不存在对整个工作域固定的 G,H\\mathbf{G},\\mathbf{H}G,H。这就是必须使用非线性优化器的根本原因。
论文使用 SQP、qpOASES 以及 Gauss–Newton real-time iteration 思想~\\cite{stastny2017,houska2011,qpoases}。
在当前轨迹 (xˉi,uˉi)(\\bar{\\mathbf{x}}_i,\\bar u_i)(xˉi,uˉi) 附近,
Fd(xi,ui)≈Fd(xˉi,uˉi)+AiΔxi+BiΔui,
F_d(\\mathbf{x}_i,u_i)
\\approx
F_d(\\bar{\\mathbf{x}}_i,\\bar u_i)
+\\mathbf{A}_i\\Delta \\mathbf{x}_i
+\\mathbf{B}_i\\Delta u_i,
Fd(xi,ui)≈Fd(xˉi,uˉi)+AiΔxi+BiΔui,
其中
Ai=∂Fd∂x∣(xˉi,uˉi),Bi=∂Fd∂u∣(xˉi,uˉi).
\\mathbf{A}_i=
\\left.\\frac{\\partial F_d}{\\partial \\mathbf{x}}\\right|_{(\\bar{\\mathbf{x}}_i,\\bar u_i)},
\\quad
\\mathbf{B}_i=
\\left.\\frac{\\partial F_d}{\\partial u}\\right|_{(\\bar{\\mathbf{x}}_i,\\bar u_i)}.
Ai=∂x∂Fd(xˉi,uˉi),Bi=∂u∂Fd(xˉi,uˉi).
连续性约束线性化:
Δxi+1−AiΔxi−BiΔui=−cˉi.
\\Delta\\mathbf{x}_{i+1}
-\\mathbf{A}_i\\Delta \\mathbf{x}_i
-\\mathbf{B}_i\\Delta u_i
=-\\bar{\\mathbf{c}}_i.
Δxi+1−AiΔxi−BiΔui=−cˉi.
若代价写为最小二乘
J(z)=12∥r(z)∥W2,
J(\\mathbf{z})=\\frac12\\|\\mathbf{r}(\\mathbf{z})\\|_{\\mathbf{W}}^2,
J(z)=21∥r(z)∥W2,
则
∇J=JrTWr
\\nabla J
=\\mathbf{J}_r^{T}
\\mathbf{W}
\\mathbf{r}
∇J=JrTWr
精确 Hessian:
∇2J=JrTWJr+∑jrj∇2rj
\\nabla^2 J
=\\mathbf{J}_r^{T}
\\mathbf{W}
\\mathbf{J}_r
+
\\sum_j
r_j
\\nabla^2 r_j
∇2J=JrTWJr+j∑rj∇2rj
Gauss–Newton 近似忽略第二项:
HGN≈JrTWJr
\\boxed{
\\mathbf{H}_{\\mathrm{GN}}
\\approx
\\mathbf{J}_r^{T}
\\mathbf{W}
\\mathbf{J}_r
}
HGN≈JrTWJr
因此每轮 SQP 解局部 QP:
minΔz12ΔzTHGNΔz+gTΔzs.t.AcΔz=bcl≤CΔz≤u
\\boxed{
\\begin{aligned}
\\min_{\\Delta \\mathbf{z}} \\quad
&
\\frac{1}{2}
\\Delta \\mathbf{z}^{T}
\\mathbf{H}_{\\mathrm{GN}}
\\Delta \\mathbf{z}
+
\\mathbf{g}^{T}
\\Delta \\mathbf{z}
\\\\
\\text{s.t.}\\quad
&
\\mathbf{A}_c
\\Delta \\mathbf{z}
=\\mathbf{b}_c
\\\\
&
\\mathbf{l}
\\le
\\mathbf{C}
\\Delta \\mathbf{z}
\\le
\\mathbf{u}
\\end{aligned}
}
Δzmins.t.21ΔzTHGNΔz+gTΔzAcΔz=bcl≤CΔz≤u
求得 Δz⋆\\Delta\\mathbf{z}^\\starΔz⋆ 后更新
z(j+1)=z(j)+αjΔz⋆.
\\mathbf{z}^{(j+1)}=
\\mathbf{z}^{(j)}+\\alpha_j\\Delta \\mathbf{z}^\\star.
z(j+1)=z(j)+αjΔz⋆.
RTI 的核心是在每个控制周期只做有限的在线 SQP 更新并利用上一时刻解 warm start,从而满足实时要求。
预测时域长度的理论解释
最大 bank angle 下,最大航向变化率为:
∣ξ˙∣max=gtanμmaxV
|\\dot{\\xi}|_{\\max}
=\\frac{g\\tan\\mu_{\\max}}{V}
∣ξ˙∣max=Vgtanμmax
完成
90∘=π2
90^\\circ=\\frac{\\pi}{2}
90∘=2π
航向变化所需的近似时间为:
T90=πV2gtanμmax
\\boxed{
T_{90}
=\\frac{\\pi V}
{2g\\tan\\mu_{\\max}}
}
T90=2gtanμmaxπV
若预测网格时间间隔为 Δt\\Delta tΔt,则为了让预测时域至少能够覆盖这一转弯过程,需要满足:
N≥⌈T90Δt⌉
\\boxed{
N
\\ge
\\left\\lceil
\\frac{T_{90}}{\\Delta t}
\\right\\rceil
}
N≥⌈ΔtT90⌉
论文中说明,N=40N=40N=40 被选作能够覆盖约一次 90∘90^\\circ90∘ 最大 bank 转弯的最低 prediction horizon 量级(Stastny et al., 2017)。
较长 prediction horizon 的主要意义在于提前发现未来可能出现的轨迹误差,从而提前采取控制动作。但是,无论预测时域多长,都无法突破飞机自身的最小转弯半径、最大 bank angle 等物理可行性约束。
仿真设置与结果
论文示例仿真使用如下权重:
Qdiag=>[0.0110.10.01100]
\\mathbf{Q}_{\\mathrm{diag}}
=> \\begin{bmatrix}
0.01 & 1 & 0.1 & 0.01 & 100
\\end{bmatrix}
Qdiag=>[0.0110.10.01100]
R=10
R=10
R=10
Pdiag=>[0.11000.010]
\\mathbf{P}_{\\mathrm{diag}}
=> \\begin{bmatrix}
0.1 & 10 & 0 & 0.01 & 0
\\end{bmatrix}
Pdiag=>[0.11000.010]
prediction discretization interval 为:
Δt=0.1 s
\\Delta t = 0.1\\,\\mathrm{s}
Δt=0.1s
控制器每
0.05 s
0.05\\,\\mathrm{s}
0.05s
更新一次。
论文比较:
N=40和N=80
N=40
\\qquad \\text{和} \\qquad
N=80
N=40和N=80
两种 prediction horizon。
空速设置为:
V=14 m/s
V=14\\,\\mathrm{m/s}
V=14m/s
在圆轨迹强风实验中,East 方向风速为:
we=−10 m/s
w_e=-10\\,\\mathrm{m/s}
we=−10m/s
主要现象包括:
较长 prediction horizon 能够更早看到未来可能发生的路径偏离。
因此控制器能够更早开始调整 bank angle。
当参考圆轨迹在局部超出飞机的物理可达范围时,无论采用 N=40N=40N=40 还是 N=80N=80N=80,都会存在不可避免的路径误差。
bank-angle reference 的上下限仍然能够作为优化约束被显式满足。
如果不惩罚连续两次 NMPC 优化之间的 control-horizon deviation,则第一个 shooting node 的控制输入可能出现较明显的跳变。
实飞设置、实时性和结论边界
实飞实验主要采用:
N=40
N=40
N=40
Δt=0.1 s
\\Delta t=0.1\\,\\mathrm{s}
Δt=0.1s
NMPC 每
0.05 s
0.05\\,\\mathrm{s}
0.05s
重新求解一次。
实飞阶段的权重设置为:
Qdiag=Pdiag=[0.01100.10.01100]
\\mathbf{Q}_{\\mathrm{diag}} = \\mathbf{P}_{\\mathrm{diag}}
=
\\begin{bmatrix}
0.01 & 10 & 0.1 & 0.01 & 100
\\end{bmatrix}
Qdiag=Pdiag=[0.01100.10.01100]
并且:
R=10
R=10
R=10
—— Stastny et al., 2017
ODROID-U3 上整个 NMPC ROS node 的计算时间如下:
| Line | 9.96 | 0.250 | 10.5 |
| Circle | 13.5 | 0.439 | 15.1 |
控制周期为:
Tc=50 ms
T_c=50\\,\\mathrm{ms}
Tc=50ms
而论文报告的最大计算时间约为:
Tsolve,max=15.1 ms
T_{\\mathrm{solve,max}}
=15.1\\,\\mathrm{ms}
Tsolve,max=15.1ms
因此:
15.1 ms<50 ms
15.1\\,\\mathrm{ms}
<
50\\,\\mathrm{ms}
15.1ms<50ms
说明该 NMPC 实现在实验平台上具有一定实时计算余量。
论文进行了 box/loiter 以及任意 Dubins segment 序列的实飞实验。
路径收敛以后,稳态位置误差约控制在:
∣et∣≲1 m
|e_t|
\\lesssim
1\\,\\mathrm{m}
∣et∣≲1m
需要严格区分以下几点:
强风环境下的结果来自 simulation。
实际飞行实验是在非常平静、风速可以忽略的环境下完成的。
相同轨迹使用 L1L_1L1 guidance 在平静条件下也能够获得相近的路径跟踪表现。
因此,这篇论文的主要目标是证明 NMPC 在小型固定翼 UAV 上能够实时运行并完成实飞,而不是证明 NMPC 在所有情况下都优于 L1L_1L1 guidance。
论文方法的主要优点与局限
优点
控制层级与模型层级匹配
使用:
简化固定翼运动学+闭环辨识得到的滚转动态
\\text{简化固定翼运动学}
+
\\text{闭环辨识得到的滚转动态}
简化固定翼运动学+闭环辨识得到的滚转动态
而不是直接采用完整高维 6-DoF 飞行动力学模型。
显式考虑风
prediction model 中直接包含:
wn,we
w_n,\\qquad w_e
wn,we
因而能够根据当前风速估计预测未来的 ground track。
reference 可以在 prediction horizon 内切换
通过:
xsw
x_{\\mathrm{sw}}
xsw
以及:
Pcur,Pnext
P_{\\mathrm{cur}},
\\qquad
P_{\\mathrm{next}}
Pcur,Pnext
使未来 prediction horizon 内的参考路径能够从当前 segment 正确切换到下一个 segment。
约束直接进入优化问题
例如 bank-angle reference constraint:
μr,min≤μr≤μr,max
\\mu_{r,\\min}
\\le
\\mu_r
\\le
\\mu_{r,\\max}
μr,min≤μr≤μr,max
可以直接作为 NMPC 的 optimization constraint。
完成真实嵌入式飞行验证
说明该 NMPC 方法不仅能够离线仿真,还能够在小型 UAV 的 onboard computer 上实时运行。
局限
控制模型主要为二维横侧向模型,没有同时优化:
h,V,γ,θ
h,\\qquad
V,\\qquad
\\gamma,\\qquad
\\theta
h,V,γ,θ
等纵向状态。
模型依赖协调转弯、低 sideslip 和相对温和的机动假设。
在单次 prediction horizon 内,空速和风速近似认为保持不变。
论文的具体 NMPC 实现没有给出严格的闭环稳定性和数值稳定性证明。
NMPC 在强风情况下的优势主要通过仿真验证,没有进行对应的强风实飞验证。
整篇论文的一条核心因果链
整套控制系统最核心的因果关系可以表示为:
μr→qμ→μ→ξ˙→ξ→(n,e)→(et,eχ)→J
\\boxed{
\\mu_r
\\rightarrow
q_\\mu
\\rightarrow
\\mu
\\rightarrow
\\dot{\\xi}
\\rightarrow
\\xi
\\rightarrow
(n,e)
\\rightarrow
(e_t,e_\\chi)
\\rightarrow
J
}
μr→qμ→μ→ξ˙→ξ→(n,e)→(et,eχ)→J
其中:
- μr\\mu_rμr:NMPC 输出的 bank-angle reference
- qμ=μ˙q_\\mu=\\dot{\\mu}qμ=μ˙:bank angle rate
- μ\\muμ:实际 bank angle
- ξ˙\\dot{\\xi}ξ˙:航向角变化率
- ξ\\xiξ:air-relative heading
- (n,e)(n,e)(n,e):飞机位置
- (et,eχ)(e_t,e_\\chi)(et,eχ):路径误差
- JJJ:NMPC optimization cost
NMPC 在每个控制时刻求解未来控制序列:
U=[μr,0μr,1⋯μr,N−1]T
\\mathbf{U}
=\\begin{bmatrix}
\\mu_{r,0} &
\\mu_{r,1} &
\\cdots &
\\mu_{r,N-1}
\\end{bmatrix}^{T}
U=[μr,0μr,1⋯μr,N−1]T
使预测时域内的综合代价最小。
但是实际只执行控制序列的第一项:
μr(tk)=μr,0⋆
\\boxed{
\\mu_r(t_k)
=\\mu_{r,0}^{\\star}
}
μr(tk)=μr,0⋆
然后获得新的状态估计,并重新求解下一次 NMPC 优化问题。
这就是 receding horizon principle。
最小复现模型
为了复现论文最核心的 NMPC,可以使用最小状态:
x=[neμξqμ]T
\\mathbf{x}
=\\begin{bmatrix}
n &
e &
\\mu &
\\xi &
q_\\mu
\\end{bmatrix}^{T}
x=[neμξqμ]T
控制输入:
u=μr
u=\\mu_r
u=μr
其中:
qμ=μ˙
q_\\mu=\\dot{\\mu}
qμ=μ˙
完整预测模型为:
x˙=[Vcosξ+wnVsinξ+weqμgtanμVb0u−a1qμ−a0μ]
\\boxed{
\\dot{\\mathbf{x}}
=\\begin{bmatrix}
V\\cos\\xi+w_n
\\\\
V\\sin\\xi+w_e
\\\\
q_\\mu
\\\\
\\dfrac{g\\tan\\mu}{V}
\\\\
b_0u-a_1q_\\mu-a_0\\mu
\\end{bmatrix}
}
x˙=Vcosξ+wnVsinξ+weqμVgtanμb0u−a1qμ−a0μ
直线或者圆轨迹跟踪时,可以定义 NMPC 输出:
y=[eteχμqμu]T
\\mathbf{y}
=\\begin{bmatrix}
e_t &
e_\\chi &
\\mu &
q_\\mu &
u
\\end{bmatrix}^{T}
y=[eteχμqμu]T
最小离散代价函数可以写成:
J=∑i=0N−1(qtet,i2+qχeχ,i2+qμμi2+qqqμ,i2+rui2)+JN
J
=\\sum_{i=0}^{N-1}
\\left(
q_t e_{t,i}^{2}
+
q_\\chi e_{\\chi,i}^{2}
+
q_\\mu \\mu_i^{2}
+
q_q q_{\\mu,i}^{2}
+
r u_i^{2}
\\right)
+
J_N
J=i=0∑N−1(qtet,i2+qχeχ,i2+qμμi2+qqqμ,i2+rui2)+JN
其中:
qtet,i2
q_t e_{t,i}^{2}
qtet,i2
用于惩罚横向路径误差;
qχeχ,i2
q_\\chi e_{\\chi,i}^{2}
qχeχ,i2
用于惩罚航迹方向误差;
qμμi2
q_\\mu \\mu_i^{2}
qμμi2
用于避免过大的 bank angle;
qqqμ,i2
q_q q_{\\mu,i}^{2}
qqqμ,i2
用于避免过快的滚转运动;
rui2
r u_i^{2}
rui2
用于惩罚控制输入。
推荐复现顺序
无风直线跟踪;
恒定侧风下的直线跟踪;
无风条件下的圆轨迹跟踪;
强风圆轨迹,并比较:
N=40
N=40
N=40
和
N=80
N=80
N=80
加入连续两次 NMPC optimization 之间的 control-horizon deviation penalty;
加入 Dubins line/arc switching;
最后再将:
V
V
V
和:
$$
\\mathbf{w}
\\begin{bmatrix}
w_n &
w_e
\\end{bmatrix}^{T}
$$
接入真实状态估计器。
与线性 MPC 的对应关系
| xk+1=Axk+Bukx_{k+1}=Ax_k+Bu_kxk+1=Axk+Buk | x˙=f(x,u)\\dot{\\mathbf{x}}=f(\\mathbf{x},u)x˙=f(x,u),数值离散为 xk+1=Fd(xk,uk)\\mathbf{x}_{k+1}=F_d(\\mathbf{x}_k,u_k)xk+1=Fd(xk,uk) |
| Z=Gx+HU\\mathbf{Z}=\\mathbf{G}\\mathbf{x}+\\mathbf{H}\\mathbf{U}Z=Gx+HU | 未来状态通过 nonlinear shooting 逐段积分得到 |
| 固定的 G,H\\mathbf{G},\\mathbf{H}G,H | 局部 Jacobian Ai,Bi\\mathbf{A}_i,\\mathbf{B}_iAi,Bi 随预测轨迹变化 |
| 直接求一次 QP | 求 nonlinear NLP,SQP 每轮构造一个局部 QP |
| QP 可以直接解析或数值求解 | 通常使用 RTI/SQP + warm start 在线迭代 |
因此可以理解为:
Linear MPC⊂NMPC numerical solution framework
\\boxed{
\\text{Linear MPC}
\\subset
\\text{NMPC numerical solution framework}
}
Linear MPC⊂NMPC numerical solution framework
NMPC 的 SQP 求解过程中,每一步局部线性化后,本质上仍会得到一个类似线性 MPC 的 QP。
对 eVTOL / Tiltrotor MPC 的迁移启示
这篇论文最值得迁移到 eVTOL 的并不是它的二维 fixed-wing 模型,而是下面这个思想:
先确定 NMPC 所在的控制层级,再建立足够准确但尽量低阶的预测模型
\\boxed{
\\text{先确定 NMPC 所在的控制层级,再建立足够准确但尽量低阶的预测模型}
}
先确定 NMPC 所在的控制层级,再建立足够准确但尽量低阶的预测模型
例如,如果 eVTOL 的高层 NMPC 输出:
u=[ϕrθrTr]T
\\mathbf{u}
=\\begin{bmatrix}
\\phi_r &
\\theta_r &
T_r
\\end{bmatrix}^{T}
u=[ϕrθrTr]T
那么可以建立或者辨识:
reference command→closed-loop vehicle response
\\text{reference command}
\\rightarrow
\\text{closed-loop vehicle response}
reference command→closed-loop vehicle response
而不是直接建立每一个执行器到飞机状态之间的完整高阶模型。
如果进一步使用 actuator-level NMPC,则控制输入可能变为:
u=[T1⋯Tmδtiltδaδeδr]T
\\mathbf{u}
=\\begin{bmatrix}
T_1 &
\\cdots &
T_m &
\\delta_{\\mathrm{tilt}} &
\\delta_a &
\\delta_e &
\\delta_r
\\end{bmatrix}^{T}
u=[T1⋯Tmδtiltδaδeδr]T
此时 NMPC 的控制自由度明显增加,但同时:
model complexity
\\text{model complexity}
model complexity
constraint complexity
\\text{constraint complexity}
constraint complexity
和:
online computational cost
\\text{online computational cost}
online computational cost
都会显著增加。
在 transition flight 中还需要考虑:
CL(α)
C_L(\\alpha)
CL(α)
CD(α)
C_D(\\alpha)
CD(α)
Va2
V_a^2
Va2
R(q)T
\\mathbf{R}(q)\\mathbf{T}
R(q)T
以及:
δtilt
\\delta_{\\mathrm{tilt}}
δtilt
等强非线性因素。
因此:
control-augmented reduced-order modeling
\\boxed{
\\text{control-augmented reduced-order modeling}
}
control-augmented reduced-order modeling
对于 eVTOL NMPC 可能比普通固定翼更加重要。
附录
实现时的角度处理
对于任何角度误差,都建议将其限制在:
[−π,π)
[-\\pi,\\pi)
[−π,π)
范围内。
可以定义:
wrap[−π,π)(θ)=atan2(sinθ,cosθ)
\\operatorname{wrap}_{[-\\pi,\\pi)}(\\theta)
=\\operatorname{atan2}
\\left(
\\sin\\theta,
\\cos\\theta
\\right)
wrap[−π,π)(θ)=atan2(sinθ,cosθ)
因此 course error 可以写成:
eχ=atan2(sin(χd−χ),cos(χd−χ))
\\boxed{
e_\\chi
=\\operatorname{atan2}
\\left(
\\sin(\\chi_d-\\chi),
\\cos(\\chi_d-\\chi)
\\right)
}
eχ=atan2(sin(χd−χ),cos(χd−χ))
这样可以避免当:
χd≈−π
\\chi_d\\approx-\\pi
χd≈−π
而:
χ≈+π
\\chi\\approx+\\pi
χ≈+π
时产生接近:
2π
2\\pi
2π
的虚假角度误差。
一个 NMPC 控制周期的伪代码
Given previous optimal horizon U_prev
for each control instant k:
1. Read state estimate:
x_hat = [n, e, mu, xi, q_mu]
2. Read online parameters:
V
wind
P_current
P_next
3. Warm-start NLP using previous solution
4. Solve:
minimize J(X, U)
subject to:
X(i+1) = Fd(X(i), U(i))
mu_r_min <= U(i) <= mu_r_max
where:
y = [e_t, e_chi, mu, q_mu, mu_r]
5. Apply only the first control:
mu_r_cmd = U_star(1)
6. Store current optimal horizon:
U_prev = U_star
7. Shift horizon
8. Receive new state estimate
9. Repeat
符号表
| n,en,en,e | North / East 位置 | m |
| VVV | 空速 | m/s |
| VgV_gVg | 地速大小 | m/s |
| ξ\\xiξ | 相对于空气质量的航向 / 速度方向 | rad |
| χ\\chiχ | 地面航迹角 | rad |
| μ\\muμ | bank angle | rad |
| μr\\mu_rμr | bank-angle reference | rad |
| qμq_\\muqμ | μ˙\\dot{\\mu}μ˙ | rad/s |
| wn,wew_n,w_ewn,we | 水平风速分量 | m/s |
| ete_tet | 横向路径误差 | m |
| eχe_\\chieχ | ground-course error | rad |
| xswx_{\\mathrm{sw}}xsw | 路径切换辅助状态 | 无量纲 |
| NNN | prediction horizon 节点数 | — |
| Δt\\Delta tΔt | prediction grid interval | s |
| Q,R,P\\mathbf{Q},R,\\mathbf{P}Q,R,P | stage / input / terminal weights | — |
论文结论的严谨表述
该工作展示了一种面向小型固定翼 UAV 的高层横侧向 NMPC 架构。
其核心思想是使用简化二维运动学模型与闭环系统辨识得到的低阶滚转动态共同构成 control-augmented prediction model。
控制器同时显式考虑风估计、bank-angle reference 约束,以及 prediction horizon 内的 Dubins path switching。
仿真结果说明,在强风路径跟踪问题中,较长 prediction horizon 可以更早预测未来路径偏离,并提前采取控制动作。
实飞实验则验证了该 NMPC 在小型机载计算平台上的实时运行能力以及路径跟踪可行性。
需要注意的是,该论文没有为具体实现提供严格的闭环稳定性证明,同时也没有通过强风实飞证明 NMPC 全面优于传统的 L1L_1L1 guidance。
参考文献
[1] Kang Y, Hedrick J. Design of nonlinear model predictive controller for a small fixed-wing unmanned aerial vehicle[C]//AIAA Guidance, Navigation, and Control Conference and Exhibit. 2006: 6685.
[2] Kang Y, Hedrick J K. Linear tracking for a fixed-wing UAV using nonlinear model predictive control[J]. IEEE Transactions on Control Systems Technology, 2009, 17(5): 1202-1210.
[3] Rucco A, Aguiar A P, Pereira F L, et al. A predictive path-following approach for fixed-wing unmanned aerial vehicles in presence of wind disturbances[C]//Robot 2015: Second Iberian Robotics Conference: Advances in Robotics, Volume 1. Cham: Springer International Publishing, 2015: 623-634.
[4] Gavilan F, Vazquez R, Camacho E F. A High-level model predictive control guidance law for unmanned aerial vehicles[C]//2015 European Control Conference (ECC). IEEE, 2015: 1362-1369.




