news 2026/10/4 9:28:24

四旋翼无人机数学模型推导:从牛顿-欧拉到状态空间仿真

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
四旋翼无人机数学模型推导:从牛顿-欧拉到状态空间仿真

前阵子帮一位师弟调四旋翼的悬停效果,PID参数在真机上反反复复折腾了一周,一会儿低头,一会儿抖舵,最后把问题定位到机架的重心偏置和推力系数不准确上。那时候我就跟他说:如果你手里有一个靠谱的四旋翼无人机数学模型,很多参数可以先在仿真里跑明白,而不是拿着真机一遍遍试错。

这篇博客我打算把四旋翼无人机的数学模型从头到尾推一遍,用最朴素的牛顿-欧拉方法,覆盖从坐标系选择、旋转矩阵推导,到线运动方程、角运动方程,最后整理成可以直接用于仿真的状态空间模型,并给出常见参数和验证方法。这是做飞控、做仿真、写毕业论文的人必备的一块基础工作。尤其是如果你打算做控制器设计、状态估计或者故障诊断,这个模型就是你所有工作的地基。我会尽量把每一步都写清楚,包括那些教材里经常一笔带过、但实际推导时特别容易卡壳的细节。

1. 建模前必须想清楚的三件事(坐标系、方法、姿态)

1.1 为什么先定坐标系:机体坐标系与地面坐标系的物理意义

很多新手拿到四旋翼的第一反应是:直接列运动方程。但我在实际推导中最大的体会是,坐标系没定清楚,后面全是坑。

四旋翼的动力学天然涉及两套坐标系。一套是地面坐标系,通常叫NED坐标系,也就是北东地(North-East-Down),x轴指向北,y轴指向东,z轴指向下。这是导航和航线规划用的坐标系。另一套是机体坐标系,固定在小飞机上,原点在重心,x轴指向机头,y轴指向右翼,z轴指向机腹方向。

为什么需要两套坐标系?因为力的产生和运动状态的测量分散在这两套坐标系里。陀螺仪、加速度计装在机身上,测量的是体轴系下的角速度和加速度;而GPS、高度计、航线规划都在地面坐标系里。你要描述飞机的运动轨迹,必须把机体坐标系下的力投影到地面坐标系,或者把地面坐标系下的位置换算到机体系下。没有谁好谁坏,这就是一个坐标系变换问题。

这里要特别强调,很多文献里z轴是向上的(East-North-Up,ENU),但在四旋翼飞控里,NED是绝对主流。Pixhawk、PX4、APM这些开源飞控全部用NED。第一次建模的时候如果没注意到这个细节,你推导出来的重力符号会是反的,姿态解算也会出问题。我的建议是,如果你做四旋翼,直接跟NED走,别在这种地方标新立异。

1.2 建模方法选型:为什么我选牛顿-欧拉而不是拉格朗日

建立四旋翼动力学模型主要有两条路线:牛顿-欧拉法和拉格朗日法。

拉格朗日法的核心是写出系统的动能和势能,然后通过拉格朗日方程推导运动方程。它的好处是从能量角度出发,不需要处理约束力,非常适合带关节约束的机械系统,比如机械臂。

但四旋翼本质上是一个无约束的自由刚体在三维空间中飞行,它的所有运动都由合外力和合外力矩决定。这个时候用牛顿-欧拉法是最直观的:把一个刚体拿出来,把每个旋翼产生的推力、反扭矩、重力、陀螺力矩全部画出来,然后直接写运动方程。

两套方法推出来的结果当然是一样的,但牛顿-欧拉法在工程上更友好。因为你在后面做控制器设计、做故障诊断时,需要明确知道“这个力矩是由哪几个旋翼贡献的”,牛顿-欧拉法的每一项都有明确的物理对应。拉格朗日法虽然数学上很优雅,但中间会引入广义坐标和广义力,反而增加了理解的负担。

我这几年看过的论文里,真正做四旋翼建模和控制的基本都用牛顿-欧拉法,这是个经验规律,不是数学上的必然。所以我强烈建议入门者从牛顿-欧拉法入手。

1.3 姿态描述选型:欧拉角的适用边界在哪里

