3. 多旋翼飞行器动力学建模

姿态与位置控制器的设计质量,最终取决于模型对真实飞行器动态的刻画精度。多旋翼的动力学建模不是把几个公式堆在一起,而是要把“电机输入 → 旋翼气动力/力矩 → 机体六自由度运动 → 外部扰动叠加”这条因果链完整写清楚。本节按刚体动力学、牛顿-欧拉方程、旋翼升力与反扭矩、电机模型、风阻与外部扰动五个部分展开,最后合成一个可直接用于仿真和控制器设计的六自由度非线性模型。

一、坐标系与状态量定义

建模前必须先固定参照系,否则正负号会前后矛盾。本文采用如下约定,全文及图示保持一致:

  • 惯性系(大地系):原点固定于起飞点,z 轴竖直向上,x、y 轴水平,符合右手定则。重力加速度 g = 9.81 m/s²,方向沿 −z。
  • 机体系:原点位于飞行器质心,xb 指向机头,yb 指向右侧,zb 指向机体上方。四个旋翼按“X”型布局,编号 1 为右前、2 为右后、3 为左后、4 为左前。
  • 姿态角:滚转角 φ、俯仰角 θ、偏航角 ψ,采用 Z-Y-X 欧拉角序列,旋转矩阵 R 由机体到惯性系。

状态量取 12 维:位置 p = [x, y, z]T,速度 v = [vx, vy, vz]T,姿态角 η = [φ, θ, ψ]T,机体角速度 ω = [p, q, r]T。控制输入为四个电机的转速指令,经电机模型后得到实际转速 Ωi。

二、刚体动力学与牛顿-欧拉方程

多旋翼可视为一个质量恒定、外形对称的刚体。平动部分由牛顿第二定律在惯性系下描述:

m·v̇ = R·F_body + m·g_vec + F_drag + F_dist

其中 m 为总质量,Fbody 为机体系下旋翼产生的合外力,gvec = [0, 0, −g]T,Fdrag 为气动阻力,Fdist 为外部扰动(如阵风)。

转动部分由欧拉方程给出,注意必须在机体系下书写,因为转动惯量张量在机体系下近似为常量:

I·ω̇ = M_body − ω × (I·ω)

其中 I = diag(Ixx, Iyy, Izz) 为转动惯量矩阵,Mbody 为旋翼产生的合力矩,ω × (I·ω) 为陀螺耦合项。对于 X 型四旋翼,若轴距为 L,则各旋翼到质心的力臂在 xb、yb 方向的分量均为 L/√2。

姿态角与机体角速度之间的运动学关系为:

η̇ = W(η)·ω
W = [1  sinφ·tanθ  cosφ·tanθ
     0  cosφ        −sinφ
     0  sinφ/cosθ   cosφ/cosθ]

当 θ → ±90° 时该矩阵奇异,这是欧拉角表示的固有缺陷,实际控制器中常用四元数替代,但本节为便于理解仍采用欧拉角。

三、旋翼升力与反扭矩

单个旋翼在悬停或低速飞行时,升力近似与转速平方成正比:

F_i = k_F · Ω_i²
M_i = k_M · Ω_i²

其中 kF 为升力系数,kM 为反扭矩系数,二者由桨叶几何和空气密度决定。以 10 寸桨、3S 电池的典型四旋翼为例,kF ≈ 1.2×10⁻⁵ N·s²/rad²,kM ≈ 2.4×10⁻⁷ N·m·s²/rad²,比值 kM/kF ≈ 0.02 m,与桨径同量级。

四个旋翼的转向按对角同向配置:1、3 号逆时针,2、4 号顺时针。这样反扭矩在悬停时相互抵消,同时通过转速差产生偏航力矩。机体合外力与合力矩为:

F_body = [0, 0, ΣF_i]^T
M_body = [ L/√2·(F_1+F_2−F_3−F_4),
           L/√2·(−F_1+F_2+F_3−F_4),
           k_M/k_F·(F_1−F_2+F_3−F_4) ]^T

注意第三行偏航力矩的符号取决于各旋翼转向定义,建模时必须与电机编号、桨叶正反装一致,否则偏航通道会反向。

