# 混合与执行器
PX4 架构可确保机身布局无需在核心控制器中进行特殊情况处理。
混合是指采取强制命令(如 右转
),并将其转换为控制电机或伺服器的执行器指令。对于每个副翼都有一个伺服器的飞机来说,这就意味着要对其中一个伺服器发出高、低指令。这同样适用于多旋翼飞机:向前俯仰需要改变所有电机的速度。
将混合器逻辑与实际姿态控制器分离,可大大提高可重用性。
# 控制管道
特定的控制器会向混合器发送一个特定的归一化力或扭矩需求(比例范围为 -1...+1),然后混合器会相应地设置各个执行器。然后,输出驱动器(如 UART、UAVCAN 或 PWM)将其缩放为执行器的本机单位,如 1300 的 PWM 值。
# 对照组
PX4 使用控制组(输入)和输出组。从概念上讲,它们非常简单:例如 态度
或 万向
为有效载荷。输出组是一条物理总线,例如伺服的前 8 个 PWM 输出。每个组都有 8 个规范化(-1...+1)指令端口,可通过混频器进行映射和缩放。混频器定义了如何将这 8 个控制信号分别连接到 8 个输出端。
对于一架简单的飞机,控制 0(滚动)直接连接到输出 0(副翼)。对于多旋翼飞行器来说,情况则有些不同:控制 0(滚转)与所有四个电机相连,并与油门相结合。
# 0 号控制组(飞行控制)
- 0: 掷骰子(-1...1)
- 1: 间距(-1...1)
- 2:偏航(-1...1)
- 3:节流阀(0...1 正常范围,-1...1 用于可变螺距/反推力装置)
- 4: 襟翼(-1...1)
- 5: 捣乱者 (-1..1)
- 6:气闸(-1...1)
- 7:起落架(-1...1)
# 控制组 #1(飞行控制 VTOL/备用机)
- 0:滚动 ALT(-1...1)
- 1:螺距 ALT(-1...1)
- 2:偏航 ALT(-1...1)
- 3:节流阀 ALT(0...1 正常范围,-1...1 用于可变螺距/反推力装置)
- 4:保留 / aux0
- 5:保留 / aux1
- 6:保留 / aux2
- 7:保留 / aux3
# 对照组 #2(万向节)
- 0: 万向节滚动
- 1: 万向节间距
- 2: 万向偏航
- 3: 云台快门
- 4: 摄像机变焦
- 5: 保留
- 6: 保留
- 7:保留(降落伞,-1...1)
# 对照组 #3(手动直通)
- 0: RC 翻滚
- 1: RC 螺距
- 2: 遥控偏航
- 3: 遥控节流阀
- 4:RC 模式开关(RC 通道的直通,由 RC_MAP_FLAPS)
- 5:RC aux1(RC 通道的直通,由 RC_MAP_AUX1)
- 6:RC aux2(RC 通道的直通,由 RC_MAP_AUX2)
- 7:RC aux3(RC 通道的直通,由 RC_MAP_AUX3)
备注
该组仅用于定义 RC 输入与特定输出之间的映射。 正常运行 (见 quad_x.main.mix (打开新窗口) 在混合器中缩放 AUX2 的示例)。在手动 IO 故障安全覆盖的情况下(如果 PX4FMU 停止与 PX4IO 板通信),只使用控制组 0 输入为滚动、俯仰、偏航和油门定义的映射/混合(其他映射将被忽略)。
# 6 号对照组(第一个有效载荷)
- 0: 功能 0
- 1: 功能 1
- 2:功能 2
- 3:功能 3
- 4:功能 4
- 5:功能 5
- 6:功能 6
- 7:功能 7
# 虚拟控制组
警告
虚拟控制组仅适用于创建 VTOL 代码的开发人员。它们不应在混合器中使用,仅用于提供完整性。
这些组不是混合器输入,而是作为元通道,将固定翼和多旋翼直升机控制器的输出输入 VTOL 调速器模块。
# 控制组 #4(飞行控制 多旋翼 VIRTUAL)
- 0:滚动 ALT(-1...1)
- 1:螺距 ALT(-1...1)
- 2:偏航 ALT(-1...1)
- 3:节流阀 ALT(0...1 正常范围,-1...1 用于可变螺距/反推力装置)
- 4:保留 / aux0
- 5:保留 / aux1
- 6:保留 / aux2
- 7:保留 / aux3
# 控制组 #5(飞行控制 FW VIRTUAL)
- 0:滚动 ALT(-1...1)
- 1:螺距 ALT(-1...1)
- 2:偏航 ALT(-1...1)
- 3:节流阀 ALT(0...1 正常范围,-1...1 用于可变螺距/反推力装置)
- 4:保留 / aux0
- 5:保留 / aux1
- 6:保留 / aux2
- 7:保留 / aux3
# 输出组/映射
一个输出组是一条物理总线(如 FMU PWM 输出、IO PWM 输出、UAVCAN 等),它有 N 个(通常为 8 个)标准化(-1...+1)命令端口,可通过混合器进行映射和缩放。
混合器文件没有明确定义实际的 输出组 (物理总线)的输出。相反,混音器的用途(如控制主输出或辅助输出)是通过混音器推断出来的。 文件名并映射到系统中相应的物理总线上 启动脚本 (特别是在 rc.interface (打开新窗口)).
备注
之所以需要这种方法,是因为 MAIN 输出所使用的物理总线并不总是相同的;它取决于飞行控制器是否有 IO 板(请参阅 "IO 板")。 PX4 飞行控制器参考设计> 主要/IO 功能分解)或使用 UAVCAN 进行电机控制。启动脚本使用设备的抽象概念,将混音器文件加载到电路板的相应设备驱动程序中。主混音器加载到设备 /dev/uavcan/esc
如果启用了 UAVCAN,则为 (uavcan),否则为 /dev/pwm_output0
(在带有 I/O 板的控制器上,该设备被映射到 IO 驱动程序;在没有 I/O 板的控制器上,该设备被映射到 FMU 驱动程序)。辅助混音器文件加载到设备 /dev/pwm_output1
映射到带有 I/O 板的 Pixhawk 控制器上的 FMU 驱动程序。
由于存在多个控制组(如飞行控制、有效载荷等)和多个输出组(总线),因此一个控制组可以向多个输出组发送命令。
备注
实际上,启动脚本只能将混频器加载到单个设备(输出组)中。这是一种配置限制,而非技术限制;您可以将主混音器加载到多个驱动器中,例如,在 UAVCAN 和主引脚上使用相同的信号。
# PX4 混合器定义
混合器是在纯文本文件中使用 句法 下图
预设机身的文件可在 ROMFS/px4fmu_common/mixers (打开新窗口).这些可用作定制的基础,也可用于一般测试目的。
# 混音器文件名
混合器文件必须命名为 XXXX.主要.混合 如果它负责混音 MAIN 输出或 XXXX.辅助.混合 如果它能混合 AUX 输出。
# 搅拌机装载
PX4 固件中的默认混音器文件集定义在 px4fmu_common/init.d/airframes/ (打开新窗口).可通过 SD 卡目录中的同名混音器文件覆盖这些设置 /etc/mixers/ (SD 卡混音器文件按优先级加载)。
PX4 可加载名为 XXXX.主要.混合 到主输出和 YYYY.辅助.混合 在 AUX 输出端,前缀取决于机身和机身配置。MAIN 和 AUX 输出通常对应 MAIN 和 AUX PWM 输出,但在启用 UAVCAN(或其他)总线时,这些输出也可以加载到 UAVCAN 总线上。
主混音器文件名(前缀为 XXXX
) 在机身配置中使用 设置 MIXER XXXX
例如 机身编号/10015_TBS_Discovery (打开新窗口) 电话 设置 MIXER quad_w
加载主混音器文件 quad_w.主要.混合).
AUX 混合器文件名(前缀为 YYYY
以上)取决于机身设置和/或默认值:
MIXER_AUX
可用于 明确地 设置加载哪个 AUX 文件(例如在 aiframe 配置中)、设置 MIXER_AUX vtol_AAERT
将加载vtol_AAERT.aux.mix
).- 多旋翼和固定翼机身载荷 pass.aux.mix (打开新窗口) 默认设置(即如果没有使用
MIXER_AUX
).TIP
pass.aux.mix
是 RC 直通式混音器传递 4 个用户定义的 RC 通道的值(使用 RC_MAP_AUXx/RC_MAP_FLAPS 参数)到 AUX 输出端的前四个输出端。 - VTOL 框架会加载使用
MIXER_AUX
指定的值,或混音器
如果没有。 - 启用了云台控制(输出模式设置为 AUX)的帧将 否决 机身特定的 MIXER_AUX 设置,并加载
mount.aux.mix
在 AUX 输出端上。
备注
# 加载自定义混合器
PX4 从 SD 卡目录中加载名称合适的混音器文件 /etc/mixers/按首选项,然后在固件中选择版本。
要加载自定义混音器,应将其命名为与 "普通"混音器文件(将由机身加载)相同的名称,并将其放入 etc/mixers 飞行控制器 SD 卡上的目录。
通常情况下,您会覆盖/替换 辅助 您当前机身的混音器文件(可能是遥控直通混音器--)。 pass.aux.mix (打开新窗口)).有关 搅拌器装载.
TIP
您还可以 人工 在运行时使用 混频器负载 命令(从而避免重新启动)。例如,加载混音器 /etc/mixers/test_mixer.mix 在 MAIN PWM 输出上输入以下命令 游戏机:
混音器加载 /dev/pwm_output0 /fs/microsd/etc/mixers/test_mixer.mix
# 语法
混音器文件是定义一个或多个混音器定义的文本文件:一个或多个输入与一个或多个输出之间的映射。
混合器的定义有四种: 多旋翼搅拌机, 直升机搅拌机, 总和混合器和 无效混合器.
- 多旋翼搅拌机 - 为 4、6 或 8 转子载具定义 + 或 X 几何形状的输出。
- 直升机混合器 - 定义直升机斜盘伺服器和主电机电调的输出(尾旋翼是单独的)。 总和混合器.)
- 求和混合器 - 将零个或多个控制输入合并为一个执行器输出。输入被缩放,混合功能在应用输出缩放器之前对结果求和。
- 空混合器 - 产生一个输出为零(未进入故障安全模式时)的单个执行器输出。
TIP
使用 多旋翼 和 直升机搅拌机 为各自类型的 总和混合器 用于伺服和执行器控制,以及 无效混合器 用于创建在正常使用时必须为零的输出(例如,降落伞在正常情况下为 0,但在故障安全时可能会有一个特定值)。A VTOL 混合器 结合了其他类型的混合器。
每个混音器产生的输出数量取决于混音器的类型和配置。例如,多旋翼混音器会根据几何形状产生 4、6 或 8 个输出,而求和混音器或空混音器只会产生一个输出。
您可以在每个文件中指定多个混频器。输出顺序(将混合器分配给执行器)取决于读取混合器定义的设备;对于 PWM 设备,输出顺序与声明顺序一致。例如,如果您为一个四边形几何体定义了一个多旋翼混合器,然后是一个空混合器,接着是两个求和混合器,那么这将为四边形几何体分配前 4 个输出、一个"空"输出和后两个输出。
每个混合器的定义都以一行形式开始:
<标签>: <混合器参数>;
标签
选择混音器类型(有关每种类型的详细信息,请参阅链接):
有些混合器的定义由多个标记组成(例如 O
和 S
),与上述混合器类型标记一致。
备注
任何一行,如果开头不是一个大写字母,后面不是冒号,都可以忽略不计(因此,解释性文字可以与定义自由混合)。
# 求和混频器
求和混合器用于执行器和伺服控制。
求和(简单)混合器将零个或多个控制输入合并为一个执行器输出。输入被缩放,混合函数在应用输出缩放器之前对结果求和。输出缩放器中还可指定最小执行器移动时间限制(回转速率的倒数)。
一个简单的混合器定义首先是
M: <control count> O: <-ve scale> <+ve scale> <offset> <lower limit> <upper limit> <遍历时间>;
如果 <控制计数>;
为零,总和实际上为零,混音器将输出一个固定值,即 <offset>;
碍 <下限>;
和 <上限>;
.
第二行定义输出缩放器,缩放器参数如上所述。虽然计算是以浮点运算的方式进行的,但存储在定义文件中的数值是按 10000 的系数缩放的;也就是说,偏移量为 -0.5 时,编码为 -5000。偏移量 遍历时间>;
(输出标尺上的(可选)适用于移动速度过快可能会损坏的执行器,如 VTOL 飞行器上的倾转执行器。它可用于限制执行器的变化速率(如果未指定,则不应用速率限制)。例如 遍历时间>;
值为 20000 时,将限制执行器的变化率,使其至少需要 2 秒钟才能从 "开始 "到 "结束"。 <下限>;
到 <上限>;
反之亦然。
备注
-
遍历时间>;
只有在硬件需要时才能使用! - 不要对控制飞行器姿态的执行器(如空气动力表面的伺服器)施加任何限制,因为这很容易导致控制器不稳定。
该定义还包括 <控制计数>;
描述控制输入及其缩放的条目,格式为
S: <group> <index> <-ve scale> <+ve scale> <offset> <lower limit> <upper limit>;
备注
S:
线必须低于 O:
线。
备注
任何混音器输出端都有一个节流输入端(一个 S:
-与 <组>=0
和 <索引>=3
) 在解除或预设状态下不会工作。例如,有四个输入(滚转、俯仰、偏航和油门)的伺服器在解除警报状态下即使有滚转/俯仰/偏航信号也不会移动。
组>;
值标识缩放器将读取的控制组,而 <索引>;
在该组中的偏移值。这些值是读取混音器定义的设备所特有的。
用于混合载具控制时,混合器零组为载具姿态控制组,指数值零至三通常分别为滚转、俯仰、偏航和推力。
该行的其余字段使用上述参数配置控制缩放器。虽然计算是以浮点运算的方式进行的,但存储在定义文件中的数值是按 10000 的系数缩放的;也就是说,偏移量为 -0.5 时,编码为 -5000。
下面举例说明一个典型的混合器文件 这里.
# 空混合器
空混合器不消耗任何控制器,只产生一个值始终为零的执行器输出。
通常情况下,空混合器在混合器集合中用作占位符,以实现特定的执行器输出模式。它还可用于控制故障安全设备的输出值(正常使用时输出值为 0;故障安全时混频器被忽略,取而代之的是故障安全值)。
空混合器定义的形式是
Z:
# 多旋翼搅拌机
多旋翼混合器将四个控制输入(滚转、俯仰、偏航、推力)组合成一组执行器输出,用于驱动电机速度控制器。
混合器定义是一行表格:
R:<几何> <滚动标尺> <俯仰标尺> <偏航标尺> <怠速>;
支持的几何形状包括
- 4x - X 配置的四旋翼飞行器
- 4+ - + 配置的四旋翼飞行器
- 6x - 采用 X 配置的六旋翼飞行器
- 6+ - 采用 + 配置的六旋翼飞行器
- 8x - X 配置的八旋翼飞行器
- 8+ - 采用 + 配置的八旋翼飞行器
每个滚转、俯仰和偏航比例值都决定了滚转、俯仰和偏航控制相对于推力控制的比例。虽然计算是以浮点运算的方式进行的,但存储在定义文件中的数值是按 10000 的系数缩放的,即 0.5 的系数编码为 5000。
滚动、俯仰和偏航输入的范围为-1.0 至 1.0,而推力输入的范围为 0.0 至 1.0。每个执行器的输出范围为-1.0 至 1.0。
空转速度范围为 0.0 至 1.0。空转速度是相对于电机的最大速度而言的,是在所有控制输入为零时指令电机旋转的速度。
在执行机构达到饱和的情况下,所有执行机构的数值都会被重新调整,使饱和执行机构的数值限制在 1.0。
# 直升机搅拌机
直升机混合器将三个控制输入(滚转、俯仰、推力)组合成四个输出(旋转板舵机和主电机电调设置)。直升机混合器的第一个输出是主电机的油门设置。随后的输出为十字盘舵机。尾旋翼可通过添加一个简单的混合器来控制。
推力控制输入用于主发动机设置以及斜盘的集体俯仰。它使用一个油门曲线和一个俯仰曲线,两者都由五个点组成。
备注
油门和螺距曲线将摇杆输入位置映射为油门值和螺距值(分别)。这样就可以根据不同的飞行类型调整飞行特性。有关如何调整曲线的说明,请参阅 本指南 (打开新窗口) (搜索 可编程节气门曲线 和 可编程螺距曲线).
混频器定义的开头是
H:<斜盘舵机数量,3 或 4 个均可> T:<推力时的油门设置:0%> <25%> <50%> <75%> <100%> P:<推力时的集合螺距:0%> <25%> <50%> <75%> <100%>;
T:
定义节流曲线的点。
P:
定义了螺距曲线的点。两条曲线都包含 0 到 10000 之间的五个点。对于简单的线性行为,曲线的五个值应该是 0 2500 5000 7500 10000
.
随后是每一个斜盘舵机(3 或 4 个)的行,格式如下:
S:<角度> <臂长> <刻度> <偏移量> <下限> <上限>;
<角度>;
的单位是度,0 度为鼻子的方向。从上往下看,正角为顺时针方向。角度 臂长>;
是标准化长度,10000 等于 1。如果所有伺服臂长度相同,则数值都应为 10000。臂长越大,伺服偏转量越小,臂长越短,伺服偏转量越大。
伺服输出的比例为 <scale> / 10000
.缩放后 <offset>;
应介于 -10000 和 +10000 之间。括号内为 <下限>;
和 <上限>;
应为 -10000 和 +10000,以实现全伺服范围。
尾旋翼可通过增加一个 总和混合器:
M: 1 S: 0 2 10000 10000 0 -10000 10000
这样,尾旋翼的设置就可以直接映射到偏航指令。这既适用于伺服控制的尾旋翼,也适用于配有专用电机的尾旋翼。
叶片 130 直升机搅拌机 (打开新窗口) 可以作为一个例子。
H: 3 T: 0 3000 6000 8000 10000 P: 500 1500 2500 3500 4500 # 斜盘伺服器:S: 0 10000 10000 0 -8000 8000 S: 140 13054 10000 0 -8000 8000 S: 220 13054 10000 0 -8000 8000 # Tail servo:M: 1 S: 0 2 10000 10000 0 -10000 10000
- 油门曲线开始时坡度稍大,在 50%推力时达到 6000 (0.6)。
- 它继续以较小的陡坡达到 10000(1.0),推力为 100%。
- 俯仰曲线是线性的,但没有使用整个范围。
- 在 0% 油门时,集合螺距设置已为 500(0.05)。
- 最大油门时,集体螺距仅为 4500(0.45)。
- 对这种类型的直升机来说,使用较高的数值会使叶片失速。
- 该直升机的斜板伺服器位于 0、140 和 220 度角处。
- 伺服臂长度不等。
- 第二个和第三个伺服器的臂长比第一个伺服器长 1.3054。
- 舵机受机械限制,只能使用 -8000 和 8000。
# VTOL 混合器
VTOL 系统使用一个 多旋翼搅拌机 多旋翼输出,以及 总和混音器 用于固定翼作动器(如果是 VTOL 倾转旋翼机,则用于倾转伺服器)。
VTOL 飞行器的混合器系统既可以合并为一个混合器,将所有执行器连接到 IO 或 FMU 端口,也可以分割成独立的 IO 和 AUX 混合器文件。如果分开,我们建议将所有多旋翼飞行器电机连接到一个端口,将所有舵机和固定翼电机连接到另一个端口。
备注
从 PX4 v1.11 开始,FMU 输出只能用于多旋翼电机。要使用 FMU 输出,请设置 VT_MC_ON_FMU=1 (否则在固定翼飞行模式下不会关闭)。