姿态描述方式有三个选项:欧拉角、方向余弦矩阵、四元数。

方向余弦矩阵就是旋转矩阵,用来做坐标变换很方便,但9个变量加上正交约束,不适合直接作为控制器变量。

四元数是飞控里最常用的姿态表示,因为它只有4个参数,没有奇异性,计算效率高。但四元数的物理意义不够直观,你很难直接说“四元数(0.707, 0, 0.707, 0)对应多大的俯仰角”。

欧拉角的优势是直观,三个角度分别对应横滚、俯仰、偏航,跟飞手遥控器的通道一一对应。所以在建模阶段,几乎所有教程和论文都用欧拉角来表达姿态。

但欧拉角有个著名的坑,叫万向节锁。当俯仰角达到正负90度时,横滚和偏航的旋转轴重合,会丢失一个自由度。对四旋翼来说,正常飞行时俯仰角很少超过30度,所以用欧拉角建模完全够用。但如果以后做特技飞行、翻滚动作,就必须切换到四元数模型。

我的思路是:建模和基础控制用欧拉角,方便理解和调参;等到做高级飞行动作时再升级成四元数。这两份模型我都维护过,转换的坑后面我会专门写一节。

2. 运动学建模:旋转矩阵和姿态角速度的换算

2.1 旋转矩阵完整推导:Z-Y-X顺序下的欧拉角变换

运动学的第一个核心任务是建立机体坐标系和地面坐标系之间的变换关系,也就是求旋转矩阵。

我采用的欧拉角旋转顺序是Z-Y-X,这是航空领域的标准顺序:先绕z轴旋转偏航角ψ,再绕新的y轴旋转俯仰角θ,最后绕最新的x轴旋转横滚角φ。注意,这里的每次旋转都是绕旋转后的新轴进行的,这叫内旋方式。

三个单轴旋转矩阵分别是这样的:

  • 绕z轴旋转ψ: Rz = [cosψ, -sinψ, 0; sinψ, cosψ, 0; 0, 0, 1]

  • 绕y轴旋转θ: Ry = [cosθ, 0, sinθ; 0, 1, 0; -sinθ, 0, cosθ]

  • 绕x轴旋转φ: Rx = [1, 0, 0; 0, cosφ, -sinφ; 0, sinφ, cosφ]

总的旋转矩阵按照Z-Y-X顺序相乘,得到从机体坐标系到地面坐标系的变换矩阵:

R_eb = Rz(ψ) * Ry(θ) * Rx(φ)

展开之后就是:

R_eb = [ cosθcosψ, sinφsinθcosψ - cosφsinψ, cosφsinθcosψ + sinφsinψ ] [ cosθsinψ, sinφsinθsinψ + cosφcosψ, cosφsinθsinψ - sinφcosψ ] [ -sinθ, sinφcosθ, cosφcosθ ]

这里我想多说一句,旋转矩阵的列向量有明确的物理意义。第一列是机体x轴在地面系中的投影,第二列是机体y轴在地面系中的投影,第三列是机体z轴在地面系中的投影。这个理解非常有用,因为后面计算推力在NED系下的投影时,就是直接取第三列。

旋转顺序不是可以随便选的。旋转不满足交换律,先绕y轴转30度再绕x轴转30度,和先绕x轴转30度再绕y轴转30度,结果是完全不同的。你看生活里手机横竖屏切换就知道,先横着转再竖着转,跟先竖着转再横着转,最终屏幕朝向不一样。所以推导之前一定要在文档里明确标注旋转顺序,否则模型和别人对不上。

2.2 姿态角速度到机体角速度的变换:欧拉角速率那点事

运动学的第二个任务是把欧拉角的变化率换算成机体的滚转角速度p、俯仰角速度q和偏航角速度r。

初学者最容易在这里犯错,以为欧拉角导数就是机体角速度。真不是。欧拉角是绕三个不同的中间坐标系轴旋转的,而p、q、r是绕机体坐标系三个轴的角速度分量,两者之间隔着一个变换矩阵。

推导的思路是:把三个欧拉角速度分别投影到机体坐标系上,然后叠加。

