1. Simulink飞控基础:模型在环仿真概念、飞控系统架构、Simulink环境配置
大家好,我是老张。在飞控这个行当摸爬滚打了十几年,从最早的C代码手写控制律,到后来用Simulink做快速原型,再到现在的模型在环仿真(MIL),说实话,工具链的进步确实让我们的开发效率提升了不少。今天咱们就来聊聊这个MIL到底是个啥,以及怎么把Simulink环境搭起来。
1.1 模型在环仿真(MIL)到底是什么?
先别急着看定义,我讲个亲身经历。2015年我做某型无人机飞控,代码写完直接上硬件,结果飞起来不到30秒就炸了。后来排查发现,是控制律里一个积分限幅参数写错了。你说冤不冤?要是当时先做MIL验证,这种低级错误根本不会带到硬件上去。
模型在环仿真,说白了就是用纯软件环境来验证你的控制算法。你想想看,飞控算法写好了,但还没烧到飞控板子上,这时候你可以在电脑上跑一个虚拟的飞机模型,把算法和这个虚拟模型连起来跑。这就是MIL。
核心要点:MIL验证的是「算法逻辑」是否正确,而不是硬件能不能跑。它帮你把算法层面的bug扼杀在摇篮里。
为什么会有人跳过MIL直接做代码生成?我见过不少团队,觉得MIL浪费时间。但以我的经验,MIL阶段每发现一个bug,后期硬件调试至少省半天时间。这笔账,你算算看。
1.2 飞控系统架构长什么样?
做MIL之前,你得先搞清楚飞控系统到底有哪些模块。我习惯把飞控系统分成三层:
- 感知层:IMU、GPS、气压计这些传感器,负责获取飞行状态
- 决策层:也就是飞控算法核心,包括姿态解算、控制律计算、导航逻辑
- 执行层:PWM输出给舵机、电机,让飞机动起来
在MIL仿真中,我们重点关注的是决策层。感知层和执行层可以用数学模型来模拟。比如IMU数据,我们可以用运动学模型加上噪声来生成。
下面这张图是我自己画的一个飞控MIL架构,你看一眼就明白了:
你看,整个闭环是这样的:传感器模型给飞控算法输入,飞控算法算出控制指令,执行器模型响应指令,然后环境模型根据执行器输出更新飞机状态,再反馈给传感器模型。这就是一个完整的MIL仿真闭环。
我的习惯:在搭建MIL环境时,我会先把环境模型单独验证一遍。比如给一个阶跃输入,看飞机响应是否符合物理规律。这一步做好了,后面调试飞控算法时才不会「锅从天上来」。
1.3 Simulink环境配置——别小看这一步
嗯,这里要注意。很多人觉得环境配置就是装个软件,点几下鼠标。但我在项目中遇到过好几次因为版本不匹配导致模型跑不起来的尴尬事。
下面是我个人推荐的配置清单:
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| MATLAB/Simulink | R2021b 或更新 | 太老的版本缺少一些飞控工具箱支持 |
| Aerospace Blockset | 与MATLAB版本匹配 | 提供六自由度动力学、大气模型等 |
| Stateflow | 与MATLAB版本匹配 | 用于飞控模式切换逻辑 |
| Simulink Coder | 与MATLAB版本匹配 | 后续做代码生成时需要 |
安装完成后,我建议你做两件事:
- 验证工具箱是否加载成功:在MATLAB命令行输入
ver('aerospace'),如果返回版本信息,说明装好了。 - 设置仿真求解器:飞控仿真一般用定步长求解器,步长建议设为0.01秒(100Hz)。为什么?因为大多数飞控的内环控制频率就是100Hz左右。
我曾经踩过的坑:有一次用变步长求解器跑MIL,结果仿真结果时好时坏。排查了两天才发现,变步长在某些快速动态过程中步长自动变小,导致仿真时间暴涨,而且数值误差累积。从那以后,飞控MIL我全部用定步长。
配置好求解器后,再检查一下模型工作路径。我习惯把每个项目单独建一个文件夹,路径里不要有中文和空格。别笑,我真见过有人因为路径带中文导致模型编译报错,折腾了一下午。
1.4 快速搭建一个最小MIL示例
光说不练假把式。咱们快速搭一个最简单的MIL模型,就一个一阶低通滤波器,模拟飞控里的传感器滤波环节。
步骤很简单:
- 新建一个Simulink模型
- 拖入一个
Sine Wave作为输入信号 - 拖入一个
Transfer Fcn,设置分子为[1],分母为[0.1 1](时间常数0.1秒) - 拖入一个
Scope看波形 - 拖入一个
To Workspace把数据存到工作区
模型搭好后,设置仿真时间10秒,跑一下。你会看到输入的正弦波被平滑了。这就是MIL最基础的样子——用模型验证模型。
关键认知:MIL不是高大上的东西,它就是一个「在电脑上先跑一遍」的习惯。你搭的模型越接近真实系统,MIL的价值就越大。
好了,这一章的内容就到这里。记住,MIL是你飞控开发的第一道防线。下一章我们会深入飞控算法的建模细节,到时候见。
公众号:蓝海资料掘金营,微信deep3321