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

推荐订阅源

小众软件
小众软件
量子位
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
美团技术团队
J
Java Code Geeks
Apple Machine Learning Research
Apple Machine Learning Research
腾讯CDC
V
Visual Studio Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
博客园 - 【当耐特】
L
LangChain Blog
A
About on SuperTechFans
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
Netflix TechBlog - Medium
博客园_首页
WordPress大学
WordPress大学
博客园 - Franky
Engineering at Meta
Engineering at Meta
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
M
MIT News - Artificial intelligence

博客园 - 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] -- 第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] -- 第五讲:第一次修正——Pitch Flip 为什么看起来有效 [BF学院_卷1] -- 第5讲脚本 - longyue [BF学院_卷1] -- 第4讲:为什么"绕飞机自己转"不等于"朝世界转" - longyue
[BF学院_卷1] -- 第21讲:四旋翼为什么可以通过电机控制姿态 ...
longyue · 2026-08-03 · via 博客园 - longyue

第21讲:四旋翼为什么可以通过电机控制姿态 —— Mixer 背后的物理基础


本讲知识点

  • Motor(电机)如何通过改变旋翼转速影响飞机运动
  • 螺旋桨旋转产生的两种作用力:Thrust(推力)与旋转反作用力
  • CW(顺时针)与 CCW(逆时针)螺旋桨在四旋翼中的作用
  • 四旋翼悬停时升力平衡与旋转力矩平衡的原理
  • Roll(横滚)、Pitch(俯仰)、Yaw(偏航)如何通过改变电机输出产生
  • 飞机运动需求与电机实际输出之间的区别
  • Mixer(混控器)为什么需要将控制需求转换为 Motor Command(电机指令)

本讲对应 Betaflight 控制链位置

本讲位于:

PID Controller(PID控制器)

↓

PID Output(PID输出)

↓

Mixer(混控器)

↓

Motor Command(电机指令)

↓

Motor(电机)

↓

Aircraft Motion(飞机运动)

回顾上一讲

上一讲中,我们已经建立:PID Controller负责根据误差计算飞机需要产生的控制作用,最终输出 PID Output。

但是,PID 并不知道:

Motor 1 应该增加多少?

Motor 2 应该减少多少?

Motor 3 应该保持多少?

Motor 4 应该变化多少?

因此, 控制链进入:

PID Output(PID输出)

↓

Mixer(混控器)

↓

Motor Command(电机指令)

本讲学习目标

在进入 Betaflight 源码之前,还需要回答一个更基础的问题:

为什么改变不同电机的输出,飞机就能够产生 Roll、Pitch、Yaw 这些运动?

本讲不进入代码,本讲只建立 Mixer 背后的物理直觉。


电机到底改变了什么?

首先,我们观察四旋翼最基本的执行机构:Motor(电机)。

电机本身并不知道:ROLL, PITCH, YAW 这些控制概念,电机只完成一件事情:改变旋翼转速。

旋翼转速变化以后,会影响:推力(Thrust)。

也就是飞机向上的作用力。

简单理解:

电机转得更快 -> 旋翼产生更大推力 -> 飞机受到更大的向上作用力

所以, 飞控最终控制的并不是姿态。

飞控控制的是:

电机输出 -> 改变推力分布 -> 产生姿态变化

四旋翼电机到底产生了什么力量?

在理解 Roll(横滚)、Pitch(俯仰)、Yaw(偏航)之前,我们需要先解决一个最基础的问题:

四旋翼的电机转动以后,到底产生了什么?

很多初学者会直接认为:

电机转动 -> 产生升力 -> 飞机飞起来

这个理解没有错,但是不完整。

对于四旋翼来说,螺旋桨转动以后,同时产生两类重要作用:

第一类:垂直方向的升力;

第二类:旋转方向上的反作用力;

后面的:

Roll(横滚)

Pitch(俯仰)

Yaw(偏航)

本质上都是利用这两种作用力的变化实现的。

因此,在进入 Mixer(混控器)之前,需要先理解四旋翼本身的物理基础。


螺旋桨如何产生升力?

四旋翼的每一个电机上,都安装有一个螺旋桨, 当电机旋转时,螺旋桨推动空气运动。

由于螺旋桨桨叶具有一定的角度:

旋转中的桨叶向下推动空气

↓

空气产生反作用力

↓

飞机受到向上的力

这个向上的力,就是Thrust(推力)。

