飞行安全这个东西,外行看是试飞员的胆量和驾驶舱里的一堆仪表,内行知道,真正决定一架飞机能不能安全落地的,是出厂之前在地面试验室里反反复复跑过的那些仿真测试。这些年飞控系统越发复杂,从传统增稳到自动避障、编队协同,算法越来越多,试飞成本又高得吓人,纯数字仿真已经没法让人放心了。团队自研的飞控半实物实时仿真测试平台,就是在这种背景下陆续搭建起来的。这篇东西我不打算写成产品宣传稿,就实打实聊聊这套半实物仿真测试平台怎么设计、怎么落地、踩过哪些坑,以及它在整个航空研发链条里的真实位置。
1. 飞行安全的第一道防线:半实物仿真测试为什么非做不可
1.1 飞控系统复杂度正在快速超出纯软件仿真可验证的范围
大概十年前,给无人机做飞控测试,步骤还很直观:先建个数学模型,在电脑里把控制律跑通,接着上真机试飞。当时的飞行任务相对简单,控制通道不多,试飞风险也可控。现在完全不是一回事了,飞控软件动辄几十万行代码,传感器融合、故障诊断、冗余管理、自动避障、多机协同,一个比一个复杂。更关键的是,飞控计算机是实实在在的硬件,它的CPU算力、总线通信时序、看门狗机制、掉电保护这些特性,是纯数字仿真里根本模拟不出来的。
纯数字仿真也就是常说的模型在回路(MIL)和软件在回路(SIL),能验证的是"控制逻辑对不对"。但飞机是一个物理系统,信号要通过真实的总线、真实的电连接、真实的舵机驱动电路才能起作用。很多故障恰恰发生在这些物理环节上——比如一条总线受到电磁干扰、一个传感器信号发生时延、一个舵机在高温下响应变慢。这些在纯软件环境里要么被理想化掉,要么根本没法注入。
1.2 半实物仿真和纯数字仿真之间差了一个"真实世界"
所谓半实物仿真,行业里叫HIL(Hardware-in-the-Loop),核心做法是把真实的飞控计算机接入闭环回路,让它以为自己正连着真实的传感器、舵机、飞机机体飞行。真实的那个部分就是飞控计算机,虚拟的部分是其他一切外部环境。
听起来简单,做起来难点全在"让飞控计算机分辨不出来"这句话上。仿真机必须在固定的时间步长里解算出飞机当前的姿态、位置、速度,再模拟出传感器应该返回的电信号,通过真实的接口送给飞控。飞控输出的舵面指令,仿真机要实时换算成气动力矩,更新飞机状态。整个闭环的实时性必须严格保证,误差稍微跑偏,飞控就会产生误判,测试结果就是废的。
这套平台要解决的核心问题,用一句话概括:把真实试飞中才可能暴露的问题,尽可能提前到地面试验室阶段暴露出来。
1.3 它在整个航空研发流程里的位置
航空产品研发有一个典型的"V"字流程,从需求分解、方案设计,一路到部件验证、系统集成验证。半实物仿真测试位于系统集成验证阶段,是连接"设计定型"和"真机首飞"的关键闸口。过了这关,飞控软件才敢上真机;过不了,就得回到设计阶段去改。
平台的实际价值体现在三方面:一是缩短试飞周期,许多风险科目在地面先跑熟;二是降低试飞成本,减少架次损耗;三是兜住安全底线,那些试飞中根本不敢做的极限工况,比如单侧舵面卡死、传感器完全失效,在实验室里可以反复做。这也是标题里"筑牢研发防线"的真实含义。
2. 平台总体架构拆解:从实时仿真机到信号接口的完整链路
2.1 硬件在环的基本拓扑
整套平台由四个核心部分组成:实时仿真机、飞控计算机、信号接口适配单元、上位机监控终端。
实时仿真机是整个平台的心脏,负责运行飞机六自由度动力学模型、传感器模型、舵机执行机构模型、大气环境模型,同时还要承担故障注入任务。它必须满足两个硬指标:确定性实时调度和极低的通信抖动。飞控计算机就是被测对象,它运行着真实装机使用的飞控软件,完全不知道自己面前是个仿真环境。信号接口适配单元负责把仿真机的数字计算结果,转换成飞控计算机能够识别的真实物理信号,同时把飞控输出信号采集回来。上位机监控终端是工程师的操作界面,用于搭建试验场景、设置故障、实时监控波形、管理测试报告。
这次搭建的平台还专门添了一个负载模拟柜,用来模拟舵机在真实飞行中承受的气动铰链力矩,这一点对验证飞控对舵系统的驱动能力特别关键,下文会展开说。
2.2 实时仿真机与模型环境的选型思路
实时仿真机我们先后对比过两种路线。一种是通用工控机加实时操作系统方案,优点是价格友好、开发效率高,适合模型量不太大、步长要求不极端苛刻的场景;另一种是FPGA加嵌入式处理器方案,能跑微秒级步长,时间确定性更好,但开发工作量明显偏大。
从我们跑过的任务来看,飞机六自由度模型加舵机动态模型,在通用实时机平台上跑1毫秒步长是完全可行的。只有当任务涉及高频弹性模态仿真、或者需要对多台飞控进行同步联试时,才需要考虑FPGA方案。这个取舍用生活化的话讲就是:你要是每天只在市区代步,买台家用车就够了,硬上跑车除了费油没别的好处。平台选型的关键永远是把需求吃透,量体裁衣。
模型环境方面,动力学模型我们自研,传感器模型和舵机模型先用商用模型库做原型验证,之后再逐步用实测数据替换。这个思路值得参考——全自研起步慢,全外购后期会受制于人,混合路线最稳妥。
2.3 信号接口适配单元,一个极其关键却容易被低估的环节
很多团队第一次搭HIL平台,注意力全放在实时仿真机上,结果死磕接口转换时才发现这才是大头。飞控计算机对外接口往往包括模拟量采集、离散量输入输出、PWM驱动、串口、以及航空常用的总线通信接口,种类多、时序要求各不相同。
信号接口适配单元要解决三件事。第一是电平匹配,飞控输入输出信号的电平范围、驱动能力跟仿真机的通讯板卡未必一致,直接硬接轻则信号失真,重则烧板卡;第二是隔离,航空系统特别讲究电气隔离,试验室里共地问题往往造成莫名的信号毛刺,排查起来极其费劲;第三是故障注入的物理通道,比如模拟传感器信号开路、对地短路、信号偏移,都要在适配单元这一层预留切换电路。
这套方案实施时,我们的做法是单独配了一个接口配线柜,每一路信号的走向、衰减系数、隔离措施都在配线图上标注清楚。可能有人觉得多此一举,但等测试用例跑到几百上千条的时候,遇到异常能迅速定位到具体通道,会感谢当初这个决策。
平台链路可以用下面这个表格来概括各部分职责:
| 组成部件 | 核心职责 | 容易忽略的细节 |
|---|---|---|
| 实时仿真机 | 解算飞机模型、环境模型、舵机模型 | 实时任务调度优先级设置,中断负载控制 |
| 飞控计算机 | 被测对象,运行真实飞控软件 | 需要专用测试接口导出内部变量 |
| 信号接口适配单元 | 电平转换、隔离、故障注入 | 通道标定精度、绝缘耐压、屏蔽接地 |
| 负载模拟柜 | 模拟舵面气动铰链力矩 | 动态响应带宽,力矩梯度准确性 |
| 上位机监控终端 | 测试场景管理、数据监控 | 自动化测试脚本框架的易用性 |
3. 硬核细节:实时性、同步性与故障注入的实现经验
3.1 实时步长选择:定多小才算够
半实物仿真里最基础的问题,就是仿真步长取多少。步长太大,模型的动力学响应失实,飞控算出来的一堆参数没有意义;步长太小,实时机算力跟不上,模型算不完就是超时,超时意味着这一帧数据必须废弃,测试就不是连续可信的。
我们的工程经验如下。整机刚体动力学加气动数据插值,用10ms步长在慢速飞行段勉强够看,但一旦涉及增稳控制律的高带宽环节,数据明显失真。降到1ms步长,飞行力学和大部分控制律都能覆盖到位。舵机这一类高频执行机构,纯粹用软件模型跑1kHz往往还是不够真实,特别是要验证舵面振荡这类动态过程时,我们倾向于在模型层面用更高阶次来拟合,或者把执行机构模型放到FPGA上单独加速。
具体做法上,我们给平台设计了多速率调度结构:模型解算按1ms主步长运行,舵机模型按更细的子步长在内部积分推进,数据采集按需抽取。这类设计带来的复杂度不小,但换来的是"该细的地方细、该快的地方快"。
3.2 时间同步与数据落盘,最容易被忽视的坑点
HIL平台一旦开始跑,实时仿真机和飞控之间就在不停交换数据。最怕出现的情况是:飞控发出一条指令,仿真机因为调度延迟晚了几毫秒才响应,虽然系统没崩,但时序已经不是真实飞行中的时序了。拿游戏来类比,就是画面渲染帧率跟不上,看起来整体没大问题,但微操的手感全变了。
解决思路是建立统一的时基,所有环节的数据都带硬件时间戳。仿真机侧每毫秒产生一个同步脉冲,飞控侧通过外部中断感知这个时基,数据采集系统以相同时基采样。这样事后分析数据时,每一帧都能对齐到绝对时间轴,谁先谁后一目了然。
数据落盘同样讲究。以前我们试过所有数据都通过网络传到上位机保存,结果量一大就开始丢包,后来改成采集系统本地硬盘直写加实时波形转发两条路并行的方案。直写保证完整,转发保证可看,两不耽误。做HIL测试的人常说"数据就是证据",如果连证据都不完整,后面问题定位基本靠猜。
3.3 故障注入的三种做法与适用场景
故障注入是HIL平台区别于普通仿真系统的重要能力,也是"飞行安全测试"落到实处的关键手段。根据注入位置不同,我们经常用的有三类。
第一类是信号级故障注入,在信号适配单元里通过继电器或电子开关,对传感器信号做开路、短路、对地、偏移、叠加噪声等操作。这类故障最接近真实线路故障,适合验证飞控的传感器容错和重构逻辑。第二类是总线级故障注入,在通信链路上人为丢帧、错序、篡改数据、拉长帧间隔,用来考验飞控对通信异常的检测能力。第三类是模型级故障注入,直接修改仿真模型内部参数,比如让某个舵面卡死在某个角度、气动参数跳变、发动机推力骤降等,这类故障往往用于验证飞行边界情况下的控制策略。
三类故障各有分工。信号级和总线级负责"硬故障"验证,模型级负责"软故障"和危险工况模拟。完整的测试大纲应该把三类故障组合起来交叉覆盖。我们最早只做了信号级注入,后来某次测试才意识到总线丢帧这种故障若是光靠改信号模拟,压根复现不了,这才补齐了总线级故障注入模块。
3.4 数据回放与问题复现:测试的价值一半在事后
很多测试现场发现异常,工程师第一反应是盯着屏幕看波形,实际上效率极低。我们的习惯是先把完整数据落盘,等用例跑完,再回到上位机做数据回放和分析。回放的核心能力是支持任意时间窗口缩放,配合参数曲线对比、事件标记、故障注入时间点的叠加显示,一条时间线上的因果链会非常清晰。
某次排查一个舵机振荡问题,夜里连续跑了十几轮都没捕捉到规律,后来把故障注入时刻和飞控内部状态变量叠加在同一时间轴上回放,才看出振荡总是在注入后约1.2秒才出现,而且跟某个特定的总线帧序号强相关。这种"时间对齐+参数关联"的分析方式,在半实物仿真里远比单看某一通道的曲线有效。
4. 一次典型任务的完整过程:极限飞行包线验证实战
4.1 任务背景与测试大纲设计
去年年中,我们配合某项目团队对一款小型固定翼无人机做全飞行包线HIL验证。这款无人机的设计任务剖面覆盖低速大攻角爬升、高速俯冲改出、大侧滑航向保持等多段工况,里面有不少风险科目,真机试飞代价大,但控制律更新之后再不验证心里又没底。
测试大纲设计是整个任务里最见功力的部分。我们没有简单按飞行阶段划用例,而是先对飞行包线做了一个网格化划分,把空速、高度、攻角、侧滑角划分成关键状态点,再针对每个状态点组合出典型机动指令和故障预案。这么一轮下来,用例数量从最初规划的六十多条扩张到两百多条,虽然工作量大了,但包线覆盖的完整性高了很多。航空测试不是比谁跑得快,而是比谁覆盖得全。
4.2 从模型准备到测试执行的标准流程
测试正式执行前有一条完整的准备链路。第一步是模型标定,把气动数据表、发动机推力曲线、舵机机电参数装进仿真机,并跟历史试飞数据做比对,确认模型输出的配平状态、动态响应在可接受误差范围内。这一步没做扎实,后面测试结论的置信度就无从谈起。
第二步是飞控状态确认,包括飞控软件版本号、编译时间、参数表版本都要记录归档,这属于测试溯源的基本功。第三步是自动化测试脚本准备,我们基于Python封装了一套测试用例库,可以按大纲批量编排用例、注入故障、判读结果。到了测试执行阶段,基本是自动化跑批加人工盯盘,遇到异常再人工介入分析。
这套流程用代码片段来示意的话,故障注入控制在脚本里大致是这样一个结构:
# 故障注入与恢复流程示意 def run_case(case_name, fault_point, duration): start_flight(case_name) # 启动飞行剖面 wait_for_condition("平飞建立") # 等待稳点建立 inject_fault(fault_point) # 在指定时刻注入故障 monitor_response(duration) # 监控响应直至设定时长 recover_fault() # 恢复故障 evaluate_metrics() # 判读控制品质指标 save_report(case_name) # 保存测试报告4.3 测试中发现的真实问题:舵机高温滞后引发的振荡
整个包线验证跑到大约三分之一时,有一个算例的结果引起了注意。在连续三次重复实验中,某段机动结束后,飞控记录的副翼指令出现了周期约为0.8秒的持续振荡,幅值虽然不大,但完全没有收敛迹象。
最初我们怀疑是故障注入模块的干扰,后来把故障注入时间点对齐,发现振荡每次都出现在注入后1秒左右,并且跟舵机模型输出的力矩响应延迟存在强关联。进一步比对数据后确认,问题根源是舵机模型里阻尼系数设成了固定值。真实舵机在长时间工作后温度升高,润滑特性变化,响应滞后明显增大,而模型里的固定阻尼完全没反映这个趋势,导致飞控-舵机回路在特定频段上相位裕度不足,振荡就此激发。
这个案例很有代表性。半实物仿真平台的模型精度往往直接决定测试结论的可靠度。后来我们给舵机模型补上了温度相关的参数曲线,再跑同样的用例,振荡消失,控制品质恢复正常,真机试飞时也没有再出现同类问题。
4.4 结果判定与测试报告沉淀
每次用例结束,我们按预先定义的指标判据自动生成判定结果。像短周期阻尼比、指令响应时延、稳态误差这类关键指标,阈值在大纲阶段就和设计团队对齐过,脚本自动比对,超限自动标红,人工复核后归档。这比事后逐条人工翻数据要高效得多,也避免了主观判断带来的不一致。
测试报告不只是罗列"通过/不通过",每一条未通过项都要关联到对应的故障场景、模型设置、数据曲线。我们内部叫"一用例一案一报告",这些报告最终汇总成平台的模型修订建议,反馈给设计团队。可以说整个HIL测试环节,真正沉淀到团队资产里的,就是这份数据和经验来回迭代的闭环。
5. 平台搭建、运维与长期演进的实践经验
5.1 自研还是外购:真实场景下的选型反思
关于半实物仿真平台,市场上不是没有成熟产品,外购的优势很明显:交付周期短、售后有保障、功能现成。但我们最终走了自研路线,核心原因有两个。一是被测飞控的接口和通信协议比较特殊,外购平台要适配往往需要额外定制开发,成本并不低;二是后续迭代测试场景时,自研平台可以从底层灵活调整模型调度和注入逻辑。
自研的代价也相当明显。信号接口适配单元里一堆细节问题,比如线缆屏蔽、接地拓扑、电平转换芯片选型,都只能自己一点点试错。如果团队没有足够的硬件功底,建议还是先外购核心实时仿真机,把接口适配和测试管理自己做,两条腿走路更稳。
5.2 搭平台时最容易踩的坑
首先,平台刚建起来时,我们犯过一个低级错误——把所有测试用例一股脑都放到首次跑批里执行,结果模型初始化瞬态没有等稳定就开始采集数据,导致前几秒的数据全部不可用。后来我们给每个用例加了一个"进入稳态判定"的前置条件,这个小小的改动让数据有效率高了很多。
其次,接口通道标定容易被忽略。模拟量通道的零点和增益会随温度和器件老化漂移,如果长期不做校准,测试数据的可信度会悄悄下降。我们的对策是每年固定做一次全通道标定,用标准信号源逐点扫描记录,发现偏差及时修正。这套工作听起来枯燥,但它是平台自身质量保障的基本盘。
再一个坑是关于自动化测试的预期管理。自动化脚本能解放人力,但前提是测试大纲已经稳定下来,需要人的判断来做机动规划和故障设计的阶段,强行自动化反而会限制测试深度。我们内部的原则是:探索性测试用例必须人工设计,回归性测试尽量自动化。
5.3 平台的扩展方向:多机联试与虚实结合
HIL平台的价值并不会止步于单一飞控验证。我们正在推进的一个方向是多机半实物联试:把两到三套飞控计算机同时接入仿真环境,模拟编队飞行时的相对位置、通信链路和数据交互,验证协同控制逻辑。这个场景在真实试飞里组织难度极高,但在半实物平台上,只需扩展仿真机算力和通信接口就能搭起来。
另外一个有意思的方向是虚实结合。把真机试飞中采集到的传感器数据、舵面数据导入平台,用真实数据驱动仿真场景,让飞控在"真实环境"里重新跑一遍软件版本,以此验证软件升级是否存在回归风险。这套做法能构建一个从试飞数据到仿真验证的闭环,对机队持续适航有直接帮助。
5.4 一点个人建议
这几年的平台建设和使用过程,最深的体会是:半实物仿真平台本质上不是一个设备采购项目,而是一个持续积累的测试体系。设备只是载体,真正有价值的是围绕平台沉淀下来的测试用例、模型校准数据、故障案例库和测试方法论。
如果你正准备启动类似平台,我的建议是从一个小而完整的闭环开始:一台实时仿真机、一套可靠的接口适配、一条完整的主飞行剖面,先把"能跑、可信、能复现"这三件事做扎实,再逐层扩展。不要一上来就追求设备齐装满员,平台的可信度靠的是每个环节的精心标定和验证,这些工作急不得,也省不得。