惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
小众软件
小众软件
GbyAI
GbyAI
B
Blog RSS Feed
月光博客
月光博客
A
About on SuperTechFans
Microsoft Security Blog
Microsoft Security Blog
Blog — PlanetScale
Blog — PlanetScale
U
Unit 42
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
Recent Announcements
Recent Announcements
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
aimingoo的专栏
aimingoo的专栏
博客园_首页
G
Google Developers Blog

博客园 - longyue

[BF学院_卷1] -- 第30讲:mixTable() 总结 —— Mixer 完整控制模型 [BF学院_卷1] -- 第29讲:applyMixToMotors() —— 最终 Motor Output 生成 [BF学院_卷1] -- 第28讲:applyMixerAdjustment() —— 为什么 Mixer 需要重新分配控制权限 [BF学院_卷1] -- 第27讲:PID Output 如何进入 Mixer —— 从控制需求到 motorMix [BF学院_卷1] -- 第26讲:calculateThrottleAndCurrentMotorEndpoints() —— Mixer 如何确定油门基础范围 [BF学院_卷1] -- 第25讲:mixTable() 总览 —— Mixer 在控制循环中的位置 [BF学院_卷1] -- 第24讲:mixer_init.c —— 飞控启动时如何准备 Mixer [BF学院_卷1] -- 第23讲:Mixer 数学模型 —— motorMixer_t 如何形成 Motor Output [BF学院_卷1] -- 第22讲:Betaflight 如何描述 Mixer —— mixer.h 数据结构 [BF学院_卷1] -- 第21讲:四旋翼为什么可以通过电机控制姿态 —— Mixer 背后的物理基础 [BF学院_卷1] -- 第20讲:从 PID Output 到 Motor Command(电机指令)——为什么飞控需要 Mixer [BF学院_卷1] -- 第19讲:PID Controller(PID控制器)——飞控到底如何理解误差并控制飞机? [BF学院_卷1] -- 第18讲:PID Controller 的最后一环——为什么飞控还需要 Feedforward(前馈控制)? [BF学院_卷1] -- 第17讲:D Term(微分控制项)——飞控如何提前感知运动变化? [BF学院_卷1] -- 第16讲:I Term(积分控制项)——飞机为什么总是差一点? [BF学院_卷1] -- 第14讲:Rate Error(角速度误差)——PID 真正控制的到底是什么? [BF学院_卷1] -- 第15讲:P Term(比例控制项)——飞控是如何利用误差开始控制飞机的? [BF学院_卷1] -- 第13讲:Outer Loop 的终点——为什么还要读取 Current Angular Rate(当前角速度)? [BF学院_卷1] -- 第十二讲:Yaw Compensation(偏航补偿) [BF学院_卷1] -- 第12讲脚本 [BF学院_卷1] -- 第十一讲:Current Angular Rate(当前角速度)——飞控怎样知道飞机现在转得有多快? [BF学院_卷1] -- 第十讲:Angle Error(姿态角误差)如何变成 Desired Angular Rate(目标角速度) [BF学院_卷1] -- 第九讲:Current Angle(当前姿态角)遇见 Target Angle(目标姿态角) [BF学院_卷1] -- 第八讲:飞手打杆以后,飞控首先得到什么? [BF学院_卷1] -- 第七讲:为什么 Pitch Flip 只在 180° 看起来正确 [BF学院_卷1] -- 第7讲脚本 [BF学院_卷1] -- 第6讲:为什么 Pitch Flip 会骗人 [BF学院_卷1] -- 第6讲脚本 [BF学院_卷1] -- 第5讲脚本 - longyue [BF学院_卷1] -- 第4讲:为什么"绕飞机自己转"不等于"朝世界转" - longyue
[BF学院_卷1] -- 第五讲:第一次修正——Pitch Flip 为什么看起...
longyue · 2026-08-03 · via 博客园 - longyue

第五讲:第一次修正——Pitch Flip 为什么看起来有效

学习目标

在第四讲中,我们建立了一个错误模型:

Yaw = 绕机体 z' 轴旋转

并且发现:

当飞机已经存在 Pitch 时,

这种理解会产生错误结果。

本讲暂时不讨论正确答案。

只观察一个有趣的现象:

Pitch Flip

为什么在某些情况下看起来能够修正问题。


配套脚本

