资讯动态

四旋翼横向动力学鲁棒控制:H∞混合灵敏度与MATLAB实现

发布时间:2026/10/21 19:10:16 来源:尧图企业网站定制
前阵子帮人调一台四旋翼的定高巡航逻辑遇到一个挺有意思的现象GPS、气压计、IMU融合之后位置环看着已经稳了可一阵横风过来横滚角被吹出接近8度的偏差恢复还特别慢自己折腾了好几轮PID要么压不住扰动要么一加增益电机声音就开始发颤。那段时间正好在整理多旋翼横向动力学的鲁棒控制顺手把这个项目系统重做了一遍并配套了一套完整可跑的MATLAB代码。这篇文章就围绕这个项目展开先说清楚横向动力学为什么是四旋翼控制里最挠头的一环然后从牛顿-欧拉方程推导出可线性化的状态空间模型再解释鲁棒控制尤其是H∞混合灵敏度在这类场景下的适用逻辑最后给出从模型搭建、控制器综合到Simulink闭环仿真的完整MATLAB实现思路。适合正在做飞控相关毕设、准备把鲁棒控制方法落到多旋翼仿真上的同学也适合那些已经能用PID飞稳、但想进一步处理参数摄动和外部扰动的工程朋友。1. 横向动力学这根“硬骨头”到底硬在哪1.1 侧风下的横滚振荡一次实际飞行引发的调参困境那次飞行场景很简单四旋翼在约15米高度做定高定点悬停风速大概4到5米每秒阵风一来飞机开始横滚往复摆动。位置环能够把水平位移拉回来但横滚角在正负6度左右来回晃偏航也在跟着小幅漂移。我一开始以为是姿态环PID参数太软将P增益往上加了近一倍横滚角响应确实变快了但高频抖动明显加大IMU的加速度计数据里混进了大量姿态噪声电机声也变得粗糙。把P降回去之后又切回原来的“扰动压不住”状态。这个现象本质上不是PID能否解决的问题而是控制器设计时根本没有把“横向通道”单独拿出来分析。多旋翼飞行时前向飞行、侧向平移、偏航转弯这三者在气动耦合和时间尺度上是完全不同的。侧向通道里横滚角与侧向速度形成的是一种级联关系外环位置或者速度想把飞机拉回来靠的是内环倾斜机身产生水平推力分量。只要这个级联关系里的执行器带宽、姿态响应带宽和位置外环带宽没有拉开距离阵风激励下就很容易出现“外环还没反应、内环已经在抖”的窘境。1.2 欠驱动、姿态–平动耦合与非最小相位特性多旋翼一共四个螺旋桨只能提供垂直于机体的总推力和三个轴的力矩没有任何直接产生水平推力的机构。这意味着你要让飞机向右移动唯一办法是先让机体向右倾斜让升力在水平方向产生一个分量。这个“先倾斜、后平移”的过程决定了横向通道是典型的欠驱动系统状态数量远多于控制输入数量无法把每个状态都独立配置到理想响应。更麻烦的是这个级联结构还带有一点点“非最小相位”的味道。什么叫非最小相位简单说就是系统响应一开始会朝目标相反的方向走一点点。具体到侧向通道当你下达“向右移动”的指令时飞机会先把右侧倾斜一点点而倾斜的瞬间重心在水平方向上其实先产生了向左的加速度分量然后随着倾角稳定才开始向右加速。这个“先反后正”的动态在传递函数里对应右半平面零点是任何线性控制器都无法完全消除的。鲁棒控制处理这类对象时不会像教科书里理想化地要求“完美跟踪”而是通过闭环整形在性能指标和稳定性之间找一个折中。1.3 无法完全建模的不确定性这才是鲁棒控制存在的理由除了结构上的欠驱动横向通道的模型不确定性也远高于纵向。主要表现在几个方面重心位置与几何中心不重合电池稍微前移或侧移横滚和偏航的转动惯量就会变化。螺旋桨的拉力系数和阻力系数随电压、转速、温度发生变化姿态通道的等效阻尼和恢复力矩并非固定常数。阵风是空间分布且带有涡流结构的用简单常值风建模只能模拟“偏置”没法模拟真正的湍流扰动。机架弹性带来的结构模态、桨叶挥舞等高频动态在控制器带宽附近会引入未建模谐振。如果你在一个标称模型上设计LQR或者极点配置通常能获得很好的理想响应可一旦参数摄动超过百分之二三十性能就会明显退化甚至失稳。鲁棒控制的核心思路不是在某个工作点上把性能做到最优而是在一个“不确定集合”范围内保证稳定性和可接受的性能。这点在风场复杂、载荷常变的无人机场景里比单纯追求超调小、响应快更有工程意义。2. 从牛顿–欧拉方程到可交给MATLAB的状态空间模型2.1 小扰动线性化的思路与所作假设多旋翼的完整刚体动力学是典型的非线性方程包含欧拉角速率耦合、陀螺力矩、气动阻力等。处理这类对象第一步不是直接上非线性控制器而是先在悬停平衡点做小扰动线性化。这样做有两个好处一是线性系统可以直接套用频域设计方法二是后续分析稳定裕度、灵敏度等都有成熟的工具箱支撑。建模时我做了以下简化悬停状态下总推力约等于重力机体角速度很小欧拉角采用小角度假设即 sinφ≈φ、cosφ≈1忽略横滚-俯仰之间的强耦合重点研究横向通道横滚角、偏航角、侧向速度螺旋桨动态用一阶惯性环节近似或者直接认为内环力矩指令能够快速复现侧向力主要来自重力分量气动侧力仅在速度较大时加入线性阻尼项。基于这些假设横向通道的状态方程可以写成[ \begin{aligned} \dot{p} l_p p l_{\phi} \phi l_r r b_1 u_{\text{roll}} \ \dot{\phi} p \ \dot{r} n_p p n_{\phi} \phi n_r r b_2 u_{\text{yaw}} \ \dot{\psi} r \ \dot{v} g \phi X_v v \end{aligned} ]其中 (p) 是横滚角速率(\phi) 是横滚角(r) 是偏航角速率(\psi) 是偏航角(v) 是机体侧向速度。(u_{\text{roll}}) 和 (u_{\text{yaw}}) 分别是滚转和偏航的归一化力矩指令。(l_p)、(l_{\phi}) 等是包含惯量归一化后的气动/刚体导数。2.2 状态量、控制量、输出量的选择逻辑选这五个状态量是考虑了可测量性和控制任务的对应关系。实际飞控中横滚角 (\phi) 和偏航角 (\psi) 可以直接由姿态估计得到横滚角速率 (p) 和偏航角速率 (r) 由陀螺直接测量侧向速度 (v) 可以由位置微分或者视觉光流估算。输出量选择 (\phi)、(\psi)、(v) 而不是角速率是因为外环控制指令通常是“保持姿态”或“保持侧向速度”姿态环接收的角度指令速度环接收的是速度反馈。控制量选择力矩指令而不是直接给PWM占空比是为了和底层混控器解耦。LTI控制器输出的是期望力矩增量经过混控矩阵分配到四个电机底层再由电调去跟踪转速。这样控制器设计不依赖具体电机型号换一套动力系统只需更新混控参数。2.3 一组可用的参数与状态矩阵示例为了在MATLAB里跑通流程我用到一组示意参数不是某台真实机型的精确辨识结果但量级参考了一台约1.5千克的四旋翼[ m 1.5,\ I_{xx} 0.02,\ I_{zz} 0.03,\ g9.81 ]姿态导数取[ l_p -8.5,\ l_{\phi} -15,\ l_r 0.5 \ n_p 2.0,\ n_{\phi} -4,\ n_r -6 \ X_v -0.6 ]于是状态矩阵为[ A \begin{bmatrix} -8.5 -15 0.5 0 0 \ 1 0 0 0 0 \ 2 -4 -6 0 0 \ 0 0 1 0 0 \ 0 9.81 0 0 -0.6 \end{bmatrix} ]输入矩阵[ B \begin{bmatrix} 50 0 \ 0 0 \ 0 33.33 \ 0 0 \ 0 0 \end{bmatrix} ]输出矩阵[ C \begin{bmatrix} 0 1 0 0 0 \ 0 0 0 1 0 \ 0 0 0 0 1 \end{bmatrix},\quad D 0_{3\times2} ]这里 (1/I_{xx}50)、(1/I_{zz}\approx33.33) 已经直接体现为输入增益。看到 (-15) 这个恢复力矩导数你可以估算姿态内环的自然频率大约在 (\sqrt{15}\approx3.9 \text{rad/s}) 附近这个带宽对悬停场景是够用的。写代码时这些参数全部放在脚本开头方便替换成自己飞行器的辨识结果。2.4 模型参数误差从哪来每次搭建仿真模型我都会提醒自己这组“标称参数”只是真机在工作点附近的近似。转动惯量可能是用三维模型算出来的电机推力系数是静态测试得到的阻尼导数是风吹出来的拟合值。在MATLAB里跑设计时模型是什么样不代表真机就是什么样。鲁棒控制器设计的价值恰恰体现在你把这组参数故意拉偏20%、30%之后闭环系统还能不能保持稳定、性能是否仍在可接受范围内。所以在后文的仿真设计中参数摄动测试与阵风扰动测试是同等重要的部分。3. 控制器选型为什么H∞混合灵敏度方案更适合作为基线3.1 先把鲁棒控制的问题定义说清楚开始设计前先明确要对付哪些信号。横向通道的外部信号主要有三类参考输入姿态稳定任务中通常为0也就是希望 (\phi \to 0)、(\psi \to 0)扰动输入侧向阵风等效到 (v) 方程的加速度扰动以及作用在姿态环上的力矩脉动测量噪声陀螺和姿态估计器的高频噪声。真正的鲁棒设计不只是让某个扰动下输出变小而是让闭环系统对“模型偏差”也保持稳定。工程上把模型偏差描述为标称对象 (G_0(s)) 附近的集合比如乘法摄动[ G(s) G_0(s)\left(1 \Delta(s) W_T(s)\right),\quad |\Delta|_\infty \le 1 ]其中 (W_T(s)) 用来刻画不确定性随频率变化的幅度。高频段模型误差通常更大所以 (W_T) 在高频处增益更高。3.2 混合灵敏度框架下三个权重函数的含义H∞混合灵敏度是一种比较直观的鲁棒控制器设计框架。它把设计目标分成三路加权输出(W_S) 对灵敏度函数 (S (I GK)^{-1}) 加权低频段增益越大对低频扰动和参考跟踪的抑制越强(W_T) 对补灵敏度函数 (T GK(I GK)^{-1}) 加权高频段约束越强对未建模动态的容忍度越高(W_U) 对控制量 (u) 加权限制控制器输出能量避免执行器饱和和高频抖动。设计目标就是找控制器 (K(s))使从外输入到三路加权输出的H∞范数小于给定指标 (\gamma)。工程上常说“S小表示性能好T小表示鲁棒性好”这两个函数之间存在 (STI) 的互补关系所以不可能同时做到处处很小必须用权重函数在频率上做取舍。我的经验是(W_S) 的低频增益可以按期望的扰动抑制倍数去选比如要抑制到1%那就取100附近(W_T) 的转折频率要放在控制器带宽附近带宽之内是性能区间带宽之外是鲁棒区间。这样的频率整形比单纯调PID的“比例-积分-微分增益”要更系统。3.3 H∞、μ综合、滑模与LQR的横向比较在做选型时我把几种常见方法放一起对比表格如下方法模型不确定性的处理方式设计复杂度工程落地难度适合场景LQR/极点配置按标称模型设计鲁棒性依赖余量低低模型准确、扰动小的验证平台H∞混合灵敏度用S/T加权界定性能与鲁棒区间中中有频域经验、需要明确稳定裕度指标的工程对象μ综合显式处理结构不确定性可降低保守性高较高多源参数摄动、强耦合对象滑模变结构对匹配扰动具有天然鲁棒性中中外部扰动为主、符号抖动需额外处理对于多旋翼横向通道我最终选择了H∞混合灵敏度作为基线方案。原因有三第一横向通道的摄动主要体现为增益变化和未建模高频谐振用乘法不确定性 (W_T) 覆盖已经够用不需要立刻上μ综合的高复杂度第二H∞设计能够自然产生一个可解释的频域结果方便后续通过灵敏度峰值判断稳定裕度第三MATLAB的鲁棒控制工具箱对标准H∞综合支持成熟一个hinfsyn调用就能完成控制器求解迭代成本低。3.4 为什么我选择H∞作为基线方案在这些方法里选H∞还有一个很实际的理由后续如果要扩展到更复杂的场景比如控制器需要同时处理俯仰与横滚的耦合或者把旋翼的延时环节加进模型H∞设计只需要在权重函数或被控对象里加入相应环节整体框架不用推翻。反观LQR一旦模型结构变化加权矩阵 (Q)、(R) 的整定逻辑就得推倒重来。滑模控制在对抗“已知上界的扰动”上确实干脆但抖振问题在仿真和实机上都需要额外处理作为第一版验证方案不够直接。当然这不是说H∞万能。如果横向通道里存在多个独立的参数摄动比如 (I_{xx}) 和 (I_{zz}) 同时变化且相互独立用μ综合能够得到更不保守的结果。但在项目起步阶段先跑通一个保守但可靠的H∞控制器再用μ综合去做精细化是比较稳妥的路线。4. MATLAB实现把控制器从论文变成可跑的程序4.1 第一步搭好被控对象状态空间模型新建一个脚本multirotor_lateral_robust.m。首先是参数区把前面那组数据和状态矩阵填进去%% 多旋翼横向动力学鲁棒控制器设计 % 状态: x [p; phi; r; psi; v] % 输入: u [u_roll; u_yaw] (归一化力矩指令) % 输出: y [phi; psi; v] clearvars; close all; clc; %% 1. 平台参数 m 1.5; % kg Ixx 0.02; % kg*m^2 Izz 0.03; % kg*m^2 g 9.81; % m/s^2 %% 2. 横向导数(量级参考) l_p -8.5; l_phi -15; l_r 0.5; n_p 2.0; n_phi -4; n_r -6.0; X_v -0.6; %% 3. 状态矩阵 A [ l_p l_phi l_r 0 0; 1 0 0 0 0; n_p n_phi n_r 0 0; 0 0 1 0 0; 0 g 0 0 X_v]; B [ 1/Ixx 0; 0 0; 0 1/Izz; 0 0; 0 0]; C [ 0 1 0 0 0; 0 0 0 1 0; 0 0 0 0 1]; D zeros(3, 2); G0 ss(A, B, C, D);先不要急着设计控制器先检查一下对象的基本属性%% 4. 基本检查 fprintf(A矩阵特征值:\n); disp(eig(A)); fprintf(能控性矩阵秩: %d\n, rank(ctrb(A, B))); fprintf(能观性矩阵秩: %d\n, rank(obsv(A, C)));我拿这组参数跑过A矩阵特征值都在左半平面存在一个接近原点的极点对应侧向速度的慢收敛模式。能控和能观矩阵都是满秩说明用这几个测量量能够设计状态反馈意义上的稳定控制器。4.2 第二步配置权重函数并调用hinfsyn权重函数用makeweight(low, mid, high)构造一阶加权然后扩展成对角矩阵%% 5. 加权函数 % Ws: 低频高增益抑制扰动转折频率约4 rad/s Ws makeweight(200, 4, 1.2); WS blkdiag(Ws, Ws, Ws); % 三个输出通道: phi, psi, v % Wu: 限制控制量转折频率80 rad/s Wu makeweight(1, 80, 6); WU blkdiag(Wu, Wu); % 两个控制输入 % Wt: 高频未建模动态约束 Wt makeweight(0.3, 30, 3); WT blkdiag(Wt, Wt, Wt); %% 6. 增广被控对象 P augw(G0, WS, WU, WT); %% 7. Hinfty控制器综合 nmeas size(C, 1); % 测量输出数3 ncont size(B, 2); % 控制输入数2 [K, CL, gamma] hinfsyn(P, nmeas, ncont); fprintf(H∞设计gamma值: %.4f\n, gamma); %% 8. 保存控制器供Simulink使用 save(lateral_robust_results.mat, G0, K, gamma);augw会把加权函数自动组装成标准H∞增广结构hinfsyn求解得到一个满足性能指标的控制器。gamma 在1左右说明加权设定和对象能力匹配得比较好如果gamma远大于1说明性能指标定得太高需要放松 (W_S) 或 (W_U)如果gamma远小于1说明还可以把性能要求提高。这里的权重参数不是一次定死的。我第一次跑的时候 (W_S) 低频增益取到1000gamma直接爆到4控制器算出来高频增益特别大Simulink里一跑控制量疯狂抖动。后来把低频增益降到200、(W_U) 的转折频率从60升到80gamma才回落到1.2左右。4.3 第三步在Simulink里搭闭环验证回路MATLAB脚本算出来的K是一个状态空间控制器对象把它导入Simulink推荐用“LTI System”模块。整体模型可以这样组织参考输入两个常数0分别接到横滚角、偏航角的指令端控制器 (K)三入phi、psi、v、两出u_roll、u_yaw被控对象 (G0)一个状态空间模块或者用带参数摄动的 (G_{\text{mod}});扰动注入在侧向速度通道输入端加一个阶跃/白噪声扰动信号示波器记录横滚角、偏航角、侧向速度和两个控制量。先跑一个最简单的开环/闭环对比。设置仿真时间20秒在5秒时给 (v) 通道一个幅值2的侧风加速度阶跃。闭环结果大致应该是横滚角先反向偏一下然后回到0附近侧向速度先偏离再被拉回控制量在扰动瞬间有一个明显尖峰但随后收敛。需要特别注意的是Simulink里的状态空间模块要设置好初值尤其 (v) 和 (\phi) 的初值要与脚本里的设定一致否则前几秒会有一条奇怪的瞬态过程。4.4 第四步设计扰动与参数摄动工况只看一组标称仿真不够至少要加三类测试阶跃阵风工况在5秒时加入阶跃扰动看恢复时间和最大偏差正弦扫频工况用chirp信号从0.1Hz扫到2Hz观察闭环对特定频段的放大情况参数摄动工况把 (I_{xx}) 增大30%重新生成 (A)、(B) 矩阵组成摄动后对象 (G_{\text{mod}})再接到同一个控制器 (K) 下面判断是否稳定。参数摄动工况可以在MATLAB脚本里生成多个工作区变量也可以在Simulink里通过Rapid Acceleration模式批量跑。我通常的做法是写一个for循环在sim命令里循环切换不同的被控对象变量这样能快速看到鲁棒性能随摄动量的变化趋势。%% 批量参数摄动测试 perturb_list [0.8 1.0 1.2 1.4]; % 转动惯量倍率 for k 1:length(perturb_list) Ixx_mod Ixx * perturb_list(k); A_mod A; A_mod(1,1) l_p * Ixx / Ixx_mod; % 阻尼-惯量耦合简化 B_mod B; B_mod(1,1) 1 / Ixx_mod; G_mod ss(A_mod, B_mod, C, D); assignin(base, G_mod, G_mod); sim(lateral_robust_sim, 20); % Simulink模型名按实际调整 % 这里把响应最大偏差记录下来 end上面的代码里 (l_p \cdot Ixx / Ixx_mod) 是一种简化处理实际辨识数据中阻尼导数随惯量变化的耦合会更复杂。重点是演示这个流程控制器不变对象参数变化观察闭环是否仍然稳定。5. 仿真结果怎么看权重函数怎么调5.1 时域响应的验收标准仿真跑完后我习惯先盯几个量化指标而不是只看曲线好不好看阶跃阵风下横滚角最大偏差。一般希望小于3度对应0.05弧度左右侧向速度恢复到0.1m/s以内的时间。悬停场景下这个时间通常在3到6秒之间控制量瞬时峰值。峰值不得触发执行器饱和电机PWM留出至少20%顶格余量是否存在持续振荡。如果控制量或姿态信号在扰动后出现等幅振荡说明鲁棒性边界处有问题。有一次我把 (W_S) 低频增益调到500阶跃扰动下最大偏差确实从2.8度降到了1.7度但控制量峰值涨了两倍多而且在扰动后出现了频率10Hz左右的衰减振荡。这说明性能提升是以牺牲稳定裕度为代价的。后来用灵敏度函数一查发现 (S) 的峰值已经接近3.5dB离4dB的经验底线很近了。5.2 从灵敏度与补灵敏度函数看稳定裕度H∞控制器的优势之一是控制器本身就是围绕S和T整形求解的所以仿真后提取灵敏度函数很自然%% 计算并绘制灵敏度函数 L_GK G0 * K; % 开环传递函数 S feedback(eye(3), L_GK, -1); % 灵敏度函数 T eye(3) - S; % 补灵敏度函数 sigma(S, {0.01, 100}); grid on;这里eye(3)是因为回路有三路输出feedback对应的负反馈结构要和Simulink一致。看幅频曲线时两个关键点(S) 的低频增益应远小于1数值上大概对应扰动抑制比比如-40dB意味着扰动被衰减到1/100(S) 的峰值不宜超过4dB这个峰值与系统的幅值裕度和相位裕度直接相关。峰值越小说明闭环对模型摄动的容忍度越大。如果峰值偏高不要直接加陷波器去压那个尖峰更合理的做法是把 (W_T) 的转折频率往左移一点让高频段的补灵敏度约束更强等于把不确定性的覆盖范围扩大。5.3 常见调参误区与修正经验权重函数不是越多越好也不是增益越大越好。我踩过的坑大概可以整理成三类第一类(W_S) 低频增益无限加大。结果通常是从时域看稳态误差确实小了但控制器在低频段的增益被抬高容易被测量噪声里的低频漂移驱动产生缓慢的输出偏移。修正方法是在 (W_S) 里串联一个零点限制让低频增益保持在合理值比如100到300之间。第二类(W_T) 高频增益定得太高。高频段约束太强会让控制器在高频处大幅衰减等于主动放弃了对抗高频扰动的能力最终闭环响应变得很钝。修正方法是给 (W_T) 留出合理上限一般取5到10就够了重点是保证在对象谐振峰频率附近有足够的衰减。第三类(W_U) 的转折频率与执行器带宽不匹配。如果 (W_U) 转折频率远高于电机电调闭环带宽控制器会生成大量控制器来不及执行的指令实际效果等同于白白浪费控制能量如果远低于带宽则会人为限制系统响应速度。我一般把 (W_U) 的转折频率放在执行器闭环带宽的1.5倍附近比如电调响应80rad/s就放在80到120rad/s之间。5.4 核心结论鲁棒性提升不是靠“压掉峰值”而是靠频率整形反复调了几轮权重之后我最大的感受是H∞设计给了你一套在频域上“谈判”的工具。你想压低阵风带来的低频扰动就要在低频段给 (W_S) 更多权重你想让参数摄动20%后仍然稳定就要在高频段给 (W_T) 足够覆盖。这两个诉求往中间挤压的平衡点就是最终gamma值和控制器复杂度的来源。实际项目中完全可以把调节权重函数的过程当成是在做一次有物理意义的频率域调试。经过这样的调试横向通道的阶跃阵风最大偏差从最初PID方案的6度以上降到了3度以内控制量峰值没有触发饱和模拟电池位置偏移导致 (I_{xx}) 变化30%后闭环依然稳定这是LQR加固定参数方案很难做到的。6. 从MATLAB到实飞前还要补哪些课6.1 执行器延迟与混控器分配H∞控制器在仿真里表现很好之后离真机还有一段路。最明显的差距在执行器环节仿真里我把力矩指令直接加到状态方程上默认是瞬时的真机上电机、电调、螺旋桨都有响应延迟和转速饱和。建议在闭环仿真里串联一个一阶执行器模型[ \dot{u} -\frac{1}{\tau} u \frac{1}{\tau} u_c ]取 (\tau0.02) 到0.05秒看看控制效果还剩下多少。如果性能退化明显就要在H∞设计阶段把执行器动态纳入被控对象或者通过 (W_U) 对控制带宽进行更严格的约束。另外控制器输出的 (u_{\text{roll}})、(u_{\text{yaw}}) 是归一化力矩指令要通过混控矩阵转换为四个电机的转速增量。混控矩阵通常写为[ \begin{bmatrix} T_1 \ T_2 \ T_3 \ T_4 \end{bmatrix} M \begin{bmatrix} T_{\text{total}} \ u_{\text{roll}} \ u_{\text{pitch}} \ u_{\text{yaw}} \end{bmatrix} ]这里 (T_{\text{total}}) 对应悬停所需的总额外推力(u_{\text{roll}}) 对应横滚力矩(u_{\text{yaw}}) 对应偏航力矩。实际飞行中要确保H∞控制器输出的力矩指令在混控矩阵的伪逆解空间内否则饱和后的非线性会让鲁棒性分析全部失效。6.2 测量噪声、积分饱和与切换保护H∞控制器是动态状态反馈它本身包含积分或者接近积分的动力学。在真机上状态估计器的延迟和噪声会让这部分状态产生漂移所以需要额外的抗饱和措施。我在仿真模型中一般会做两件事一是给测量输出加高斯白噪声带宽和陀螺/姿态估计器的实际噪声水平一致看控制量抖动是否在可接受范围内 二是给控制量接入饱和模块同时在控制器状态更新里加入条件积分反算。具体做法是在Simulink里把饱和后的实际执行信号反馈回控制器的输入形成“条件积分”结构避免控制器状态因为长时间饱和而持续积分。6.3 我的一点后续扩展思路这个横向动力学鲁棒控制项目做完之后我尝试把它往两个方向上扩展。第一个方向是把俯仰通道也纳入同一个H∞框架形成完整的3轴姿态鲁棒控制器代价是被控对象从5阶变成7阶权重函数要做成块对角结构。第二个方向是将H∞控制器作为内环外层叠加位置/速度控制环形成“鲁棒姿态内环简单外环”的层级结构。这个结构和常见飞控的“角速度环-姿态环-位置环”思路类似只是内环参数通过鲁棒综合得到外环依然可以用PID减少了整体调参工作量。如果你手头正好有一台多旋翼也有飞行数据建议把你自己的辨识参数替换掉本文中的示例数值重新跑一遍流程。我最初把这套方案从前到后跑通大概花了一个周末其中一半时间都耗在权重函数初值的选择上。但只要搞明白 (W_S)、(W_U)、(W_T) 分别管哪个频段后面再换平台、换参数整个设计流程二十分钟就能完成。这是我做这个项目最值的一笔时间投入。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