绕z轴的偏航角速度ψ̇,方向是地面系z轴,投影到机体系时需要经过Rx和Ry的旋转;绕y轴的俯仰角速度θ̇,方向是中间坐标系的y轴,投影到机体系时只需要经过Rx;绕x轴的横滚角速度φ̇,方向和机体x轴重合,直接就是φ̇。

整理之后得到:

p = φ̇ - ψ̇ sinθ q = θ̇ cosφ + ψ̇ sinφ cosθ r = -θ̇ sinφ + ψ̇ cosφ cosθ

写成矩阵形式:

[p, q, r]^T = [1, 0, -sinθ; 0, cosφ, sinφcosθ; 0, -sinφ, cosφcosθ] * [φ̇, θ̇, ψ̇]^T

这个变换矩阵在俯仰角θ等于正负90度时会奇异,这就是欧拉角的万向节锁问题在数学上的体现。做姿态解算时,如果飞机做了大角度俯仰动作,这个矩阵会变成奇异矩阵,导致欧拉角速率求解失败。这也是为什么飞控内部姿态解算要用四元数。

2.3 运动学方程的完整状态表达

把位置和姿态的运动学放到一起,就得到运动学方程组:

ẋ = u ẏ = v ż = w φ̇ = p + q sinφ tanθ + r cosφ tanθ θ̇ = q cosφ - r sinφ ψ̇ = q sinφ / cosθ + r cosφ / cosθ

前面三个是位置速度关系,后面三个是角速度关系。这组方程本身不包含力,只描述几何关系,所以叫运动学。

在实际工程中,这组方程经常作为状态方程的前半部分写在系统里。我要提醒你一件事,当你看到角速度转换矩阵里出现tanθ和1/cosθ这些项时,就要意识到俯仰角接近90度时数值会爆炸。所以飞行控制在大角度状态下一般都会切换到四元数姿态表示。

3. 动力学建模:力和力矩如何变成加速度

3.1 四旋翼的力和力矩是怎么产生的

动力学建模的前提是搞清楚有哪几个力和力矩作用在机架上。

首先是旋翼推力。单个旋翼旋转时产生的推力近似与转速的平方成正比,写成T_i = k * ω_i²,其中k是推力系数,和桨的形状、直径、空气密度有关。四个旋翼产生四个推力,方向都沿机体坐标系的z轴负方向。

其次是反扭矩。旋翼旋转时会带动空气,空气反过来对机身产生一个反扭矩,大小近似为M_i = d * ω_i²,d是反扭矩系数。反扭矩的方向与旋翼旋转方向相反,这就是为什么四旋翼要使用反转对:1号电机和3号电机逆时针旋转,2号和4号电机顺时针旋转,这样悬停时四个反扭矩可以相互抵消。

第三是陀螺力矩。当电机高速旋转时,如果把机架转动一个方向,电机的角动量变化会产生一个作用于机架的力矩,这叫陀螺效应。快速做俯仰或横滚动作时,这个力矩会很明显。

第四是重力,作用在地面系z轴正方向(因为NED下z向下)。

最后是气动阻力,在低速飞行时通常被忽略,但高速飞行时必须考虑。

3.2 线动量方程:重力、推力和加速度的关系

线动量方程的本质是牛顿第二定律,ma = F。但这里的加速度必须是地面坐标系下的惯性加速度,而推力是沿机体坐标系z轴的,所以需要通过旋转矩阵做投影。

假设四个旋翼的总推力为T = T1 + T2 + T3 + T4,在机体坐标系下推力向量为[0, 0, -T]^T。把它通过旋转矩阵投影到地面坐标系:

[0, 0, -T]^T 经过R_eb变换后,等于取R_eb的第三列乘以-T: F_thrust_e = [-T(cosφ sinθ cosψ + sinφ sinψ)] [-T(cosφ sinθ sinψ - sinφ cosψ)] [-T cosφ cosθ]

重力在地面系下是[0, 0, mg]^T,其中g是重力加速度。

于是得到线运动方程:

m ẍ = -T(cosφ sinθ cosψ + sinφ sinψ) m ÿ = -T(cosφ sinθ sinψ - sinφ cosψ) m z̈ = mg - T cosφ cosθ