05_pitch_flip_demo.py

运行脚本后,会得到:

3D View
Top View
Side View

三个视图。

本讲所有结论都来自对这三个视图的观察。


5.0 如何阅读这张图

在分析之前,

先认识图中的每一个元素。

否则后面的观察会非常困难。


蓝色轨迹是什么

蓝色轨迹表示:

正确模型

下,

飞机机头的位置变化轨迹。

这里采用:

绕 Earth Z 轴旋转

的方式进行 Yaw。

因此:

蓝色 = 正确答案

红色轨迹是什么

红色轨迹表示:

错误模型

下,

飞机机头的位置变化轨迹。

这里采用:

绕 Body Z' 轴旋转

的方式进行 Yaw。

因此:

红色 = 错误答案

橙色轨迹是什么

红色轨迹中的后半段,

会变成橙色。

表示:

机头已经进入水平面下方

即:

Pitch < 0°

区域。

这样可以帮助我们快速发现:

飞机什么时候开始出现错误。


灰色平面是什么

灰色平面表示:

Pitch = 0°

即:

飞机水平放置时所在的平面。

可以简单理解成:

地平线

或者:

飞机水平飞行时所在平面

黑色虚线圆是什么

黑色虚线圆表示:

Pitch 始终保持 30°

时,

机头理论上应该运动的轨迹。

因此:

如果某条轨迹始终贴着这个圆,

说明:

Pitch 没有发生变化

Top View 看什么

Top View 是:

从天空向下看

得到的视角。

主要观察:

Yaw 是否完成旋转

Side View 看什么

Side View 是:

从飞机侧面观察

得到的视角。

主要观察:

Pitch 是否发生变化

3D View 看什么

3D View 同时展示:

Yaw
Pitch
空间轨迹

三者关系。

这是本讲最重要的视图。


5.1 先观察 Top View

先不要看 3D 图。

只观察:

Top View

中的两条轨迹。

会发现:

蓝色轨迹和红色轨迹都完成了:

Yaw = 180°

旋转。

机头最终都转到了飞机后方。

从俯视角度看:

两条轨迹似乎没有本质区别。


此时很容易产生一个错觉:

绕 Earth Z 转

和

绕 Body Z' 转

结果一样

如果只看 Top View,

这个结论似乎成立。


但这只是表面现象。


5.2 再观察 Side View

现在观察:

Side View

中的蓝色轨迹。

可以发现:

整个旋转过程中,

蓝色轨迹始终保持在:

Z = +0.5

附近。

即:

Pitch = +30°

始终没有变化。


这符合我们的直觉。

因为:

飞机只是改变朝向。

并没有抬头或低头。


再观察红色轨迹。

会发现:

机头高度不断下降。

最终从:

+0.5

下降到:

-0.5

这意味着:

原本:

Pitch = +30°

最终变成:

Pitch = -30°

5.3 观察红色变橙色的位置

现在回到 3D View。

观察:

红色轨迹
↓
橙色轨迹

发生变化的位置。

这个位置代表:

机头穿过水平面

即:

Pitch = 0°

的位置。


从这里开始,

飞机已经进入:

Pitch < 0°

区域。

错误开始变得明显。


5.4 Pitch Flip 是如何出现的

现在只比较最终结果。

正确结果:

Pitch = +30°

错误结果:

Pitch = -30°

会发现:

两者刚好满足:

Pitch *= -1

关系。


于是产生一个非常诱人的想法:

pitch = -pitch;

似乎就能够修正错误。


5.5 为什么很多人会认为这就是答案

因为:

对于本讲这个特殊案例:

Pitch = 30°

Yaw = 180°

翻转后的结果确实正确。

于是会得到:

很多人会得到一种错觉:

Pitch Flip 就是正确解法。

这样的结论。


事实上:

这只是一个巧合。


本讲结论

对于:

Yaw = 180°

这个特殊角度。

错误模型最终会得到:

Pitch = -Pitch

的结果。

因此:

Pitch Flip

看起来能够修正问题。


但是:

我们还没有证明:

Yaw = 45°

Yaw = 60°

Yaw = 90°

Yaw = 120°

时,

Pitch Flip 是否仍然有效。


下一讲将验证:

Pitch Flip

到底是真正的解法,

还是:

180° 特殊情况下产生的错觉。