2. 动力学基础:多旋翼刚体动力学模型、横滚力矩与推力关系、坐标系定义与转换
各位同学,欢迎来到第二章。
上一章我们聊了飞控的整体架构,算是打了个底。这一章,咱们得把「地基」夯实了。说白了,就是搞清楚飞机为什么会动,怎么动。
我个人习惯,做任何控制算法之前,先把物理模型吃透。你想想看,连飞机怎么转的都不知道,你怎么去调PID?
2.1 坐标系定义与转换
做飞控,第一件事就是定坐标系。没有坐标系,你连「往哪飞」都说不清楚。
两个核心坐标系:
- 地球坐标系(NED):北-东-地。原点在地面,X轴指北,Y轴指东,Z轴指向地心。这是我们的「绝对参考系」。
- 机体坐标系(Body):原点在飞机重心,X轴指向机头,Y轴指向右翼,Z轴指向下。这是飞机的「自身视角」。
嗯,这里要注意:所有传感器(IMU、磁力计)测量的数据,都是在机体坐标系下的。但你控制飞机往北飞,得用地球坐标系。所以,坐标转换是绕不开的坎。
核心转换工具:旋转矩阵
从机体坐标系到地球坐标系,通常用欧拉角(横滚φ、俯仰θ、偏航ψ)构建旋转矩阵。顺序是:Z-Y-X(偏航→俯仰→横滚)。
我记得刚入行时,有一次把旋转顺序搞反了,结果飞机一解锁就往地上栽。从那以后,我每次写坐标转换代码,都会在注释里把顺序写清楚。
欧拉角旋转矩阵(Z-Y-X顺序):
R = Rz(ψ) * Ry(θ) * Rx(φ)
其中:
Rz(ψ) = [cosψ -sinψ 0; sinψ cosψ 0; 0 0 1]
Ry(θ) = [cosθ 0 sinθ; 0 1 0; -sinθ 0 cosθ]
Rx(φ) = [1 0 0; 0 cosφ -sinφ; 0 sinφ cosφ]
避坑指南:我曾经在STM32上直接算浮点矩阵,结果CPU占用率飙到80%。后来改用四元数,计算量直接降了一半。如果你的MCU性能有限,建议用四元数代替欧拉角做姿态解算。
2.2 多旋翼刚体动力学模型
搞清楚了坐标系,咱们来看看飞机怎么动。
多旋翼可以看作一个六自由度刚体:三个平动(X、Y、Z方向移动),三个转动(横滚、俯仰、偏航)。
动力学方程(牛顿-欧拉形式):
平动方程:
m * a = F_gravity + F_thrust + F_drag
转动方程:
I * ω_dot = M - ω × (I * ω)
这里:
- m:飞机质量
- I:惯性张量(3x3矩阵)
- ω:角速度(机体坐标系下)
- M:外力矩(横滚、俯仰、偏航力矩)
说白了,平动方程告诉你「推油门飞机就往上走」,转动方程告诉你「给横滚力矩飞机就侧倾」。但实际飞起来,这两个是耦合的——你横滚时,升力方向变了,飞机也会水平移动。
注意:惯性张量I不是对角矩阵!虽然我们通常假设飞机是对称的,但实际装配时,电池、相机等负载会导致重心偏移。我见过一个项目,因为没校准重心,横滚响应总是慢半拍,调了三天PID都没用。
2.3 横滚力矩与推力关系
终于到重点了。横滚控制,说白了就是让飞机绕X轴(机头方向)旋转。
横滚力矩怎么来的?
对于四旋翼(X型布局),横滚力矩由左右两侧电机的推力差产生:
M_roll = L * (T_right - T_left)
其中:
- L:电机到重心的力臂长度
- T_right:右侧两个电机的总推力
- T_left:左侧两个电机的总推力
你想想看,右侧推力大,左侧推力小,飞机自然就往左侧滚。就这么简单。
推力与PWM的关系:
电机推力与PWM占空比近似成二次关系:
T = k * (PWM - PWM_min)²
这里的k是电机-桨叶组合的效率系数。不同桨叶、不同电机,k值都不一样。
实际工程中的坑:
我曾经用同一款电机配不同品牌的桨叶,结果k值差了15%。这意味着同样的PWM输出,实际推力不一样。所以,每换一次桨叶,都要重新标定推力曲线。
2.4 知识体系总览
为了让大家更直观地理解本章的知识结构,我画了一张图:
2.5 实际工程中的注意事项
理论讲完了,咱们聊聊实际干活时要注意什么。
- 坐标系方向要统一:我见过有人把Z轴朝上定义,结果加速度计数据符号全反了。建议全团队统一用NED坐标系。
- 力臂长度L要实测:别用CAD图纸上的理论值。实际装配后,电机位置可能有偏差。我习惯用卡尺量三次取平均。
- 推力曲线要分段拟合:低油门和高油门的k值不一样。我一般分三段(0-30%,30-70%,70-100%)分别拟合,精度能提高不少。
- 惯性张量可以估算:如果没条件实测,可以用SolidWorks等软件估算。但记得加上电池、相机等负载的重量分布。
一个小技巧:调试时,可以用「悬停测试」来验证动力学模型。让飞机悬停,记录各电机PWM值。如果左右两侧PWM差超过5%,说明重心偏了或者力臂不对称。
好了,这一章的内容就到这里。动力学基础是飞控的「内功」,练好了,后面调PID、做轨迹规划才能得心应手。
公众号:蓝海资料掘金营,微信deep3321