这里最让人不习惯的是,z向下时重力是正的mg,推力是负方向。所以悬停时T = mg / (cosφ cosθ),在水平姿态下就是T = mg,四个旋翼各分mg/4。这个式子非常常用,做新手调参时,先把每个旋翼的目标推力算出来,就能估计悬停油门在哪。

3.3 角动量方程:机体坐标系下的欧拉方程

角动量方程是动力学里最复杂的部分。惯性坐标系下角动量定理很简单,麻烦的是惯性张量在惯性系下是变化的,所以通常在机体坐标系下研究角运动。

四旋翼结构近似对称,所以惯性张量可以近似为对角阵:

J = diag(Ixx, Iyy, Izz)

机体坐标系下的欧拉方程为:

J ω̇ + ω × (J ω) = M

写成三个分量方程:

Ixx ṗ = (Iyy - Izz) q r + Mx Iyy q̇ = (Izz - Ixx) p r + My Izz ṙ = (Ixx - Iyy) p q + Mz

这里Mx, My, Mz分别是作用在机体系三个轴上的外力矩。对十字形四旋翼,当1号、3号电机逆时针,2号、4号顺时针时:

Mx = k l (ω2² - ω4²) My = k l (ω3² - ω1²) Mz = d (ω1² - ω2² + ω3² - ω4²)

其中l是机臂长度,也就是从重心到电机转轴的距离。Mx由左右两边的推力差产生,My由前后两边的推力差产生,Mz由四个反扭矩的代数差产生。

如果你想建立更完整的模型,可以在角动量方程中加入电机转子的陀螺项。每个电机的角动量为J_rot * ω_i,当机体旋转时,这个角动量变化会产生陀螺力矩。但很多控制论文在悬停工作点附近会把这项忽略掉,实测下来影响也确实不大。

3.4 完整非线性动力学方程组

把运动学和动力学合在一起,我习惯把完整的非线性模型写成以下形式:

ẍ = - (k/m)(ω1² + ω2² + ω3² + ω4²)(cosφ sinθ cosψ + sinφ sinψ) ÿ = - (k/m)(ω1² + ω2² + ω3² + ω4²)(cosφ sinθ sinψ - sinφ cosψ) z̈ = g - (k/m)(ω1² + ω2² + ω3² + ω4²) cosφ cosθ φ̈ = [ (Iyy - Izz) θ̇ψ̇ + k l (ω2² - ω4²) ] / Ixx θ̈ = [ (Izz - Ixx) φ̇ψ̇ + k l (ω3² - ω1²) ] / Iyy ψ̈ = [ (Ixx - Iyy) φ̇θ̇ + d (ω1² - ω2² + ω3² - ω4²) ] / Izz

这里的变量是六个:位置x, y, z和姿态角φ, θ, ψ,输入是四个旋翼转速ω1, ω2, ω3, ω4。这就是四旋翼最典型的欠驱动特性:六个自由度,只有四个输入,所以四旋翼不能独立控制每个自由度,必须有耦合。这也是为什么无人机控制比固定翼更复杂、也更需要数学模型支撑。

方程里有一个很容易被忽视的点是,下标顺序必须跟你画的电机布局保持一致。假设换一种电机转向布局,Mz那项的加减号就会全部反过来。这一点在复现论文时尤其要小心,很多论文不画电机转向图,直接给公式,你抄过来就会符号反着。

4. 最终模型长什么样:状态空间方程与参数实例

4.1 状态变量怎么选,输入怎么定义

数学模型最终要整理成适合仿真和控制的形式。控制里最常用的是状态空间方程,先定义状态向量。

状态量选12个维度:

x_vec = [x, y, z, φ, θ, ψ, ẋ, ẏ, ż, p, q, r]^T

其中[x, y, z]是NED系下的位置,[φ, θ, ψ]是姿态角,[ẋ, ẏ, ż]是NED系下的速度,[p, q, r]是体轴系下的角速度。

输入向量一般有两种取法。一种直接用四个旋翼转速的平方U = [ω1², ω2², ω3², ω4²],好处是和底层电机控制直接对应。另一种先合成虚拟控制量:

