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% 的周期预算;若再加入发动机动态和传感器模型,就会超时。此时需要在保真度和实时性之间做取舍:降低插值表分辨率、用单精度替代双精度、把慢变状态(如质量、重心)放到更低频率的任务中更新、对线性部分使用解析解而非数值积分。

权衡的核心不是“越简单越好”,而是“把计算花在影响闭环稳定性和验证结论的地方”。例如,气动系数对迎角的非线性在失速附近很关键,不能简化;而远场大气温度变化对短时机动影响很小,可以用常值或慢更新。判断依据可以来自灵敏度分析:对每个状态或参数做小扰动,观察关键输出(如俯仰角速率、过载)的变化量,优先保留高灵敏度环节的高保真度。

实时模型单周期时间预算与约束关系 t k 周期起点 k+1 周期起点 k+2 周期起点 采样周期 T_s(例:1 ms) 输入采集 模型解算 (积分 + 气动插值) 输出写入 截止时间 余量 超时:解算未完成 输出滞后 → 闭环相位损失 约束三角 实时性:WCET ≤ T_s 确定性:抖动可预测 复杂度:算力预算内 三者相互制约,需权衡 步长与稳定性关系(显式欧拉法示例) 稳定条件:Δt < 2τ | 精度建议:Δt ≈ τ/10 | τ = 0.02 s → Δt ≤ 2 ms 采样率经验:f_s ≥ (5~10) × f_max | f_max = 10 Hz → f_s ≥ 50~100 Hz 注:以上为教学示例参数,实际取值需结合具体模型带宽与硬件实测确定

一个可执行的周期预算检查表

把上述约束落到工程上,可以用一张周期预算表来管理。以下示例针对 1 ms 周期、目标机单核 1 GHz 的场景,数值为教学假设,用于说明字段和判断方式:

环节 预算(μs) 实测均值(μs) 实测最大值(μs) 判断
输入采集与转换806275通过
气动插值与力矩计算300245310最大值超预算,需优化
刚体积分1208895通过
作动器与大气模型1007082通过
输出写入与保持604048通过
合计660505610余量约 390 μs,但需消除抖动

表中“最大值超预算”说明气动插值环节存在不确定延迟,常见原因是插值表未对齐缓存行或使用了分支较多的查找逻辑。可改为规则网格加线性索引,或把二维插值拆成两次一维插值,通常能把最大值压到均值附近。判断是否达标的依据不是均值,而是最大值加上安全裕度后仍小于周期长度。

实时性验证建议至少连续运行 30 分钟并记录每周期执行时间,观察最大值、99 分位值和是否出现周期性尖峰。若尖峰与外部总线中断同步出现,应检查中断优先级和临界区长度。

模型复杂度取舍的实操思路

当预算不足时,按以下顺序考虑降复杂度:先降低慢变环节的更新频率,例如大气模型从 1 kHz 降到 100 Hz;再降低插值表分辨率,但保留失速区等关键区间的密度;然后考虑用单精度浮点替代双精度,注意积分器对舍入误差的敏感性;最后才考虑简化动力学方程本身,例如在小扰动假设下线性化部分通道。每一步改动后都要用同一组激励对比关键输出,确认偏差在可接受范围内。例如俯仰角速率在 1 s 内的峰值偏差不超过 5%,可认为简化未破坏验证结论。

需要强调的是,实时模型的“正确”是相对于验证目标而言的。用于控制器参数整定的模型,可以容忍气动系数 10% 的偏差,但不能容忍相位延迟;用于操稳特性评估的模型,则对气动非线性更敏感。因此,约束的优先级应由验证任务决定,而不是追求全面高保真。把周期预算、步长、延迟和复杂度放在同一张表里管理,才能让实时模型既跑得动,又跑得可信。