第1章:飞控系统基础——四旋翼动力学与传感器模型
大家好,我是老张。做飞控这些年,我带过不少新人。我发现一个规律:凡是能把基础模型吃透的,后面调参、排错都特别快。反过来,那些急着跑仿真、调PID的,往往会在某个奇怪的问题上卡好几天。
所以这一章,咱们把地基打牢。我会把四旋翼的动力学模型、坐标系、姿态表示、传感器模型这些核心内容,结合我踩过的坑,给你讲透。
1.1 四旋翼飞行器动力学模型
先说说四旋翼怎么飞的。你想想看,四个电机,两两正反转。对角线的电机转向相同,相邻的相反。这样设计是为了抵消反扭矩。
我在项目中遇到过一件事:有个同学把电机转向搞反了,结果飞机一解锁就原地打转。嗯,这种低级错误,其实原理上想通了就不会犯。
动力学模型的核心,说白了就是力和力矩的平衡。我们通常把它拆成两部分:
- 位置动力学:描述飞机在三维空间中的平移运动
- 姿态动力学:描述飞机的旋转运动
位置动力学方程长这样:
m * a = F_thrust + F_gravity + F_drag
其中m是质量,a是加速度。F_thrust是四个电机产生的总升力,方向沿机体Z轴。F_gravity是重力,F_drag是空气阻力。
姿态动力学稍微复杂一点。它涉及转动惯量和角加速度的关系:
J * ω_dot = τ - ω × (J * ω)
J是转动惯量矩阵,ω是角速度,τ是外力矩。那个叉乘项,其实就是陀螺效应。我刚开始学的时候,总觉得这玩意儿是玄学。后来做高机动飞行时才发现,不补偿这个项,飞机根本稳不住。
核心要点:四旋翼是个欠驱动系统。什么意思?四个输入(电机转速),六个自由度(位置3个+姿态3个)。所以你不能独立控制所有状态,必须通过姿态变化来产生水平方向的力。
1.2 坐标系定义与转换
坐标系这东西,看着简单,但坑特别多。我见过太多因为坐标系搞混导致的bug了。
常用的坐标系有三个:
- 地球坐标系(NED):北东地。X轴指向北,Y轴指向东,Z轴指向地心。这是导航用的坐标系。
- 机体坐标系(Body):固定在飞机上。X轴指向机头,Y轴指向右翼,Z轴指向下。
- 导航坐标系(ENU):东北天。和NED的区别是Z轴朝上。有些传感器用这个。
我个人习惯用NED作为全局坐标系。为什么?因为PX4和ArduPilot都用的NED,方便对接。
坐标系转换的核心是旋转矩阵。从机体到地球的转换,需要知道当前的姿态。反过来,从地球到机体,就是旋转矩阵的转置。
我曾经在项目里犯过一个错:把旋转矩阵的方向搞反了。结果飞机在仿真里一直往反方向飞。查了两天才发现,是矩阵乘法的顺序错了。记住:先转的矩阵放右边。
1.3 姿态表示方法
姿态表示有三种主流方法:欧拉角、四元数、旋转矩阵。每种都有优缺点。
| 方法 | 优点 | 缺点 |
|---|---|---|
| 欧拉角 | 直观,容易理解 | 有万向锁问题,不适合插值 |
| 四元数 | 无万向锁,计算效率高 | 不够直观,需要归一化 |
| 旋转矩阵 | 数学性质好,容易组合 | 9个参数,计算量大 |
我个人建议:内部计算用四元数,人机交互用欧拉角。为什么?四元数没有奇点,适合做姿态融合和插值。但你要给用户看姿态,总不能显示四个数吧?这时候转成欧拉角,一目了然。
四元数的定义:
q = [w, x, y, z]
其中w是标量部分,表示旋转角度的余弦。x,y,z是矢量部分,表示旋转轴的方向。归一化条件是w² + x² + y² + z² = 1。
避坑指南:我曾经在四元数归一化上吃过亏。每次更新完四元数,一定要做归一化。否则数值误差会累积,导致姿态发散。这个bug我查了整整一天。
欧拉角的旋转顺序也很重要。飞控里常用的是ZYX顺序:先偏航(Yaw),再俯仰(Pitch),最后横滚(Roll)。这个顺序对应了从地球坐标系到机体坐标系的转换。
1.4 传感器模型
传感器是飞控的眼睛。但眼睛会骗人,传感器也有噪声和偏差。
IMU(惯性测量单元)
IMU包含三轴加速度计和三轴陀螺仪。加速度计测比力,陀螺仪测角速度。
加速度计的模型:
a_meas = a_true + b_a + n_a
其中b_a是零偏,n_a是高斯白噪声。零偏会随时间漂移,这就是为什么需要融合其他传感器来校正。
陀螺仪的模型类似:
ω_meas = ω_true + b_g + n_g
我在项目中遇到过一个问题:陀螺仪的零偏估计不准,导致姿态估计一直在漂。后来发现是温度变化引起的。所以现在做IMU标定时,我都会做温度补偿。
GPS
GPS提供位置和速度信息。精度大概在米级,更新频率一般是5-10Hz。
GPS的模型:
pos_meas = pos_true + n_pos
vel_meas = vel_true + n_vel
n_pos和n_vel是高斯噪声。GPS的噪声和卫星数量、几何分布有关。在城市峡谷或树荫下,GPS信号会变差。
注意:GPS的更新频率低,而且有延迟。在快速机动时,单纯依赖GPS会跟不上。所以飞控里通常用IMU做高频预测,GPS做低频校正。这就是卡尔曼滤波的核心思想。
磁力计
磁力计测量地球磁场,用于确定航向。但它特别容易受干扰。
磁力计的模型:
mag_meas = R * mag_earth + b_mag + n_mag
R是旋转矩阵,b_mag是硬铁干扰,n_mag是噪声。硬铁干扰来自飞机上的铁磁材料,比如电机、电池。
我曾经在项目里遇到一个诡异的问题:飞机在室内转圈时,航向一直在漂。后来发现是旁边的钢筋柱子干扰了磁力计。从那以后,我每次做磁力计校准,都会找个空旷的地方。
知识体系总览
下面这张图,是我自己总结的本章知识结构。你可以把它当作一个思维导图来看。
这张图把四个核心模块串起来了。动力学模型是物理基础,坐标系是数学工具,姿态表示是计算方法,传感器是数据来源。四者缺一不可。
好了,这一章的内容就到这里。记住:基础不牢,地动山摇。把这些概念吃透了,后面的仿真和调参才能事半功倍。