3. 模型与参数校准:如何确保仿真模型与实际无人机一致?

做仿真联调最怕什么?最怕仿真里飞得稳稳当当,一上真机就炸。我见过太多团队,花了几周调参,结果实飞第一秒就翻。问题出在哪?模型和真机对不上。

说白了,你的仿真模型再漂亮,如果气动系数是猜的、传感器噪声是编的、执行器延迟是估的,那仿真就是一场自欺欺人的表演。今天我们就聊聊,怎么把模型校准到「敢上真机」的程度。

核心原则:仿真模型不是「设计」出来的,是「校准」出来的。每一组参数都必须有实测数据支撑。

3.1 气动模型校准:别让升力系数骗了你

气动模型是飞控仿真的地基。我习惯把校准分成三步:

  1. 静力校准——测升力、阻力、力矩系数
  2. 动导数校准——测阻尼、交叉耦合
  3. 失速特性校准——测大迎角下的非线性行为

很多团队只做第一步,觉得 CFD 算出来的系数直接拿来用就行。嗯,这里要注意——CFD 算的是理想状态,真实机翼表面有公差、有漆层、有装配间隙,这些都会改变气动特性。

我在一个固定翼项目中遇到过,CFD 给的升力系数偏高了 8%。仿真里 15° 迎角还能拉得住,实飞 12° 就抖振了。后来我们用风洞数据重新拟合了系数,才把问题解决。

参数 CFD 值 风洞实测值 偏差
CL_alpha (升力线斜率) 5.73 /rad 5.21 /rad -9.1%
CD0 (零升阻力) 0.025 0.031 +24%
Cm_alpha (俯仰力矩斜率) -0.85 /rad -0.72 /rad +15.3%
我的习惯:气动参数至少保留 10% 的裕度。如果仿真里控制律已经接近边界,实飞大概率会出问题。

3.2 传感器模型校准:噪声不是越小越好

传感器模型最容易犯的错,是把噪声设得太理想。你想想看,真机上的 IMU 有振动耦合、有温度漂移、有安装偏差,这些在仿真里不体现,实飞就会「惊喜」不断。

我建议的做法是:

  • IMU 噪声模型:用 Allan 方差分析实测数据,提取角度随机游走和速率随机游走参数
  • 磁力计模型:加入硬铁和软铁校准残差,别假设完美校准
  • 气压计模型:考虑气流扰动和温度梯度,加一个低通滤波延迟
  • GPS 模型:模拟多路径效应和卫星几何变化,不要用固定精度

我曾经接手过一个项目,仿真里 GPS 定位精度一直 0.5 米,实飞时经常跳到 2 米。查了半天,发现仿真里用的是理想高斯噪声,而实际环境有建筑物反射。后来我们在模型里加了多路径误差项,仿真和实飞的定位偏差才基本吻合。

避坑指南:传感器噪声参数不要从 datasheet 抄。datasheet 给的是实验室条件,实飞环境至少差 2-3 倍。我一般把 datasheet 值乘以 1.5 作为起点,再根据实测数据微调。

3.3 执行器模型校准:延迟是隐形杀手

执行器模型里,延迟是最容易被忽略的参数。很多仿真里舵机响应是理想的——指令发出,角度立刻到位。但真机不是这样。

执行器模型至少包含三个要素:

  1. 传输延迟——从飞控输出到舵机收到信号的时间
  2. 上升时间——舵机从 0° 到目标角度的时间
  3. 死区——小信号下舵机不响应的区域

我习惯用示波器实测舵机的响应曲线,然后拟合成一阶或二阶传递函数。举个例子:

% 舵机响应模型(一阶滞后 + 延迟)
% 实测数据:阶跃响应 10° 到 50°
% 拟合结果:延迟 8ms,时间常数 22ms

G_servo = exp(-0.008*s) * (1 / (0.022*s + 1));

你看,8ms 的延迟在仿真里可能感觉不到,但在高频控制回路里,它会引入相位滞后。如果控制律设计时没考虑这个延迟,实飞时可能会出现高频振荡。

执行器类型 典型延迟 典型时间常数 死区
微型舵机 (9g) 5-10 ms 15-25 ms ±1°
标准舵机 (20kg) 8-15 ms 20-40 ms ±0.5°
无刷电机 (电调) 2-5 ms 10-30 ms ±2% 油门

3.4 参数调优的常见陷阱

模型校准完了,接下来是参数调优。这里陷阱很多,我挑几个最常见的说说。

陷阱一:过度拟合仿真数据

有些人调参时,把仿真里的跟踪误差压到 0.1° 以内,觉得完美了。但实飞时扰动一上来,系统就发散。为什么?因为参数被优化到了仿真里的特定噪声模式上,而不是系统的真实特性。

我的做法是:在仿真里加入不同频率和幅度的扰动,看参数是否还能保持稳定。如果只在一种工况下表现好,那这个参数不可靠。

陷阱二:忽略执行器饱和

仿真里控制量可以无限大,但真机不行。舵机有最大角度,电机有最大转速。如果调参时没考虑饱和,实飞时控制量一限幅,系统可能直接失稳。

我建议在仿真模型里显式加入饱和环节,并且用「抗饱和补偿」技术。具体来说:

% 带饱和的执行器模型
function u_sat = saturate(u, u_min, u_max)
    if u > u_max
        u_sat = u_max;
    elseif u < u_min
        u_sat = u_min;
    else
        u_sat = u;
    end
    % 抗饱和:把饱和差值反馈回积分器
    delta_u = u - u_sat;
end

陷阱三:增益调得过高

这是新手最容易犯的错。仿真里增益调高一点,响应更快,看起来更「猛」。但实飞时结构弹性、传感器噪声、执行器延迟都会限制增益上限。

我记得有个项目,仿真里把滚转增益调到了 8.0,响应时间 0.2 秒,看着很漂亮。实飞第一次滚转,机翼就出现了明显的弹性振荡。后来降到 4.5 才稳定下来。

经验法则:仿真里的最优增益,实飞时先打 60% 折扣。然后逐步增加,每次增加 10%,观察响应。如果出现振荡,立刻退回上一档。

3.5 校准流程与验证闭环

说了这么多,最后总结一下我个人的校准流程。下面这张图展示了从模型校准到实飞验证的完整闭环:

模型校准与参数调优闭环流程 气动模型校准 CFD + 风洞 + 飞行数据 传感器模型校准 Allan方差 + 实测噪声 执行器模型校准 延迟 + 时间常数 + 死区 集成仿真模型 气动 + 传感器 + 执行器 + 结构 参数调优 增益调度 · 抗饱和 · 鲁棒性验证 HIL仿真验证 硬件在环 · 实时闭环 · 故障注入 参数迭代 关键:每次实飞后,用飞行数据反向校准模型参数,形成持续改进的闭环

这个闭环的核心思想是:模型校准不是一次性的。每次实飞后,把飞行日志里的数据拿回来,反向校准模型参数。我一般会做 3-5 轮这样的迭代,直到仿真和实飞的响应曲线基本重合。

最后提醒:不要迷信仿真。仿真通过只是起点,不是终点。我见过太多团队在仿真里花了 80% 的时间,结果实飞一次就发现问题。我的建议是:尽早实飞,哪怕只是悬停或低速滑跑。实飞数据才是校准模型的唯一标准。