U1 = k (ω1² + ω2² + ω3² + ω4²) // 总推力 U2 = k l (ω2² - ω4²) // 横滚力矩 U3 = k l (ω3² - ω1²) // 俯仰力矩 U4 = d (ω1² - ω2² + ω3² - ω4²) // 偏航力矩

这个交换矩阵的好处是,位置和姿态方程可以解耦成四个通道,做PID控制器时一目了然。确实,实际做控制器时,姿态环基本都用U1到U4这四个虚拟控制量来设计。需要注意的是,U1要除以m之后再代入加速度方程,而U2到U4代入角加速度方程时还要除以对应的转动惯量。

4.2 一套可以直接动手仿真的参数实例

建模完成之后,参数怎么来?理论计算加实验拟合。推力系数k和反扭矩系数d可以通过拉力测试台实测,转动惯量可以通过摆锤法或者CAD模型估算。这里给一套比较典型的四旋翼参数,适合做第一版仿真验证:

参数符号数值单位
质量m1.3kg
重力加速度g9.81m/s²
机臂长度l0.23m
x轴惯量Ixx7.7e-3kg·m²
y轴惯量Iyy7.7e-3kg·m²
z轴惯量Izz1.3e-2kg·m²
推力系数k1.4e-5N/(rad/s)²
反扭矩系数d2.0e-7N·m/(rad/s)²

这套参数参考了常见350级别四旋翼的数据,虽然不是某个具体机型的精确值,但数量级是对的。你拿到自己的真机后,建议用拉力计重新测量k和d,这两个参数对模型的准确性影响最大。

拿到参数后的第一件事是验证悬停工作点。用简单脚本算一下悬停时每个旋翼的角速度:

import numpy as np m = 1.3 g = 9.81 k = 1.4e-5 # 悬停时总推力等于重力,四个旋翼均分 T_hover = m * g omega_hover = np.sqrt(T_hover / (4 * k)) print(omega_hover) # 大约 477 rad/s print(T_hover) # 12.753 N,和 m*g 一致

算出来大概是477 rad/s。如果你实测的悬停油门对应的角速度和这个值差距很大,那说明你的推力系数k可能标定得有问题。这种交叉验证非常有用,可以帮助你在建模阶段就发现参数异常。

4.3 状态空间方程的完整矩阵形式

把上面的方程整理成标准状态空间形式。完整12维状态方程虽然看着长,但对后续做线性化、做LQR、做卡尔曼滤波都很有用。下面是整理好的标准形式:

状态方程:

  • ẋ = ẋ
  • ẏ = ẏ
  • ż = ż
  • φ̇ = p
  • θ̇ = q
  • ψ̇ = r
  • ẍ = -U1 (cosφ sinθ cosψ + sinφ sinψ) / m
  • ÿ = -U1 (cosφ sinθ sinψ - sinφ cosψ) / m
  • z̈ = g - U1 cosφ cosθ / m
  • ṗ = [ (Iyy - Izz) q r + U2 ] / Ixx
  • q̇ = [ (Izz - Ixx) p r + U3 ] / Iyy
  • ṙ = [ (Ixx - Iyy) p q + U4 ] / Izz

这个模型就是后续所有工作的基础。做姿态控制时,重点关注后六个方程;做导航控制时,前六个方程负责把姿态和位置接起来。

顺便回应一个经常被问到的问题:数学模型必须有最终图吗?有些人搜“数学模型应该有什么图”,其实最终模型是一组方程,不一定非要画成结构框图。但工程上,我们通常补一张系统结构图,把“位置环→姿态环→电机→机体动力学→传感器”这条链路画出来,让读者知道模型在系统里的位置。这张图不是模型本身,而是模型的说明书。

4.4 工作点线性化与简化模型

完整的非线性模型适合仿真,但控制器设计往往需要线性模型。四旋翼最常见的线性化是在悬停工作点做的,也就是把φ、θ、ψ、角速度都当作小量,忽略二阶项。

在悬停点附近做小扰动线性化,可以得到非常经典的简化模型:

