[BF学院_卷1] -- 第23讲:Mixer 数学模型 —— motorMixer_t 如何形成 Motor Output

第23讲:Mixer 数学模型 —— motorMixer_t 如何形成 Motor Output


本讲知识点

  • Throttle、Roll、Pitch、Yaw 如何进入 Mixer
  • motorMixer_t 权重如何参与 Motor Output 计算
  • Mixer Matrix(混控矩阵)的概念
  • 为什么不同电机拥有不同 Mixer 权重
  • 固定 Mixer 与 Custom Mixer 的关系
  • Betaflight 如何通过数学模型完成控制需求到电机输出的转换

回顾上一讲

上一讲中,我们已经完成了:“Betaflight 如何描述 Mixer” 的源码结构学习。

我们知道,一个电机对应 motorMixer_t,其中包含:

throttle,roll,pitch,yaw

四个权重。

它们描述这个电机如何响应:

Throttle,Roll,Pitch,Yaw

但是上一讲主要解决的是:一个电机如何被描述,

本讲继续向前推进:

多个控制需求如何通过这些权重,计算每一个电机最终输出

也就是:Mixer 的数学模型


Mixer 的输入和输出

在进入数学公式之前,我们先明确 Mixer 两端的数据。

Mixer 的输入:

Throttle,Roll,Pitch,Yaw

这些来自前面的控制链。

其中,

Throttle 表示 “整体升力需求”,例如,飞机需要增加高度。

Roll 表示 “横滚控制需求”,例如,飞机需要向右倾斜。

Pitch 表示 “俯仰控制需求”,例如,飞机需要向前倾斜。

Yaw 表示 “偏航控制需求”,例如,飞机需要改变机头方向。


这些数据描述的是:飞机希望产生什么运动。

但是,电机需要的数据是:

Motor 1 输出多少

Motor 2 输出多少

Motor 3 输出多少

Motor 4 输出多少

所以 Mixer 需要完成:

Throttle / Roll / Pitch / Yaw -> Motor Output

的转换。


为什么不同电机需要不同权重?

上一讲我们已经知道:不同电机的位置不同。

因此,同样增加一个电机输出,对飞机产生的影响不同。

例如:

左侧电机增加 -> 左侧升力增加 -> 产生 Roll 力矩

右侧电机增加 -> 右侧升力增加 -> 产生相反方向 Roll 力矩

所以,Mixer 必须知道:

哪个电机增加,哪个电机减少;

增加多少,减少多少

这个信息,就是通过 “motorMixer_t” 中的权重描述。


Mixer Matrix(混控矩阵)

当多个电机组合起来以后,每个电机都有自己的:

throttle,roll,pitch,yaw

权重。

这些权重组合起来,就形成 “Mixer Matrix”。

也就是控制输入到电机输出之间的转换关系。

例如一个四旋翼:

             Throttle   Roll   Pitch   Yaw

Motor 1        1.0      0.5    -0.5    1.0

Motor 2        1.0     -0.5    -0.5   -1.0

Motor 3        1.0      0.5     0.5   -1.0

Motor 4        1.0     -0.5     0.5    1.0

这张表就是:“Mixer Matrix”。

它表达:当飞控产生

Throttle,Roll,Pitch,Yaw

以后,每个电机应该如何响应。


Motor Output 的数学模型

现在建立 Mixer 最核心的计算关系。

对于一个电机,最终输出:

Motor Output = Throttle × throttle权重
            + Roll × roll权重
            + Pitch × pitch权重
            + Yaw × yaw权重

转换成代码思想:

motorOutput = throttle * mixer.throttle
            + roll     * mixer.roll
            + pitch    * mixer.pitch
            + yaw      * mixer.yaw;

也就是说,Mixer 本身并不创造新的控制量。

它只是:

控制需求 × 电机对应权重 -> 电机输出

扩展到四个电机

对于四旋翼,每一个电机都有自己的权重。

因此:

Motor1 = Throttle × t1 + Roll × r1 + Pitch × p1 + Yaw × y1
Motor2 = Throttle × t2 + Roll × r2 + Pitch × p2 + Yaw × y2
Motor3 = Throttle × t3 + Roll × r3 + Pitch × p3 + Yaw × y3
Motor4 = Throttle × t4 + Roll × r4 + Pitch × p4 + Yaw × y4

其中:

t1,r1,p1,y1

t2,r2,p2,y2

...

就是每个电机对应的 “motorMixer_t” 参数。


一个简单 Roll 混控案例

假设,飞控计算得到:

Throttle = 50

Roll = 20

Pitch = 0

Yaw = 0

表示:飞机需要保持高度,同时产生 Roll 动作。

现在假设左侧电机:

throttle = 1.0

roll = 0.5

右侧电机:

throttle = 1.0

roll = -0.5

计算左侧:

Motor Output = 50 × 1.0 + 20 × 0.5 = 60

计算右侧:

Motor Output = 50 × 1.0 + 20 × (-0.5) = 40

最终,左侧电机增加输出,右侧电机减少输出,

形成左右升力差,飞机产生 “Roll 力矩” 开始滚转。


Yaw 为什么也可以通过 Mixer 实现?

Roll 和 Pitch 主要利用 “推力差” 产生旋转力矩。

而 Yaw 利用 旋翼旋转方向产生的反作用力产生旋转力矩。

因此,不同旋转方向的电机,需要不同 “yaw 权重”。

例如:

CW 电机:yaw = +1

CCW 电机:yaw = -1

当 Yaw 控制输入产生时:

部分电机增加,部分电机减少

↓

顺逆时针旋转力矩失衡

↓

飞机产生 Yaw

所以,Yaw 同样可以通过:“Mixer 权重” 转换成 “电机输出变化”。


Fixed Mixer 与 Custom Mixer

Betaflight 支持很多不同飞行器结构。

例如:四旋翼,六旋翼,飞机;

不同结构:电机数量不同,电机位置不同,旋转方向不同,

因此,Mixer Matrix 也不同。


对于常见飞行器,Betaflight 内部提供 “固定 Mixer”,

例如:MIXER_QUADX,系统已经知道:每个电机的位置,每个电机的权重。


但是,如果用户设计特殊布局,

例如,非标准电机排列,特殊飞行器结构,

则可以使用 “Custom Mixer” ,用户自己提供 motorMixer_t 参数。


因此,固定 Mixer 和 Custom Mixer 的区别是:

固定 Mixer:Betaflight 提供权重表

Custom Mixer:用户提供权重表

但是最终计算方式完全一样:

控制输入 × Mixer 权重 -> Motor Output

本讲小结

本讲完成了 Mixer 数学模型的建立。

我们知道Mixer 输入:

Throttle, Roll, Pitch, Yaw

表示飞机希望产生的运动需求,

Mixer 输出 Motor Output 表示每一个电机实际执行量。

Betaflight 使用 motorMixer_t 保存每个电机的响应权重, 然后通过:

控制需求 × 权重 -> 电机输出

完成:

飞机级控制需求 -> 执行机构级控制命令

控制链继续推进:

Throttle / Roll / Pitch / Yaw

↓

Mixer Matrix

↓

Motor Output

下一讲将进入:

mixer_init.c

分析 Betaflight 启动时,

如何根据飞行器类型选择 Mixer;

如何加载 motorMixer_t 数据;

以及运行时 Mixer 使用的数据如何准备完成。

posted on 2026-08-03 15:36  longyue  阅读(6)  评论(0)    收藏  举报

导航