PX4 Autopilot · 深度教程

理解 PX4 混控器
Mixer 原理与实践

混控器是连接飞行控制器与执行器的桥梁。本教程将带你从数学原理出发,对比四旋翼与六旋翼的混控差异,建立直觉理解。

01 — 概述

什么是混控器?

PX4 的混控器(Mixer)负责将上层控制指令转换为每一个执行器的具体输出值,是飞控系统中不可或缺的核心模块。

📥 输入:控制量

控制器输出的是归一化的控制指令,包含滚转(Roll)、俯仰(Pitch)、偏航(Yaw)和油门(Throttle)四个分量,取值范围为 \([-1, 1]\)(油门为 \([0, 1]\))。

⚙️ 处理:混控逻辑

混控器根据预定义的混控矩阵,对每个控制量加权求和。不同的机型(四旋翼、六旋翼、固定翼等)有不同的权重矩阵。

📤 输出:执行器

混控结果是每个电机/舵机的 PWM 输出值。对于多旋翼,这就是每个电机的转速指令;对于固定翼,则包含舵面偏转量。

💡 核心思想

混控器本质上就是一个线性映射:将少数几个控制量(通常4维)映射到多个执行器输出(4~8维甚至更多)。这个映射可以用矩阵乘法来表达。

02 — 系统架构

混控器在系统中的位置

理解混控器的上下游关系,是正确配置飞控的基础。

遥控器/任务
姿态控制器
🔀 混控器
PWM 驱动
电机/舵机
设定值 控制量 (R/P/Y/T) 加权映射 PWM 信号 物理执行

控制组(Control Groups)

PX4 使用控制组来组织不同来源的控制量。混控器从控制组中读取输入:

Group 0 — 飞行控制

来自姿态/速率控制器的输出。通道 0~3 分别为 Roll、Pitch、Yaw、Throttle。这是多旋翼最主要的控制来源。

Group 1 — 载荷/云台

云台控制、相机触发等辅助功能通道。用于挂载设备的控制。

Group 3 — 手动透传

将遥控器通道直接透传到执行器,不经过控制器处理。常用于辅助开关、灯光控制等。

03 — 混控类型

PX4 支持的混控器类型

不同机型和应用场景使用不同类型的混控器。

M 多旋翼混控器

专为多旋翼设计。将 Roll/Pitch/Yaw/Thrust 映射到 N 个电机输出。内置推力饱和保护:当某个电机计算值超出 \([0,1]\) 时,会自动缩放所有输出以保持姿态优先。

关键特性

多旋翼混控器优先保证姿态控制(Roll/Pitch/Yaw),在饱和时会牺牲总推力来确保机体姿态稳定。

S 简单混控器

单输入到单输出的线性映射。将一个控制组通道映射到一个执行器输出。常用于舵机控制等简单场景:

output = k × input + offset

N Null 混控器

输出恒定值(通常为 0),用于占位或禁用某个输出通道。确保执行器输出数量与硬件通道一一对应。

04 — 混控矩阵

混控矩阵的数学本质

混控器的核心就是一次矩阵乘法运算。

通用混控公式

对于一个 \(N\) 旋翼飞行器,混控过程可以表示为:

\[ \begin{bmatrix} m_1 \\ m_2 \\ \vdots \\ m_N \end{bmatrix} = \mathbf{M}_{N \times 4} \cdot \begin{bmatrix} \text{Roll} \\ \text{Pitch} \\ \text{Yaw} \\ \text{Thrust} \end{bmatrix} \]

其中 \(\mathbf{M}\) 就是混控矩阵,每一行对应一个电机,每一列对应一个控制量。矩阵中的元素决定了各控制量对每个电机的贡献方向和大小。

单个电机的输出公式

第 \(i\) 个电机的输出:

\[ m_i = k_{i,\text{roll}} \cdot u_{\text{roll}} + k_{i,\text{pitch}} \cdot u_{\text{pitch}} + k_{i,\text{yaw}} \cdot u_{\text{yaw}} + k_{i,\text{thrust}} \cdot u_{\text{thrust}} \]

其中 \(k_{i,j}\) 是混控矩阵第 \(i\) 行第 \(j\) 列的系数。正值表示正向贡献,负值表示反向贡献。