ẍ ≈ -g (θ cosψ + φ sinψ) ÿ ≈ -g (θ sinψ - φ cosψ) z̈ ≈ g - U1 cosφ cosθ / m ≈ g - U1 / m φ̈ ≈ U2 / Ixx θ̈ ≈ U3 / Iyy ψ̈ ≈ U4 / Izz

这几个简化公式几乎是所有四旋翼控制论文的起步点,也是PID整定时最常用的近似模型。设计高度控制器时,直接用z̈ = g - U1/m,再做个比例微分控制就已经能飞得不错了。

这里有个细节值得提醒,水平位置加速度其实是通过姿态来间接控制的。从式子可以看出来,ẍ和ÿ主要由θ和φ决定,也就是说你想往北飞,得先有一个朝北的推力分量,那就得先把机头俯仰下去。这就是四旋翼位置控制的本质逻辑。

5. 建模过程中踩过的坑与模型验证方法

5.1 欧拉角定义不一致导致的符号灾难

我在建模和阅读论文时,遇到过最多的坑就是欧拉角旋转顺序不一致。有的论文用Z-X-Y,有的用Y-X-Z,还有的用内旋,有的用外旋,最后推出来的旋转矩阵看起来完全不一样,但其实是同一套物理关系的不同表达。

踩了几次坑之后,我的经验是:拿到任何一篇文献,先去看它的坐标系定义和旋转顺序,再去看它的旋转矩阵长什么样。如果这些都对不上,那它的姿态方程和你的对不上是正常的,不代表谁错了。你只需要把你的模型固定成一套标准约定,比如Z-Y-X内旋加NED坐标系,然后用这个约定去统一所有工作。

还有一个小技巧:建模时先在纸上画出三个坐标轴和旋转顺序,放在手边。推导过程中每写一个矩阵,都对一下轴的指向。这个习惯帮我避免了很多粗心错误。

5.2 旋转矩阵方向搞反:这是最隐蔽的错误

另一个高频错误是旋转矩阵方向反了。R_eb表示从机体系到地面系的变换,R_be表示从地面系到机体系的变换。这两者互为转置(因为是正交矩阵,逆等于转置)。

如果你把R_eb写成了R_be,那么推力投影的公式也会反过来,整个模型就和真实运动相反。一个典型的特征是:如果你仿真出来的飞机,油门一加反而往下掉,大概率就是这里反了。

验证方向是否正确的方法很简单:取一个只有偏航角ψ的特殊情况,让φ=θ=0,然后看推力投影公式。此时R_eb = Rz(ψ),你把机体系z轴的推力[0,0,-T]投影到地面系,如果飞机机头朝北(ψ=0),推力应该正好朝向正下方,也就是z轴正方向;如果机头朝东(ψ=90度),推力投影应该也转90度。假如仿真结果不符合这个直觉,就说明矩阵方向写反了。

5.3 推力系数和反扭矩系数的标定误差

模型参数中,质量和惯量比较容易精确获得,真正难的是推力系数k和反扭矩系数d。这两个系数不是恒定常数,它和桨的转速、空气密度、电机温度都有关系。如果在仿真里用的k和实际用的差20%,那么模型预测的悬停油门就会差很多。

我的经验是,拿到一个新机架后,第一件事就是做静拉力测试。把电机桨装到拉力台上,从低油门逐步加到高油门,记录转速和拉力,然后拟合k值。有条件的话,测一下不同电压下的k值,你会发现电压低时同样的转速拉力会略小。

反扭矩系数d更难测,因为它不是直接拉力,而是让机体旋转的力矩。工程上常用一种间接方法:让四旋翼悬停,然后逐步加大偏航控制量,记录达到稳定偏航角速率时的输入,再反推d。这个方法精度不算高,但足够用于仿真和控制初调。

5.4 模型验证的三板斧

模型建完不验证就等于白建模。我自己常用的验证手段有三个。

第一是悬停验证。在零姿态角下,总推力等于重力,此时z̈应为0。这是最简单、最基础的验证,先做这一步能排除大部分符号和参数问题。

第二是开环响应验证。在仿真中给一个小阶跃输入,看加速度或者角加速度的方向和大小是否符合物理直觉。比如给正U2(横滚力矩),飞机应该产生正的横滚角加速度,如果反了,旋翼布局的下标肯定有问题。

