四轴飞行器概述:飞行原理、坐标系定义、姿态表示方法
各位同学,欢迎来到《从零搭建四轴飞行器悬停系统》的第一课。
我是你们的讲师,一个在飞控圈子里摸爬滚打多年的老工程师。今天咱们不聊虚的,直接切入正题——四轴飞行器到底是怎么飞起来的?它的“身体”和“大脑”又是怎么定义方位的?
嗯,这部分内容看似基础,但说实话,我见过太多新手因为坐标系搞混,最后调试时炸机炸得莫名其妙。所以,咱们把地基打牢一点。
1. 飞行原理:它凭什么能悬停?
四轴飞行器,说白了就是四个电机带着螺旋桨转。但为什么它能稳稳地悬在空中,而不是像陀螺一样乱转?
核心原理其实就四个字:力矩平衡。
关键点:四轴飞行器通过调整四个电机的转速,产生不同的升力和扭矩,从而控制飞行器的姿态(俯仰、横滚、偏航)和位置(前后、左右、上下)。
我习惯把四个电机分成两组:
- 正桨组(M1、M3):顺时针旋转,产生向上的升力,同时产生逆时针的反扭矩。
- 反桨组(M2、M4):逆时针旋转,同样产生向上的升力,但产生顺时针的反扭矩。
你看,当四个电机转速相同时,两组反扭矩相互抵消,飞行器就不会自旋。这时候如果想让飞行器往前飞,只需要让后方的两个电机(M3、M4)转速快一点,前方两个电机(M1、M2)转速慢一点,机身就会前倾,升力产生水平分量,飞行器就往前走了。
我的经验:我在项目初期调试时,总以为电机转速差越大越好。结果一推油门,飞行器直接翻了180度。后来才明白,姿态控制的核心是“微调”,转速差通常只有几百转/分钟,而不是几千转。
为什么会这样?因为四轴飞行器是一个欠驱动系统——它只有四个输入(电机转速),却要控制六个自由度(三个位置 + 三个姿态)。所以,我们只能通过姿态的变化来间接控制位置。说白了,你想让它往东飞,得先让它往东倾斜。
2. 坐标系定义:给飞行器一个“世界观”
搞飞控,坐标系就是我们的“世界观”。坐标系搞错了,后面所有的算法都是白搭。
我们通常定义两个坐标系:
2.1 机体坐标系(Body Frame)
这个坐标系是“长”在飞行器上的。原点在飞行器的重心,三个轴的定义如下:
- X轴(Roll轴):指向飞行器机头方向。
- Y轴(Pitch轴):指向飞行器右侧(从机头看)。
- Z轴(Yaw轴):指向飞行器下方(符合右手定则)。
嗯,这里要注意:Z轴指向下方,这是航空领域的惯例。我刚开始做的时候,习惯性地把Z轴朝上,结果算出来的姿态角全是反的,查了三天bug才找到原因。
2.2 世界坐标系(World Frame / NED)
这个坐标系是“固定”在地面上的。通常采用北-东-地(NED)坐标系:
- X轴:指向正北。
- Y轴:指向正东。
- Z轴:指向地心(垂直向下)。
你想想看,为什么Z轴要向下?因为这样定义后,飞行器的重力加速度在Z轴上是正值(g = 9.8 m/s²),计算起来非常方便。如果你把Z轴朝上,重力加速度就是负值,每次都要手动加个负号,容易出错。
避坑指南:我曾经在移植PX4代码时,发现IMU数据怎么都对不上。后来发现,PX4用的是NED坐标系,而我用的传感器数据是ENU(东-北-天)坐标系。两个坐标系之间差了90度的旋转。所以,拿到传感器数据的第一件事,就是确认它的坐标系定义。
3. 姿态表示方法:怎么描述飞行器的“姿势”?
飞行器在空中是歪着还是正着,我们需要一个数学工具来描述它。常用的有三种方法:欧拉角、旋转矩阵、四元数。
3.1 欧拉角(Euler Angles)
欧拉角是最直观的表示方法。它用三个角度来描述飞行器的姿态:
- 横滚角(Roll, φ):绕X轴旋转的角度。飞行器左右倾斜。
- 俯仰角(Pitch, θ):绕Y轴旋转的角度。飞行器前后倾斜。
- 偏航角(Yaw, ψ):绕Z轴旋转的角度。飞行器机头指向。
欧拉角的优点是直观,一看就懂。但缺点也很致命——万向锁(Gimbal Lock)。当俯仰角接近±90度时,横滚和偏航会失去一个自由度,导致姿态解算失效。
我的建议:在悬停系统中,飞行器通常不会出现大角度俯仰(一般不超过30度),所以欧拉角完全够用。但如果你要做特技飞行(比如翻滚),那就必须用四元数了。
3.2 旋转矩阵(Rotation Matrix)
旋转矩阵是一个3x3的矩阵,它描述了从机体坐标系到世界坐标系的变换关系。说白了,就是告诉你:飞行器上的一个点,在世界坐标系中应该在哪里。
旋转矩阵的优点是没有奇点,可以表示任意姿态。但缺点是计算量大(9个元素),而且需要满足正交性约束(矩阵的逆等于它的转置)。
在实际工程中,我们很少直接使用旋转矩阵进行姿态更新,而是用它来做坐标变换。比如,把加速度计测到的机体加速度转换到世界坐标系中。
3.3 四元数(Quaternion)
四元数是我个人最喜欢的姿态表示方法。它用一个四维向量 q = [q0, q1, q2, q3] 来表示旋转,其中 q0 是实部,q1、q2、q3 是虚部。
四元数的优点太多了:
- 无万向锁:可以表示任意姿态。
- 计算高效:只需要4个元素,而且乘法运算比矩阵快。
- 易于插值:可以做平滑的姿态过渡(球面线性插值)。
但四元数也有个“坑”——它不够直观。你看到 q = [0.707, 0, 0.707, 0],能想象出飞行器是什么姿态吗?反正我不能。所以,我们通常把四元数转换成欧拉角来显示,或者用四元数做内部计算。
我的经验:在飞控代码中,我习惯用四元数做姿态解算和更新,只在最后输出控制量时,才把四元数转换成欧拉角。这样既避免了万向锁,又方便调试时观察。
4. 知识体系总览
好了,讲了这么多,咱们用一张图来总结一下本章的核心逻辑。这张图是我自己画的,涵盖了飞行原理、坐标系和姿态表示之间的关系。
这张图把本章的三个核心模块串起来了。你看,从左到右,从飞行原理到坐标系,再到姿态表示,其实是一个从“物理”到“数学”再到“工程实现”的过程。搞懂了这张图,你就掌握了四轴飞行器悬停系统的“世界观”和“方法论”。
总结一下:
- 飞行原理:靠力矩平衡实现悬停,靠转速差实现姿态控制。
- 坐标系:机体坐标系(随飞行器动)和世界坐标系(固定在地面),两者通过旋转矩阵或四元数相互转换。
- 姿态表示:欧拉角直观但有限制,四元数强大但抽象。工程中常用四元数做计算,欧拉角做显示。
嗯,这一章的内容就到这里。记住,这些概念不是背出来的,是用出来的。下一章我们会开始搭建硬件平台,到时候你会亲手把这些理论应用到实际中。