4. 实时模型的核心约束
飞行动力学实时模型与离线仿真模型最本质的区别,不在于方程形式,而在于“时间”本身成为被约束的资源。离线仿真可以为了精度把步长压到 1 ms 甚至更小,让仿真跑得比真实时间慢几十倍也无所谓;实时模型则必须在每个采样周期内完成“读输入—解算—写输出”的完整闭环,并且保证输出在下一个周期到来之前已经就绪。一旦错过截止时间,模型输出的就不再是“稍慢一点的正确结果”,而是与真实飞行状态脱节的错误激励,可能直接导致飞控闭环失稳。
实时性的三层含义
工程上谈“实时”,通常要区分三个层次。第一是逻辑正确性:模型在每个周期算出的值符合动力学方程。第二是时间正确性:计算结果必须在规定的截止时间内交付,早到和晚到都可能有问题——例如某些总线接口要求数据在固定时隙发送。第三是时间确定性:最坏情况执行时间(WCET)必须可预测且有上界,不能出现“大多数周期 200 μs、偶尔跳到 3 ms”的抖动。对于飞控在环(HIL)或机载实时模型,第三层往往比前两层更难满足,也是区分“能跑”和“能用于验证”的关键。
采样率与步长的选择
采样率与积分步长是两个相关但不同的概念。采样率决定模型与外部(传感器、作动器、总线)交换数据的频率;积分步长决定内部状态推进的离散步长。二者可以相同,也可以让内部以更小步长做子步积分。选择的基本依据是系统带宽:经验上采样频率应不低于模型关注最高动态频率的 5~10 倍。以某型电动垂直起降飞行器为例,其短周期模态频率约 1.5 Hz,作动器带宽约 8 Hz,若关注到 10 Hz 的动态,则采样率至少取 50~100 Hz;而旋翼转速相关的谐波可能到 30 Hz 以上,若模型需要复现这些成分,采样率就要相应提高到 300 Hz 以上。
步长选择还要考虑积分器稳定性。以显式欧拉法为例,对时间常数 τ 的一阶系统,稳定条件约为 Δt < 2τ。若某气动导数对应的时间常数是 0.02 s,则步长需小于 0.04 s;但为了精度,通常取 τ/10 量级,即 2 ms 左右。实际工程中常用 1 ms 或 2 ms 作为基础步长,再根据 CPU 余量决定是否插入子步。
计算延迟与确定性执行
计算延迟由三部分组成:输入采集与转换延迟、模型解算延迟、输出写入与保持延迟。前两者容易理解,第三项常被忽略——D/A 或 PWM 输出往往在下一个周期才真正更新,形成“一个周期的固有延迟”。在实时模型中,这部分延迟必须显式建模或至少记录,否则闭环相位裕度会被高估。
确定性执行要求任务调度、内存访问、中断响应都可预测。常见做法包括:将模型解算放在固定周期的高优先级任务中;避免在解算路径上使用动态内存分配;关闭可能引入不确定延迟的缓存或分支预测优化;对共享数据采用无锁双缓冲而非互斥锁。一个实用的检查方法是长时间运行并记录每个周期的执行时间,观察最大值与分布——如果最大值远大于平均值,说明存在不确定源,需要定位。
硬件资源限制与模型复杂度权衡
实时模型的算力预算通常很紧。以某嵌入式目标机为例,单核 1 GHz、无浮点协处理器,1 ms 周期内可用指令数约百万条。一个包含 6 自由度刚体、气动插值表、作动器一阶模型和大气模型的飞行动力学模型,若用双精度浮点实现,可能占用 60%~80% 的周期预算;若再加入发动机动态和传感器模型,就会超时。此时需要在保真度和实时性之间做取舍:降低插值表分辨率、用单精度替代双精度、把慢变状态(如质量、重心)放到更低频率的任务中更新、对线性部分使用解析解而非数值积分。
权衡的核心不是“越简单越好”,而是“把计算花在影响闭环稳定性和验证结论的地方”。例如,气动系数对迎角的非线性在失速附近很关键,不能简化;而远场大气温度变化对短时机动影响很小,可以用常值或慢更新。判断依据可以来自灵敏度分析:对每个状态或参数做小扰动,观察关键输出(如俯仰角速率、过载)的变化量,优先保留高灵敏度环节的高保真度。
一个可执行的周期预算检查表
把上述约束落到工程上,可以用一张周期预算表来管理。以下示例针对 1 ms 周期、目标机单核 1 GHz 的场景,数值为教学假设,用于说明字段和判断方式:
| 环节 | 预算(μs) | 实测均值(μs) | 实测最大值(μs) | 判断 |
|---|---|---|---|---|
| 输入采集与转换 | 80 | 62 | 75 | 通过 |
| 气动插值与力矩计算 | 300 | 245 | 310 | 最大值超预算,需优化 |
| 刚体积分 | 120 | 88 | 95 | 通过 |
| 作动器与大气模型 | 100 | 70 | 82 | 通过 |
| 输出写入与保持 | 60 | 40 | 48 | 通过 |
| 合计 | 660 | 505 | 610 | 余量约 390 μs,但需消除抖动 |
表中“最大值超预算”说明气动插值环节存在不确定延迟,常见原因是插值表未对齐缓存行或使用了分支较多的查找逻辑。可改为规则网格加线性索引,或把二维插值拆成两次一维插值,通常能把最大值压到均值附近。判断是否达标的依据不是均值,而是最大值加上安全裕度后仍小于周期长度。
模型复杂度取舍的实操思路
当预算不足时,按以下顺序考虑降复杂度:先降低慢变环节的更新频率,例如大气模型从 1 kHz 降到 100 Hz;再降低插值表分辨率,但保留失速区等关键区间的密度;然后考虑用单精度浮点替代双精度,注意积分器对舍入误差的敏感性;最后才考虑简化动力学方程本身,例如在小扰动假设下线性化部分通道。每一步改动后都要用同一组激励对比关键输出,确认偏差在可接受范围内。例如俯仰角速率在 1 s 内的峰值偏差不超过 5%,可认为简化未破坏验证结论。
需要强调的是,实时模型的“正确”是相对于验证目标而言的。用于控制器参数整定的模型,可以容忍气动系数 10% 的偏差,但不能容忍相位延迟;用于操稳特性评估的模型,则对气动非线性更敏感。因此,约束的优先级应由验证任务决定,而不是追求全面高保真。把周期预算、步长、延迟和复杂度放在同一张表里管理,才能让实时模型既跑得动,又跑得可信。