第一章:多旋翼基础与动力学建模
各位同学好,我是你们这门课的老朋友。今天咱们聊聊多旋翼最底层的那些事儿——坐标系、姿态表示、动力学方程,还有电机螺旋桨模型。
说实话,我刚开始做飞控那会儿,觉得这些基础理论挺枯燥的。直到有一次在户外试飞,飞机莫名其妙地翻了个跟头……后来排查才发现,是坐标系定义搞混了。嗯,从那以后我再也不敢小看这一章了。
1.1 坐标系定义——飞控的“世界观”
搞多旋翼,第一件事就是统一坐标系。你想想看,如果机载传感器说“我往东偏了”,但控制器理解成“我往北偏了”,那飞机肯定乱飞。
我个人习惯用两种坐标系:
- 地球坐标系(NED):北-东-地。说白了,就是地面站看飞机的视角。北向是X,东向是Y,指向地心是Z。
- 机体坐标系(Body):前-右-下。机头方向是X_b,右翼是Y_b,垂直向下是Z_b。
这里有个坑:千万别把NED和机体系搞混。我曾经见过一个新手,把加速度计的读数直接当成了地球系下的加速度,结果姿态解算全乱套了。
核心关系:所有控制指令最终都要从地球系转换到机体系,才能驱动电机。这个转换靠的就是姿态矩阵。
1.2 欧拉角与四元数——姿态的两种“语言”
姿态描述,说白了就是告诉飞机“你现在脑袋朝哪”。常用的有两种方式:
欧拉角
三个角度:滚转(Roll)、俯仰(Pitch)、偏航(Yaw)。直观,但有个致命问题——万向锁。
我记得有一次做仿真,飞机俯仰到90度时,滚转和偏航突然分不清了。当时我还以为是代码bug,查了一整天……后来才意识到是欧拉角的数学缺陷。
避坑指南:我曾经在实机上用欧拉角做全姿态控制,结果在大机动时飞控直接崩溃。从那以后,内部运算我全改用四元数。
四元数
四个数:q0, q1, q2, q3。没有奇点,适合插值。但不够直观。
四元数的好处是:计算快、无奇点、适合滤波。坏处是:你没法一眼看出飞机姿态是啥样。
我的做法是:内部用四元数,输出给用户时转成欧拉角。这样既保证了计算稳定性,又方便调试。
1.3 刚体动力学方程——飞机为什么会飞
多旋翼本质上是一个刚体,受力和力矩作用。动力学方程分两部分:
- 平动方程:F = m * a。四个电机产生的总升力,减去重力,就是加速度。
- 转动方程:M = I * α。力矩导致角加速度,进而改变姿态。
这里有个关键点:电机产生的力矩不仅包括升力差,还有反扭矩。我刚开始做模型时,忽略了反扭矩,结果偏航控制完全不对。
个人经验:写动力学方程时,建议先把所有力和力矩列出来,再写方程。别急着写代码,纸上推一遍能省很多调试时间。
1.4 电机与螺旋桨模型——动力的来源
电机和螺旋桨是飞控的“执行器”。模型通常用一阶惯性环节近似:
// 电机响应模型
thrust = k_t * omega^2
torque = k_q * omega^2
// 一阶惯性
d_omega/dt = (omega_cmd - omega) / tau_motor
其中:
- k_t:升力系数
- k_q:扭矩系数
- tau_motor:电机时间常数
这里有个细节:升力和转速的平方成正比。所以电机转速从1000到2000,升力会变成4倍。我见过有人直接用线性模型,结果悬停油门算出来差一大截。
实际项目中的坑:我曾经用同一套参数换了不同桨叶,结果飞机抖得厉害。后来发现是k_t和k_q变了。所以每次换桨,都要重新标定这两个系数。
知识体系总览
下面这张图,是我自己总结的本章知识结构。你看一眼,心里就有谱了:
本章小结
这一章的内容,说白了就是回答三个问题:
- 飞机在哪?——坐标系定义
- 飞机朝哪?——姿态表示(欧拉角/四元数)
- 飞机怎么动?——动力学方程 + 电机模型
我个人觉得,这一章是整门课最重要的基础。你想想看,如果坐标系搞错了,后面所有的容错控制算法都是空中楼阁。我当年就是吃了这个亏,所以现在每次做新项目,第一件事就是检查坐标系定义。
给新手的建议:别急着写代码。先在纸上把坐标系画清楚,把动力学方程推一遍。这一步花的时间,会在后面十倍百倍地省回来。
好了,这一章就到这里。记住:基础不牢,地动山摇。下一章我们开始讲故障检测,但前提是你得把这一章的内容吃透。