简介这份资源面向具备自动控制理论与飞行力学基础的研究生、科研人员及工程技术人员聚焦固定翼飞机着陆阶段的动力学建模与最优控制策略设计帮助读者掌握下降轨迹、姿态角与速度等关键状态的精确控制方法实现安全平稳着陆。压缩包内共1个docx文件约81KB以文档形式系统呈现控制器设计流程涵盖系统建模、性能指标设定、控制律推导及仿真结果分析并配套Matlab代码实现与仿真验证便于读者对照复现LQR或MPC等最优控制算法。已有21人学习关注。通过研读该文档读者可理解着陆阶段数学模型的构建思路学习如何将最优控制理论落地为可运行的Matlab程序并通过调整参数观察系统响应变化深入体会扰动抑制与着陆精度提升的有效手段为无人机、民航客机等自动着陆系统的研究开发提供技术参考与实现范例。1. 固定翼飞机着陆为什么总在最后三米翻车固定翼飞机着陆最反直觉的一点是整个下滑轨迹飞得再漂亮最后三米的拉平段没处理好照样重着陆甚至擦尾。很多做飞控的同行把精力全砸在巡航段和航路规划上到了着陆段就丢一个 PID 上去结果仿真里看着能落一加风扰动就散架。基于最优控制的固定翼飞机着陆控制器设计本质上就是解决这个「末端精度」问题——把下滑道跟踪、拉平轨迹、接地姿态约束统一成一个带约束的最优控制问题用 Matlab 把求解和仿真闭环跑通。这套方案适合两类人一类是做飞控算法验证的学生和工程师手头有固定翼模型但着陆段一直调不好另一类是想从 PID 迁移到模型预测或 LQR 的从业者需要一个有明确物理约束、能直观看到效果的练手场景。着陆段的好处是边界条件清晰——初始高度、速度、下滑角给定末端接地垂直速度、俯仰角、下沉率都有硬指标最优控制在这里比在巡航段更容易体现价值。下面从建模、控制器设计到仿真排错把这条链路拆开讲。2. 纵向模型怎么搭从六自由度砍到可解的最优控制问题2.1 为什么着陆段只做纵向三自由度就够固定翼着陆的核心矛盾在纵向平面高度、速度、俯仰角、航迹角这几个量互相耦合横航向在着陆段主要靠小扰动修正对下滑精度影响是二阶的。所以工程上常见的做法是先把六自由度模型解耦纵向取高度 h、地速 V、航迹角 γ、俯仰角 θ、迎角 α 作为状态横航向单独用滚转和偏航阻尼器稳住。这样做的直接好处是状态维度从 12 降到 5 左右最优控制求解的规模可控Matlab 里用 fmincon 或者直接打靶法都能在秒级出解。模型方程用常见的质点加姿态近似% 固定翼纵向质点模型着陆段简化 function dxdt longitudinal_dynamics(t, x, u, p) % 状态: x [V; gamma; h; theta; q] V x(1); % 地速 (m/s) gamma x(2); % 航迹角 (rad) h x(3); % 高度 (m) theta x(4); % 俯仰角 (rad) q x(5); % 俯仰角速率 (rad/s) % 输入: u [T; delta_e] T u(1); % 推力 (N) delta_e u(2); % 升降舵偏角 (rad) alpha theta - gamma; % 迎角 rho 1.225 * exp(-h/8500); % 密度随高度衰减 Q 0.5 * rho * V^2 * p.S; % 动压 L Q * (p.CL0 p.CLa * alpha); D Q * (p.CD0 p.k * (p.CL0 p.CLa*alpha)^2); m p.mass; g 9.81; dV (T*cos(alpha) - D - m*g*sin(gamma)) / m; dgamma (T*sin(alpha) L - m*g*cos(gamma)) / (m*V); dh V * sin(gamma); dtheta q; dq (p.Cm0 p.Cma*alpha p.Cmq*q p.Cmde*delta_e) * Q * p.c / p.Iyy; dxdt [dV; dgamma; dh; dtheta; dq]; end这段代码里几个参数决定了模型能不能用p.CLa是升力线斜率一般取 4.5 到 5.5 每弧度p.Cmde是升降舵操纵效能符号决定舵面正偏是抬头还是低头这个符号搞反了整个控制器方向就全错。rho用指数大气近似着陆段高度低其实取常值 1.225 误差也不大但保留衰减方便你以后扩展到进近段。alpha theta - gamma这个关系是纵向小角度近似下的核心别写成 theta 加 gamma。2.2 状态量和控制量的边界怎么定最优控制能不能收敛八成取决于边界条件设得合不合理。着陆段的终端约束是硬指标接地垂直速度一般要求小于 0.5 到 1 m/s俯仰角在接地瞬间要接近配平值通常 3 到 8 度航迹角在拉平末端接近零。初始条件就是下滑道入口的状态高度 50 到 100 米航迹角负 3 度左右速度比失速速度高 1.3 倍。控制量约束同样关键。升降舵偏角物理上限一般正负 25 度推力在慢车到最大之间。这些约束不写进去求解器会给你一个数学上最优但舵面根本打不出来的解仿真一跑就露馅。变量物理含义典型范围备注h0下滑道入口高度50~100 m太低来不及拉平gamma0初始航迹角-3° ~ -4°对应标准下滑道V0初始速度1.3 VsVs 为失速速度hf接地高度0 m轮子触地gammaf接地航迹角-0.5° ~ 0°接近水平thetaf接地俯仰角3° ~ 8°防擦尾delta_e升降舵偏角±25°硬约束T推力0.1~1.0 Tmax慢车到最大提示终端航迹角不要设成严格零留一点负值比如 -0.3 度更符合实际飞机是「沉」下去的不是平飘接地。3. 最优控制怎么落地从代价函数到 Matlab 求解3.1 代价函数里每一项在惩罚什么最优控制的灵魂在代价函数。着陆段我一般写成终端代价加过程代价的形式终端项惩罚接地时的垂直速度和俯仰角偏差过程项惩罚下滑道跟踪误差和控制量变化率。写成数学形式就是 J 终端误差加权 积分跟踪误差平方 控制增量平方。% 代价函数终端精度 过程平滑 function J cost_function(U, p) % U 是控制序列 [T; delta_e] 按时间展开 [t, x] simulate(U, p); % 前向仿真得到状态轨迹 xf x(end, :); % 终端状态 % 终端代价垂直速度、俯仰角、航迹角 Vf xf(1); gammaf xf(2); thetaf xf(4); hf xf(3); J_terminal p.w_gamma * (gammaf - p.gamma_ref)^2 ... p.w_theta * (thetaf - p.theta_ref)^2 ... p.w_h * (hf)^2; % 过程代价下滑道偏差 控制增量 h_ref p.h0 p.slope * t; % 参考下滑道 e_h x(:,3) - h_ref; dU diff(U); J_path p.w_eh * trapz(t, e_h.^2) p.w_du * sum(dU.^2); J J_terminal J_path; end权重p.w_gamma、p.w_theta、p.w_h的配比是调参重点。终端项权重给太小接地精度不够给太大求解器为了压终端误差会在末端猛打舵控制量抖得厉害。我的经验是终端权重比过程权重大一到两个数量级先保证落得准再回头压平滑度。p.w_du惩罚控制增量是抑制舵面抖动的关键这个值给 0.01 到 0.1 之间比较合适具体看你的舵机带宽。3.2 用 fmincon 求解控制序列的完整流程Matlab 里做这类轨迹优化最省事的是把控制序列参数化然后丢给 fmincon 做约束优化。控制量按时间离散成 N 段每段取常值N 一般取 20 到 50太少精度不够太多求解慢且容易陷入局部极小。% 主求解脚本参数化控制 fmincon clear; clc; p init_params(); % 初始化气动、质量、约束参数 N 30; % 控制段数 T_total 15; % 着陆段总时长 (s) % 初始猜测推力保持慢车升降舵小幅负偏 U0 [0.2*ones(1,N); -0.05*ones(1,N)]; U0 U0(:); % 展平成列向量 % 边界约束 lb [0.1*ones(1,N); -25*pi/180*ones(1,N)]; lb lb(:); ub [1.0*ones(1,N); 25*pi/180*ones(1,N)]; ub ub(:); % 调用 fmincon options optimoptions(fmincon, Algorithm, sqp, ... MaxIterations, 200, Display, iter, ... OptimalityTolerance, 1e-4); [U_opt, J_opt] fmincon((U) cost_function(U, p), U0, ... [], [], [], [], lb, ub, [], options); % 用最优控制序列做一次完整仿真 [t, x] simulate(U_opt, p); plot_results(t, x, U_opt, p);Algorithm选sqp是因为这个问题带边界约束且目标函数非线性SQP 比内点法在这种中小规模问题上更稳。MaxIterations给 200 一般够用如果跑到上限还没收敛先检查初始猜测是不是离可行域太远。simulate函数内部用 ode45 积分步长自适应但要注意控制量是分段常值积分时要按段切换。3.3 仿真结果怎么读三条曲线定生死跑完仿真别急着看三维动画先看三条曲线高度跟踪曲线、速度曲线、俯仰角曲线。高度曲线要贴着参考下滑道走末端平滑收敛到零速度曲线应该缓慢下降接地时接近参考速度俯仰角曲线在拉平段要有一个明显的抬头过程但抬头速率不能太猛。如果高度曲线在末端出现「下扎」说明终端航迹角约束没起作用或者拉平段推力给太小。如果俯仰角在接地前剧烈振荡多半是p.w_du太小控制增量没被压住。速度曲线如果接地时比参考速度高很多检查推力下限是不是设太高了慢车推力在拉平段应该能降到很低。4. 避坑与排查着陆控制器调不出来的五个血泪经验4.1 求解器报「未找到可行解」先查这三处现象fmincon 跑几轮就退出提示无可行解或者直接返回初始猜测。原因通常有三个一是终端约束互相矛盾比如要求接地航迹角严格为零同时俯仰角又很大物理上做不到二是控制量边界设得太窄升降舵只给正负 5 度根本拉不平三是初始猜测太离谱比如推力全给最大仿真一开始就发散。解决办法是先放宽约束跑一版确认模型能落再逐步收紧到目标值。4.2 舵面抖成锯齿控制增量权重和离散段数的锅现象最优解里升降舵一段正一段负画出来像锯齿。原因是控制段数 N 给太大而p.w_du又太小求解器钻空子用高频抖动的控制量去凑终端精度。解决方法是把 N 降到 20 左右同时把p.w_du提高一个数量级。另一个隐蔽原因是 ode45 积分容差太松状态轨迹本身有数值噪声代价函数算出来不准求解器就在噪声上做优化。把RelTol设到 1e-6 能缓解。4.3 仿真能落但一加风就散模型里少了扰动项现象无风仿真完美接地加个 5 米每秒的常值风接地垂直速度直接超标。原因是你的模型是确定性的控制器也是按确定性模型设计的没有鲁棒性。常见做法是在仿真里加 Dryden 风模型或者至少加常值加阵风然后要么在代价函数里加鲁棒项要么用滚动时域的方式每个时间步重解一次。后者计算量大但效果好Matlab 里做滚动优化就是把总时长切成小段每段用当前状态做初值重解。4.4 接地垂直速度达标但擦尾俯仰角约束漏了现象垂直速度压到 0.3 米每秒看着很漂亮但接地俯仰角到了 12 度实际飞机尾椎已经蹭地了。原因是代价函数里只惩罚了垂直速度没把俯仰角上限写进去。解决方法是把俯仰角作为硬约束加进 fmincon 的非线性约束里或者在代价函数里对超过阈值的俯仰角加大惩罚。别指望终端项自动帮你压住终端项是软约束压不住的。4.5 换一组气动参数就崩没有做参数敏感性检查现象同一套控制器升力线斜率从 5.0 改成 4.5接地精度就崩了。原因是你的权重是针对一组参数调出来的换参数后代价函数的最优解位置变了。工程上的做法是做完标称设计后扫一遍关键气动参数CLa、Cmde、CD0的正负 20%看接地指标的变化范围。如果变化超过可接受阈值要么加鲁棒项要么把控制器改成对参数不敏感的结构比如在终端代价里加入对参数不确定性的期望。5. 进阶技巧把开环最优解变成能上机的反馈控制器前面求解出来的是一组开环控制序列严格说它只在标称条件下最优。真上机或者做高保真仿真你需要的是反馈。最实用的过渡方法有两种一种是滚动时域每个控制周期用当前状态重解一次有限时域最优控制取第一段控制量执行另一种是把最优轨迹当作参考设计一个 LQR 或者 PID 跟踪这条轨迹。滚动时域的实现要点是时域长度要覆盖拉平段一般取 5 到 8 秒太短了看不到终端约束太长了计算负担重。Matlab 里可以预编译代价函数用coder或者把 ode45 换成固定步长 RK4能把单次求解压到几十毫秒勉强够实时。% 滚动时域每个周期重解取第一段控制 dt_ctrl 0.1; % 控制周期 100ms t_now 0; x_now x0; while t_now T_total x_now(3) 0 % 以当前状态为初值重解剩余时域 p.h0 x_now(3); p.V0 x_now(1); [U_seg, ~] fmincon((U) cost_function(U, p), U0, ... [], [], [], [], lb, ub, [], options); u_apply U_seg(1:2); % 取第一段 % 用真实模型推进一步 [~, x_step] ode45((t,x) longitudinal_dynamics(t, x, u_apply, p), ... [0 dt_ctrl], x_now); x_now x_step(end, :); t_now t_now dt_ctrl; U0 [U_seg(3:end); U_seg(end-1:end)]; % 热启动下一轮 end这段代码里U0的热启动很关键用上一轮解的后半段作为下一轮初值能大幅减少迭代次数。dt_ctrl取 0.1 秒是舵机和计算负载的折中再快意义不大再慢跟踪精度下降。验证反馈控制器好不好别只看一条轨迹。我一般会跑蒙特卡洛初始高度、速度、航迹角各加正负 10% 的随机扰动风加常值加阵风跑 100 次统计接地垂直速度和俯仰角的分布。如果 95% 的样本都落在指标内这套控制器才算能拿去上机。这个习惯帮我省过很多次返工——开环最优解看着漂亮一散布就原形毕露。最后说个我自己的教训早期做着陆控制器我总想把终端精度压到极致垂直速度非要压到 0.1 米每秒结果控制量抖得没法看舵机根本跟不上。后来想明白了着陆指标是「够用就好」0.5 米每秒的接地垂直速度对大多数固定翼来说完全可接受把省下来的控制裕度用在抗扰上更划算。希望帮到你。本文还有配套的精品资源点击获取