⚠ 饱和处理(Saturation)

当计算得到的某个电机输出 \(m_i\) 超出 \([0,1]\) 范围时,PX4 会执行饱和逻辑:首先尝试通过整体偏移(offset shifting)使所有电机落在合法范围内;如果不行,则等比缩放 Roll/Pitch/Yaw 分量,最后缩放 Thrust,始终优先保证姿态稳定。

05 — 对比实例

四旋翼 vs 六旋翼混控

通过对比两种常见机型的混控矩阵,深入理解混控器的工作原理。

四旋翼 · QUAD X

CG FRONT M1 CCW ↺ M2 CCW ↺ M3 CW ↻ M4 CW ↻
电机数量4
混控矩阵4 × 4
冗余度
常见用途消费级、竞速

六旋翼 · HEX X

CG FRONT M1 CW M2 CCW M3 CW M4 CCW M5 CW M6 CCW
电机数量6
混控矩阵6 × 4
冗余度
常见用途航拍、工业
QUAD X 混控矩阵(标准 PX4 编号)

\[ \mathbf{M}_{\text{quad}} = \begin{bmatrix} -1 & +1 & -1 & +1 \\ +1 & -1 & -1 & +1 \\ +1 & +1 & +1 & +1 \\ -1 & -1 & +1 & +1 \end{bmatrix} \]

列顺序:Roll, Pitch, Yaw, Thrust。行顺序:M1, M2, M3, M4。

电机 Roll Pitch Yaw Thrust 位置 旋向
M1−1+1−1+1前右CCW ↺
M2+1−1−1+1后左CCW ↺
M3+1+1+1+1前左CW ↻
M4−1−1+1+1后右CW ↻
📖 解读示例

M1(前右电机) 为例:Roll 系数为 \(-1\),意味着当飞控请求正向横滚(向右倾斜)时,右侧的 M1 减速,配合左侧电机加速产生横滚力矩。Pitch 系数为 \(+1\),正 Pitch 输入时前方电机加速、后方减速,产生前后推力差形成俯仰力矩。Yaw 系数为 \(-1\),因为 M1 是 CCW 旋转,其反扭矩方向为 CW;减速(负系数)意味着减少 CW 反扭矩,配合 CW 电机(M3/M4)加速产生偏航。再看 M3(前左电机):Roll 系数为 \(+1\)(左侧加速产生右倾),Pitch 也为 \(+1\)(同为前方电机),两者在俯仰方向一致、在横滚方向相反,这就是混控的核心逻辑。

HEX X 混控矩阵(标准 PX4 编号)

\[ \mathbf{M}_{\text{hex}} = \begin{bmatrix} -0.50 & +1 & +1 & +1 \\ -1 & 0 & -1 & +1 \\ -0.50 & -1 & +1 & +1 \\ +0.50 & -1 & -1 & +1 \\ +1 & 0 & +1 & +1 \\ +0.50 & +1 & -1 & +1 \end{bmatrix} \]

六旋翼的 Roll 列出现了 ±0.5 和 0——不同电机到横滚轴的力臂不同。M2/M5 在正侧方,Roll 系数最大(±1);斜向电机力臂投影为 \(\sin(30°)=0.5\);Pitch 列中 M2/M5 在正侧方不产生俯仰力矩(系数 = 0),而前后斜向电机的 Pitch 投影为 \(\cos(30°) \approx 0.866\),归一化后为 ±1。

电机 Roll Pitch Yaw Thrust 位置 旋向
M1−0.50+1+1+1前右(30°)CW ↻
M2−10−1+1正右(90°)CCW ↺
M3−0.50−1+1+1后右(150°)CW ↻
M4+0.50−1−1+1后左(210°)CCW ↺
M5+10+1+1正左(270°)CW ↻
M6+0.50+1−1+1前左(330°)CCW ↺
📖 为什么 Roll 列出现 0.5?

