2. 无人机动力学建模:牛顿-欧拉方程、刚体动力学、螺旋桨推力与力矩模型、空气阻力影响
好,咱们进入第二章。说实话,动力学建模是整个飞控算法的基石。你想想看,如果你连无人机怎么动起来的都搞不清楚,那后面的位置控制、导航规划全都是空中楼阁。
我个人习惯,在开始写任何一行控制代码之前,先把物理模型在脑子里过一遍。这章我会把牛顿-欧拉方程、刚体动力学、螺旋桨模型和空气阻力这几个核心点串起来讲。嗯,咱们一个一个来。
2.1 牛顿-欧拉方程:从物理直觉到数学表达
多旋翼无人机本质上是一个刚体。它在空中飞,受两个东西支配:一个是力,一个是力矩。力决定它怎么平移,力矩决定它怎么旋转。这就是牛顿-欧拉方程的核心思想。
我把它拆成两部分来看:
- 牛顿方程(平动部分):
m * a = F。质量乘以加速度等于合外力。这里的力包括重力、螺旋桨推力、空气阻力。 - 欧拉方程(转动部分):
J * α + ω × (J * ω) = M。惯性张量乘以角加速度,加上陀螺力矩项,等于合外力矩。
你可能会问,为什么欧拉方程里多了一个 ω × (J * ω)?
这个其实叫陀螺效应。我在做第一版飞控的时候,就吃过这个亏。当时只考虑了简单的转动惯量,忽略了交叉耦合项。结果飞机一做大机动,姿态就乱跳。后来加上这一项,才稳下来。
核心公式(机体坐标系下):
m * (v̇ + ω × v) = F_ext
J * ω̇ + ω × (J * ω) = M_ext
其中 v 是速度,ω 是角速度,J 是惯性张量矩阵。
2.2 刚体动力学:坐标系与旋转矩阵
搞动力学建模,坐标系绕不开。我一般用两个坐标系:
- 地球固连坐标系(NED):北东地,用来描述位置和航向。
- 机体坐标系(Body):前右下,固定在飞机上,传感器数据都在这个系里。
两个坐标系之间怎么转换?靠旋转矩阵。说白了,就是把机体的推力投影到地面系,把地面的重力投影到机体系。
我记得有一次调试,发现飞机悬停时高度一直在漂。查了半天,发现是旋转矩阵算错了,把重力方向搞反了。嗯,这种低级错误,犯过一次就再也不会忘了。
我的小技巧: 用四元数代替欧拉角做旋转更新。欧拉角有万向锁问题,四元数没有。虽然四元数看着抽象,但写代码时反而更简洁。
2.3 螺旋桨推力与力矩模型
螺旋桨是无人机的执行器。推力怎么算?力矩怎么来?
简单说,螺旋桨旋转产生两个东西:
- 推力 T:垂直于桨盘平面向上。公式是
T = C_T * ρ * n² * D⁴。其中 C_T 是推力系数,ρ 是空气密度,n 是转速,D 是桨径。 - 反扭矩 Q:与旋转方向相反。公式是
Q = C_Q * ρ * n² * D⁵。
你看,推力和力矩都和转速的平方成正比。这意味着什么?意味着你油门稍微动一点,推力变化就很剧烈。所以控制器的增益不能太大,否则容易震荡。
我在项目中遇到过一个问题:同样的PWM值,换了一副桨,飞机就飞不起来了。为什么?因为桨的直径和螺距变了,C_T 和 C_Q 全变了。所以换桨之后,一定要重新标定模型参数。
避坑指南: 我曾经忽略过螺旋桨的安装方向。四旋翼的相邻桨必须一正一反。如果装反了,偏航力矩会互相抵消,飞机根本转不了向。别问我怎么知道的...
2.4 空气阻力影响
很多人做仿真时,喜欢把空气阻力忽略掉。但实际飞行中,阻力影响很大。
阻力分两种:
- 平动阻力:飞机往前飞,空气迎面撞上来。公式是
F_drag = 0.5 * ρ * C_d * A * v²。C_d 是阻力系数,A 是迎风面积。 - 转动阻力:飞机旋转时,桨叶和机身受到的空气摩擦。这个一般用阻尼系数近似。
你想想看,速度越快,阻力越大。而且阻力跟速度平方成正比。所以高速飞行时,阻力会显著影响位置控制的精度。
我建议在仿真模型里一定要加上阻力项。否则你仿真里调好的参数,拿到真机上大概率会抖。为什么?因为仿真里没有阻尼,控制器增益可以调得很大。真机上有空气阻尼,增益一大就震荡。
完整的动力学模型(简化形式):
位置环: m * p̈ = R * T_total + m * g - D * v̇
姿态环: J * ω̇ = M_total - ω × (J * ω) - K_d * ω
其中 D 是平动阻尼矩阵,K_d 是转动阻尼系数。
2.5 模型参数辨识:从理论到实践
理论模型有了,但参数怎么来?比如惯性张量 J、推力系数 C_T、阻力系数 C_d。这些值不能靠猜。
我常用的方法:
- CAD 估算:用 SolidWorks 或 Fusion 360 建好模型,直接导出质量和惯性张量。精度够用。
- 悬停测试标定推力系数:让飞机悬停,记录油门值和实际推力。用最小二乘法拟合 C_T。
- 自由衰减实验标定阻尼:给飞机一个初始角速度,让它自由旋转,记录衰减曲线。阻尼系数就藏在衰减时间常数里。
说实话,参数辨识是个细活。我当年花了整整一周才把一架 F450 的模型参数标定完。但一旦标好了,后面的控制器设计就顺风顺水。
我的经验: 模型不需要100%精确。控制算法本身有一定的鲁棒性。你只要把主要项(推力、重力、主要惯性)搞准了,剩下的交给反馈控制去补偿就行。
2.6 本章小结
这一章我们走了一遍无人机动力学建模的完整流程。从牛顿-欧拉方程出发,到刚体动力学、螺旋桨模型、空气阻力,最后聊了参数辨识。
我个人觉得,建模这件事,功夫在诗外。你花在理解物理过程上的时间,最终都会在调试代码时回报给你。别急着写代码,先把模型想清楚。
下一章,我们会基于这个模型,开始设计位置控制器。到时候你会发现,模型越清晰,控制器设计就越有底气。
好,今天就到这里。有什么问题,咱们讨论区见。