四、电机模型

无刷电机加电调的动态通常用一阶惯性环节近似,从转速指令 Ωcmd 到实际转速 Ω 的传递关系为:

Ω̇ = (Ω_cmd − Ω) / τ_m

时间常数 τm 典型值为 0.02~0.05 s,取决于电机电感、转子惯量和电调响应速度。若忽略电机动态,控制器在仿真中会表现得过于理想,实际飞行时容易出现高频振荡。因此六自由度模型中应保留这一环节,或至少用一阶滤波近似。

五、风阻与外部扰动

气动阻力在机体系下可写为:

F_drag = −0.5·ρ·C_d·A·|v_b|·v_b

其中 ρ 为空气密度,Cd 为阻力系数,A 为迎风面积,vb 为机体速度。低速时阻力较小,但高速前飞时不可忽略。外部扰动 Fdist 可建模为常值风、阵风或周期性扰动,用于测试控制器的抗扰能力。

六自由度非线性模型信号链 转速指令 Ω_cmd (4路) 电机一阶模型 τ_m ≈ 0.03 s 旋翼气动 F_i=k_F·Ω_i² 合力/合力矩 F_body, M_body 刚体动力学(牛顿-欧拉) 平动方程 m·v̇ = R·F_body + m·g + F_drag 输出:位置 p、速度 v 转动方程 I·ω̇ = M_body − ω×(I·ω) 输出:姿态 η、角速度 ω 风阻/扰动 F_drag, F_dist 姿态运动学 η̇ = W(η)·ω 12维状态输出 p, v, η, ω 状态反馈(控制器设计用) 输入 动态环节 气动/输出 扰动

六、六自由度非线性模型合成

将上述各部分联立,得到完整的六自由度非线性状态方程。以状态向量 x = [p, v, η, ω]T 表示:

ṗ = v
v̇ = (1/m)·R(η)·F_body + g_vec + (1/m)·F_drag + (1/m)·F_dist
η̇ = W(η)·ω
ω̇ = I⁻¹·[M_body − ω×(I·ω)]

其中 Fbody 和 Mbody 由四个旋翼转速经气动模型计算,转速由电机一阶模型从指令生成。该模型是非线性的,主要来源有三:旋转矩阵 R(η) 中的三角函数、欧拉方程中的陀螺耦合项 ω×(I·ω)、以及阻力项中的速度平方。

建模检查要点:完成模型后,建议做三项自检。第一,悬停平衡点验证:令 φ=θ=0,四个 Ωi 相等,检查 ΣFi 是否等于 mg,合力矩是否为零。第二,符号一致性:给 1 号电机加转速、3 号减转速,检查滚转力矩方向是否与预期一致。第三,能量趋势:无扰动自由响应下,系统总能量应单调不增(有阻尼时),若出现发散则说明符号或耦合项有误。
常见错误:把欧拉方程写成惯性系形式 I·ω̇ = M,忽略 ω×(I·ω) 项。在低速小角度飞行时该项较小,但大机动或高角速度下会显著影响姿态响应,导致仿真与实飞偏差。另一个常见错误是忽略电机时间常数,使控制器带宽设计过高,实际飞行时出现电机响应跟不上指令的滞后振荡。

该模型可直接用于 MATLAB/Simulink 或 Python 数值仿真。以 1 kg 四旋翼、轴距 0.25 m、Ixx=Iyy=0.005 kg·m²、Izz=0.009 kg·m² 为例,悬停时每个电机约需 4500 rad/s(约 43000 rpm 的电机轴转速,经减速或直接驱动视具体配置而定),此时 ΣFi ≈ 9.81 N,与重力平衡。给定期望位置和姿态轨迹,即可用该模型验证控制器在扰动下的跟踪误差和恢复时间。

建模的最终目的不是追求公式完备,而是让控制器设计有可依据的对象。模型精度与复杂度需要权衡:若只做悬停和低速位置控制,可忽略阻力高阶项和电机动态;若要做高速前飞或抗风测试,则必须保留阻力平方项和扰动输入通道。下一阶段将基于该模型展开姿态环和位置环的控制器设计。