所以,对于悬停状态,四个电机产生的总升力,需要刚好抵消飞机自身重力。

也就是:四个螺旋桨产生升力 = 飞机重力。

飞机就保持高度不变。


四旋翼为什么需要两种旋转方向的螺旋桨?

如果所有电机都使用同一种旋转方向的螺旋桨,会出现一个问题。

例如,四个电机全部顺时针旋转:

M1 CW

M2 CW

M3 CW

M4 CW

根据牛顿第三定律:

作用力 -> 产生反作用力

螺旋桨向空气施加旋转作用力, 同时, 空气也会给螺旋桨一个反方向的力, 这个力会作用到机架上。

于是:

所有螺旋桨顺时针旋转

↓

产生逆时针反作用力

↓

飞机机身会尝试反向旋转

也就是说, 如果四个电机方向完全相同,飞机即使能够产生升力,也会不断自己旋转。

因此,四旋翼需要让不同电机产生相反方向的旋转力。


四旋翼电机安装方式

典型四旋翼采用:

M1:CW(Clockwise,顺时针)

M2:CCW(Counter Clockwise,逆时针)

M3:CW(顺时针)

M4:CCW(逆时针)

也就是:

M1(CW)          M2(CCW)

M4(CCW)         M3(CW)   

通过这种交错排列:

顺时针旋转产生的反作用力 + 逆时针旋转产生的反作用力

互相抵消。

最终, 飞机产生升力, 但是不会自己持续旋转


悬停时四个电机发生了什么?

现在观察最稳定的状态:悬停(Hover)

此时, 四个电机同时工作, 它们完成两个平衡。

第一个平衡:

升力平衡

四个螺旋桨产生的推力:

M1 Thrust + M2 Thrust + M3 Thrust + M4 Thrust

总和, 等于飞机重量,因此,飞机高度保持不变


第二个平衡:

旋转力平衡

由于:

M1、M3 使用 CW,M2、M4 使用 CCW

所以,顺时针旋转产生的反作用力 与 逆时针旋转产生的反作用力 互相抵消。

因此,飞机不会自动旋转,最终悬停状态:

升力 = 重力

旋转反作用力 = 0

飞机保持高度稳定,姿态稳定


为什么增加推力可以产生旋转?

现在我们已经知道:

每一个螺旋桨产生两个重要作用:

1. 推力

2. 旋转方向上的反作用力

那么问题来了,如果我们改变某几个电机的输出,会发生什么?

答案:飞机的平衡会被破坏。

而这种“不平衡”,就是控制飞机运动的来源。

例如:

如果左侧两个电机增加推力:

左侧升力增加

↓

左侧飞机被向上推

↓

飞机产生倾斜趋势

↓

产生 Roll(横滚)

如果前后电机推力变化:

前后升力不同,飞机产生 Pitch(俯仰)

如果改变旋转方向力矩:

顺逆时针反作用力不再完全抵消

↓

飞机产生 Yaw(偏航)

因此,四旋翼并不是直接控制:

Roll

Pitch

Yaw

而是:

改变不同电机输出

↓

改变推力分布

↓

改变旋转力矩

↓

产生飞机运动

这也是后续 Mixer(混控器)存在的物理基础。


从物理世界进入控制系统

现在,我们可以重新连接前面的控制链。

PID Controller(PID控制器)输出:

飞机需要产生什么运动

例如:

需要向右 Roll

需要向前 Pitch

需要旋转 Yaw

但是,电机只能理解:提高转速,降低转速。

因此,中间需要一个转换过程:

飞机运动需求

↓

需要哪些电机增加或减少推力

↓

Motor Command(电机指令)

这个过程,就是:

Mixer(混控器)

本节核心认识

理解 Mixer 之前,必须先建立三个物理基础:

第一:螺旋桨旋转会产生推力,推力方向垂直于螺旋桨旋转平面。

第二:螺旋桨旋转同时会产生反作用力,这个反作用力会影响飞机旋转。

第三:四旋翼通过 CW 与 CCW 螺旋桨组合,让悬停时升力平衡,旋转力矩平衡。

在此基础上,改变不同电机输出,破坏原有平衡,产生 Roll / Pitch / Yaw,

而 Mixer 的任务,就是计算为了产生目标运动,每一个电机应该改变多少输出。


下一讲预告

进入 mixer.h, 观察 Betaflight 如何用代码描述 Mixer 的基本结构。