HEX X 布局中,电机以 60° 间隔排列。M2(正右 90°)和 M5(正左 270°)离横滚轴最远,Roll 系数为 ±1。而 M1 位于前右 30° 位置,其到横滚轴的横向距离投影为 \(\sin(30°) = 0.5\),因此 Roll 系数为 −0.5。同理,Pitch 列中 M2 和 M5 恰好在俯仰轴上(正侧方),完全无法产生俯仰力矩,系数为 0。而前后斜向的电机(M1/M3/M4/M6)到俯仰轴的距离投影为 \(\cos(30°) \approx 0.866\),归一化后系数为 ±1。

综合对比

特性 四旋翼 Quad X 六旋翼 Hex X
电机数 4 6
混控矩阵维度 4 × 4(方阵) 6 × 4(超定系统)
自由度 vs 执行器 4 = 4 → 刚好确定 6 > 4 → 有冗余
电机失效容错 不可容错
任一电机失效则失控
单电机可容错
失去一个仍可保持飞行
混控系数特点 所有系数为 ±1(对称45°) 出现 0, ±0.5, ±1(60° 间隔投影)
偏航效率 4个电机均参与偏航 6个电机均参与偏航,力矩更大
载重能力 标准 更高(50% 更多推力源)
能效 较高(更少电机损耗) 稍低(更多电机,更大重量)
典型应用 消费级、竞速、室内 航拍、测绘、工业巡检
06 — 交互模拟

混控器模拟器

拖动滑块调节控制输入,实时观察各电机的输出变化。

💡 试试看

实验 1:油门 50%,单独拉 Roll → 观察左右电机差异(四旋翼中 M1/M4 vs M2/M3)。
实验 2:油门 50%,单独拉 Pitch → 观察前后电机差异(M1/M3 为前方,M2/M4 为后方)。
实验 3:油门 50%,单独拉 Yaw → 观察 CCW 电机组(M1/M2)与 CW 电机组(M3/M4)的对称反转。
实验 4:切换到六旋翼,重复以上操作。注意正侧方的 M2/M5 对 Pitch 没有贡献(始终 50%),而对 Roll 贡献最大。

07 — 配置文件

PX4 混控配置文件格式

了解 .mix 文件的语法,学会阅读和编写自定义混控。

quad_x.main.mix — 四旋翼混控
# 四旋翼 X 布局混控文件
# Multirotor mixer for Quad X

R: 4x           # R = Multirotor mixer, 4x = 四旋翼X布局

# 最大/最小输出限制, 空闲速度
10000 10000 10000  # roll_scale, pitch_scale, yaw_scale (×0.0001)
0                  # idle_speed (0 ~ 1, 这里是0%)

# ┌───────────────────────────────────────┐
# │ PX4 会根据 "4x" 自动加载内置矩阵     │
# │ 无需手动写出每个电机的混控系数        │
# └───────────────────────────────────────┘
hex_x.main.mix — 六旋翼混控
# 六旋翼 X 布局混控文件
# Multirotor mixer for Hex X

R: 6x           # R = Multirotor mixer, 6x = 六旋翼X布局

10000 10000 10000  # roll_scale, pitch_scale, yaw_scale
0                  # idle_speed

# 6x 自动加载 6 电机混控矩阵
# 比 4x 多出 2 个电机通道,提供冗余
自定义混控示例 — 手动定义每个电机
# 自定义四旋翼混控 (如果需要非标准布局)
# 每个电机用一个 M: (Simple mixer) 定义

M: 1                 # Motor 1: 1个输入组
S: 0 0 -10000 -10000 0 -10000 10000   # Roll:  -1.0
S: 0 1  10000  10000 0 -10000 10000   # Pitch: +1.0
S: 0 2 -10000 -10000 0 -10000 10000   # Yaw:   -1.0
S: 0 3  10000  10000 0 -10000 10000   # Thrust:+1.0

# S: 语法说明
# S: <group> <channel> <neg_scale> <pos_scale> <offset> <min> <max>
# scale 值 = 实际比例 × 10000, 如 10000 = 1.0, 5000 = 0.5
⚠ PX4 v1.14+ 注意事项

从 PX4 v1.14 开始,动态混控逐渐成为默认方案,混控配置从 .mix 文件迁移到了参数驱动的方式(通过 SYS_AUTOSTART 和 Actuator 参数配置)。但理解 .mix 文件的原理对于掌握混控逻辑仍然非常重要。