4. 飞控系统建模:传感器模型、执行器模型与动力学模型
大家好,我是你们的老朋友。今天我们来聊聊飞控系统里最核心、也最「烧脑」的部分——建模。
说实话,我刚入行那会儿,觉得飞控就是写写PID,调调参数。直到有一次,我负责的一个四旋翼项目,在仿真里飞得好好的,一上真机就翻车。后来才发现,问题出在传感器模型太理想了。嗯,从那以后,我再也不敢轻视建模这一步了。
说白了,建模就是给飞控系统「画像」。你画得像,仿真就准;画得不像,代码写得再漂亮也是白搭。今天,我就带大家把传感器、执行器和动力学模型这三块,一个一个掰开揉碎了讲清楚。
核心观点:模型是仿真的灵魂。没有准确的模型,你的控制算法就是「盲人摸象」。
4.1 传感器模型:飞控的「眼睛」和「耳朵」
飞控系统依赖传感器来感知自身状态。常见的传感器有IMU、GPS和气压计。它们各有各的脾气,建模时得区别对待。
4.1.1 IMU(惯性测量单元)
IMU包含加速度计和陀螺仪。我个人的习惯是,把IMU模型拆成三部分:真实值、噪声和偏差。
- 加速度计模型:测量的是比力(即物体受到的合力减去重力)。模型可以写成:
a_meas = a_true + b_a + n_a。其中b_a是零偏,n_a是高斯白噪声。 - 陀螺仪模型:测量角速度。模型类似:
w_meas = w_true + b_g + n_g。 - 噪声参数:通常用「角度随机游走」和「速率随机游走」来描述。这些参数可以从芯片手册里查,或者自己跑 Allan 方差分析得到。
我的经验:我在项目中遇到过,IMU的零偏会随着温度变化。所以,如果你做的是工业级飞控,最好在模型里加一个温度补偿项。否则,冬天和夏天的表现会差很多。
4.1.2 GPS模型
GPS提供位置和速度信息。但它有两个硬伤:更新频率低(通常10Hz),而且有较大的延迟。
模型可以这样写:
// GPS位置测量模型
pos_meas = pos_true + n_pos; // n_pos ~ N(0, sigma_pos^2)
// GPS速度测量模型
vel_meas = vel_true + n_vel; // n_vel ~ N(0, sigma_vel^2)
// 注意:需要加入一个延迟环节,比如1阶低通滤波器
为什么要有延迟?因为GPS从接收卫星信号到输出数据,中间有处理时间。我曾经踩过这个坑——仿真里没加延迟,结果融合出来的位置估计总是超前于真实值。
4.1.3 气压计模型
气压计用来测高度。它的模型相对简单,但有个大问题:容易受气流扰动。
- 模型:
h_meas = h_true + n_h + w_ind。其中n_h是测量噪声,w_ind是风扰动项。 - 避坑指南:我曾经在无人机悬停时,发现高度数据一直在漂。后来发现是螺旋桨下洗气流吹到了气压计上。解决办法是加一个海绵罩,或者在模型里加一个低通滤波器。
4.2 执行器模型:飞控的「手脚」
执行器负责把控制指令变成物理动作。对于四旋翼和固定翼,主要就是电机和舵机。
4.2.1 电机模型
电机模型的核心是:输入PWM信号,输出拉力/推力。但中间有个动态过程。
我常用的模型是:
// 电机一阶动态模型
T(s) = K / (tau * s + 1) * PWM(s)
// 其中:
// K 是电机增益(拉力与PWM的比值)
// tau 是时间常数(通常10-50ms)
// 还要考虑死区:PWM低于某个阈值时,电机不转
你想想看,如果忽略了时间常数,仿真里电机响应是瞬时的,但真机上电机需要时间加速。这会导致控制器的相位裕度被高估,实际飞起来就容易震荡。
4.2.2 舵机模型
舵机用于固定翼的舵面控制。它的模型和电机类似,但多了位置限制和速率限制。
- 位置限制:舵面只能转±30度左右。
- 速率限制:舵机转动速度有限,比如 300 deg/s。
- 模型:可以用一个饱和环节 + 一阶惯性环节来近似。
注意:舵机的死区比电机更明显。我曾经遇到过,小角度指令下去,舵机根本没反应。后来在模型里加了死区补偿,才解决了这个问题。
4.3 动力学模型:飞控的「身体」
动力学模型描述的是飞行器在力作用下的运动规律。四旋翼和固定翼的动力学差别很大,我们分开讲。
4.3.1 四旋翼动力学
四旋翼的动力学可以分解为平动和转动两部分。
- 平动方程:
m * a = F_thrust + F_gravity + F_drag。其中推力由四个电机合力提供。 - 转动方程:
I * alpha = M_roll + M_pitch + M_yaw。力矩由电机转速差产生。 - 关键参数:转动惯量 I、电机拉力系数、反扭矩系数。这些参数可以通过 CAD 模型估算,或者做实验标定。
我个人习惯用四元数来表示姿态,而不是欧拉角。为什么?因为欧拉角有万向锁问题,而四元数没有。你想想看,如果飞机做90度俯仰,欧拉角就失效了,但四元数依然健壮。
4.3.2 固定翼动力学
固定翼的动力学更复杂,因为涉及气动力的计算。
模型通常包含:
- 气动力:升力、阻力、侧力。它们与迎角、侧滑角、空速有关。
- 气动力矩:滚转力矩、俯仰力矩、偏航力矩。它们与舵面偏转有关。
- 重力:始终指向地心。
- 推力:由发动机提供。
我记得有一次,我在仿真里把升力系数设成了常数,结果飞机怎么都拉不起来。后来才意识到,升力系数是迎角的函数,而且在大迎角时会失速。所以,固定翼模型里一定要包含气动导数表。
4.4 知识体系总览
下面这张图,是我用SVG画的本章知识结构。你可以把它当作一个「地图」,方便随时回顾。
4.5 建模的实用建议
最后,我给大家几条实战中的建议:
- 先简单后复杂:刚开始建模时,别想着一步到位。先搭一个线性模型,跑通了再加非线性项。
- 参数要标定:模型里的参数,最好通过实验数据来拟合。别光看手册,手册上的值往往偏理想。
- 验证不可少:模型建好后,一定要用真实飞行数据做回测。如果仿真和真机对不上,说明模型有问题。
一句话总结:建模不是一蹴而就的事,它需要你不断迭代、不断修正。但只要你把传感器、执行器和动力学这三块搞扎实了,后面的控制算法设计就会轻松很多。