[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 使用的数据如何准备完成。
浙公网安备 33010602011771号