2. 无人机动力学建模:牛顿-欧拉方程、刚体动力学、螺旋桨推力与力矩模型、空气阻力影响

好,咱们进入第二章。说实话,动力学建模是整个飞控算法的基石。你想想看,如果你连无人机怎么动起来的都搞不清楚,那后面的位置控制、导航规划全都是空中楼阁。

我个人习惯,在开始写任何一行控制代码之前,先把物理模型在脑子里过一遍。这章我会把牛顿-欧拉方程、刚体动力学、螺旋桨模型和空气阻力这几个核心点串起来讲。嗯,咱们一个一个来。

2.1 牛顿-欧拉方程:从物理直觉到数学表达

多旋翼无人机本质上是一个刚体。它在空中飞,受两个东西支配:一个是力,一个是力矩。力决定它怎么平移,力矩决定它怎么旋转。这就是牛顿-欧拉方程的核心思想。

我把它拆成两部分来看:

  • 牛顿方程(平动部分)m * a = F。质量乘以加速度等于合外力。这里的力包括重力、螺旋桨推力、空气阻力。
  • 欧拉方程(转动部分)J * α + ω × (J * ω) = M。惯性张量乘以角加速度,加上陀螺力矩项,等于合外力矩。

你可能会问,为什么欧拉方程里多了一个 ω × (J * ω)

这个其实叫陀螺效应。我在做第一版飞控的时候,就吃过这个亏。当时只考虑了简单的转动惯量,忽略了交叉耦合项。结果飞机一做大机动,姿态就乱跳。后来加上这一项,才稳下来。

核心公式(机体坐标系下):

m * (v̇ + ω × v) = F_ext
J * ω̇ + ω × (J * ω) = M_ext

其中 v 是速度,ω 是角速度,J 是惯性张量矩阵。

2.2 刚体动力学:坐标系与旋转矩阵

搞动力学建模,坐标系绕不开。我一般用两个坐标系:

  1. 地球固连坐标系(NED):北东地,用来描述位置和航向。
  2. 机体坐标系(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。这些值不能靠猜。

我常用的方法:

  1. CAD 估算:用 SolidWorks 或 Fusion 360 建好模型,直接导出质量和惯性张量。精度够用。
  2. 悬停测试标定推力系数:让飞机悬停,记录油门值和实际推力。用最小二乘法拟合 C_T。
  3. 自由衰减实验标定阻尼:给飞机一个初始角速度,让它自由旋转,记录衰减曲线。阻尼系数就藏在衰减时间常数里。

说实话,参数辨识是个细活。我当年花了整整一周才把一架 F450 的模型参数标定完。但一旦标好了,后面的控制器设计就顺风顺水。

我的经验: 模型不需要100%精确。控制算法本身有一定的鲁棒性。你只要把主要项(推力、重力、主要惯性)搞准了,剩下的交给反馈控制去补偿就行。

2.6 本章小结

这一章我们走了一遍无人机动力学建模的完整流程。从牛顿-欧拉方程出发,到刚体动力学、螺旋桨模型、空气阻力,最后聊了参数辨识。

我个人觉得,建模这件事,功夫在诗外。你花在理解物理过程上的时间,最终都会在调试代码时回报给你。别急着写代码,先把模型想清楚。

下一章,我们会基于这个模型,开始设计位置控制器。到时候你会发现,模型越清晰,控制器设计就越有底气。

好,今天就到这里。有什么问题,咱们讨论区见。