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

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
月光博客
月光博客
腾讯CDC
Engineering at Meta
Engineering at Meta
博客园 - Franky
Vercel News
Vercel News
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Microsoft Security Blog
Microsoft Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
GbyAI
GbyAI
B
Blog
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS 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] -- 第7讲脚本 [BF学院_卷1] -- 第6讲:为什么 Pitch Flip 会骗人 [BF学院_卷1] -- 第6讲脚本 [BF学院_卷1] -- 第五讲:第一次修正——Pitch Flip 为什么看起来有效 [BF学院_卷1] -- 第5讲脚本 - longyue [BF学院_卷1] -- 第4讲:为什么"绕飞机自己转"不等于"朝世界转" - longyue
[BF学院_卷1] -- 第七讲:为什么 Pitch Flip 只在 180° 看起...
longyue · 2026-08-03 · via 博客园 - longyue

第七讲:为什么 Pitch Flip 只在 180° 看起来正确

  • 45°时发生什么
  • 90°时发生什么
  • 135°时发生什么
  • 为什么只有180°看起来接近正确
  • Pitch Flip 的真正意义

本讲学习目标

阅读完本讲以后,你应该能够回答:

□ 为什么 Pitch Flip 在大多数姿态下都会失败?

□ 为什么越接近 180°,看起来越接近正确?

□ Pitch Flip 到底解决了什么问题?

□ 它为什么不能作为飞控控制算法?


回顾上一讲

上一讲,

我们已经知道:

Pitch Flip(机体系 Pitch 翻转)

并不能得到正确的目标姿态。

真正正确的目标,

应该来自:

绕 Earth Z(地球坐标系 Z 轴)旋转。

那么,

这种错误,

究竟是怎样变化的?


观察 Python 图

请运行:

07_pitch_flip_failure_curve.py

图中:

蓝色轨迹表示:

绕 Earth Z(地球坐标系 Z 轴)旋转后的正确位置

红色轨迹表示:

Pitch Flip(机体系 Pitch 翻转)得到的位置

灰色连线表示:

Pitch Flip 与正确姿态之间的差距

请重点观察:

45°

90°

135°

180°

四个位置。


45°

此时,

Pitch Flip 已经明显偏离正确姿态。

虽然:

飞机已经开始朝正确方向旋转,

但是:

目标位置已经发生明显偏差。

这说明:

Pitch Flip

不能作为一般情况下的姿态计算方法。


90°

继续旋转以后,

Pitch Flip 与正确姿态之间仍然存在明显差异。

虽然:

Top View(俯视图)

Side View(侧视图)

看到的误差表现不同,

但是,

两条轨迹始终没有重合。

说明:

Pitch Flip

仍然不能得到真正正确的位置。


135°

继续接近 180°。

此时,

Pitch Flip 与正确轨迹,

开始逐渐靠近。

如果只观察局部,

很容易产生一种错觉:

Pitch Flip 好像越来越正确了。

实际上,

它并没有变成真正正确。

只是:

随着姿态不断接近特殊位置,

两种计算方式得到的结果,

开始逐渐接近。


180°

到达:

180°

附近时,

Pitch Flip

终于几乎落在正确的位置。

于是,

很多人第一次学习飞控时,

都会误以为:

Pitch Flip

就是正确答案。

事实上,

这里仅仅是:

一个特殊姿态。

它并不能代表:

整个姿态空间。


为什么会出现这种现象?

因为:

Pitch Flip

本质上仍然是在:

机体系(Body Frame)

里面进行翻转。

而真正希望得到的是:

地球坐标系(Earth Frame)

中的目标姿态。

只有:

当姿态恰好接近某些特殊位置时,

两种结果,

才会偶然接近。

这种接近,

并不是控制算法正确。

而只是:

几何关系产生的巧合。


Pitch Flip 的真正意义

经过前面几讲,

我们已经知道:

Pitch Flip

并不能告诉飞控:

应该怎样控制飞机。

它真正告诉我们的,

只有一件事情:

正确目标姿态

到底应该在哪里。

也就是说,

Pitch Flip

只是帮助我们:

观察正确答案。

它并没有告诉飞控:

应该怎样到达那里。


本讲小结

现在,

我们已经能够判断:

Pitch Flip

只能作为一种观察工具。

它能够帮助我们理解:

正确姿态在哪里。

但是,

真正的飞控,

并不会使用 Pitch Flip

去控制飞机。

因为:

飞控真正关心的问题,

已经不再是:

正确姿态在哪里?

而是:

既然已经知道正确姿态,

那么,

怎样才能让飞机真正飞到那里?

下一讲预告

到目前为止,

我们一直讨论的是:

正确答案是什么。

从下一讲开始,

课程正式进入

Betaflight Angle Mode(自稳模式)

真正的控制流程。

第一步就是:

飞手打杆以后,

飞控究竟怎样得到:

Target Angle(目标姿态角)

整个控制链路,

将从这里正式开始。