第三是和飞行日志对比。这个比较进阶,就是把真实飞行时采集的转速数据输入到模型里,仿真出对应的位置和姿态轨迹,然后和真实飞行的GPS、姿态数据进行对比。如果趋势一致、误差在可接受范围内,那模型就可以用于控制器设计和硬件在环仿真。这一步做完了,你的模型才算真正闭环验证通过。

5.5 “最终图”和“参考答案”:模型没有唯一形式

最后想聊一个很多人会困惑的点,尤其是做课程设计或者毕业论文的同学,总觉得数学模型应该有一个“标准答案”,或者一张最终的图。实际上,四旋翼的数学模型没有唯一形式。

同样一架飞机,你可以写出非线性模型、线性化模型、面向控制的简化模型,也可以写成频域传递函数形式。哪种形式算“最终答案”,取决于你要干什么。做仿真用非线性模型,做姿态PID用线性化模型,做系统辨识还要再变形。所以别再纠结数学模型应该有什么最终图,真正应该关注的是这组方程能不能准确描述你关心的那部分运动特性。

类似地,网上搜“数学模型习题参考解答pdf”这种资料时,也要带着批判眼光去看。四旋翼建模的变量定义、符号习惯、坐标方向千差万别,一份参考答案很可能只是某一套约定下的结果。你能把物理过程搞清楚,用自己的推导自洽地得到一组方程,那它就是你的正确答案。

写在最后的一点心得

从我个人的体会来说,四旋翼数学模型的推导在逻辑上并不难,真正的门槛是细节约定多、符号体系乱、坐标系方向容易混淆。我第一次完整推导的时候,光旋转矩阵的正负号就检查了三遍,最后还是靠仿真数据才定位到问题。后来养成了一个习惯:建模之前先把坐标系、旋转顺序、电机转向画在一张纸上,然后所有的推导和代码都对照这张纸来写。这个小习惯帮我省掉了大量排查时间,以后可以试试看。

如果你准备自己动手建模,最后的建议是:别在文档里推导完就收工,一定把它写成代码跑起来。哪怕只是算一下悬停角速度、算一下小角度响应,都能帮你发现很多纸面上看不出来的问题。模型跑通了,后面的姿态控制和位置控制才有支撑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/4 9:28:14

TouchDesigner三维渲染实战:从节点化流程到实时交互视觉

1. TouchDesigner三维渲染到底能做什么这年头聊实时视觉、交互装置、舞台演出背景,绕不开TouchDesigner。而三维渲染这块,只要你搞过一两个项目,就会意识到它才是整套视觉系统的真正心脏。很多人一上来就套一堆现成3D素材丢进Blender或C4D渲染…

作者头像 李华
网站建设 2026/10/4 9:16:40

OSCP备考资料包高效指南:整理、校验与索引式复习

简介:面向OSCP备考人员及渗透测试初学者,这份资料围绕渗透测试全生命周期,系统整理了通用测试方法、操作技巧与常用工具,内容覆盖Web服务、系统服务、Linux提权、Windows提权、靶机Writeups等核心模块;既适合按目录速查…

作者头像 李华
网站建设 2026/10/4 9:11:03

wifit3 WPA握手被动嗅探:如何不开火抓下4-way的完整时机指南

wifit3 WPA握手被动嗅探:如何不开火抓下4-way的完整时机指南 【免费下载链接】wifit3 Wifite but USB-only & cross-platform. 项目地址: https://gitcode.com/GitHub_Trending/wi/wifit3 wifit3 是一款跨平台(Linux / Windows / macOS)的独立 USB Wi-Fi 审计工具,核…

作者头像 李华
网站建设 2026/10/4 9:10:49

Crontab 定时任务:flock 防重入 + 加载 .env

背景 写了个 Python 脚本,每分钟往数据库写一次 CPU、内存数据: * * * * * /usr/bin/python3 /home/YOUR_USER/app/write_db.py手动跑没问题,但 Crontab 里跑总是失败。 原因 两个问题: 问题 1:Crontab 环境没有 .env …

作者头像 李华