Kerloud飞控系列教程(20):mixer混控机制

Kerloud飞控系列教程(20):mixer混控机制

什么是 混控器

混控器(Mixer)是PX4飞控系统中的一个关键组件,它的主要作用是将控制器的输出(如滚转、俯仰、偏航和油门命令)转换为各个电机的控制信号。每种飞行器(如四旋翼、固定翼等)都有不同的混控器配置。

混控器 的工作原理

混控器通过将控制输入(如遥控器输入或自动飞行命令)与预定义的混控器配置进行运算,生成每个电机所需的PWM信号。具体来说,混控器将飞行器的姿态控制命令(例如滚转、俯仰和偏航)按照一定的比例和算法混合在一起,然后分配给各个电机。

混控器 配置文件

混控器配置文件通常位于PX4源码目录的ROMFS/px4fmu_common/mixers文件夹中。这些文件使用.mix作为后缀,包含了飞行器的混控器配置。

一个典型的混控器配置文件内容如下:

M: 1

O: 10000 10000 0 -10000 10000

S: 0 0 -10000 -10000 0 -10000 10000

S: 1 1 10000 10000 0 -10000 10000

S: 2 2 10000 10000 0 -10000 10000

S: 3 3 -10000 -10000 0 -10000 10000

· M: 定义了混合器的类型和数量。

· O: 定义了输出通道的范围。

· S: 定义了输入源和比例。

如何自定义混合器

如果现有的混合器配置不能满足需求,您可以创建自己的混合器文件。以下是一个自定义混合器的步骤:

创建混合器文件 :在ROMFS/px4fmu_common/mixers目录下创建一个新的.mix文件。

定义混合器参数 :根据飞行器的控制需求,定义M、O和S参数。

修改启动脚本 :在启动脚本(如init.d/airframes)中引用新的混合器文件。

编译和上传固件 :编译修改后的PX4源码,并将生成的固件上传到飞控板。

## 实例分析

以下是一个四旋翼飞行器的混合器配置实例:

M: 4

O: 10000 10000 0 -10000 10000

S: 0 0 -5000 -5000 0 -10000 10000

S: 1 1 5000 5000 0 -10000 10000

S: 2 2 5000 5000 0 -10000 10000

S: 3 3 -5000 -5000 0 -10000 10000

M: 4 表示有4个混合器。

O: 10000 10000 0 -10000 10000 设置了输出范围。

S: 0 0 -5000 -5000 0 -10000 10000 将第一个控制输入(例如滚转)与第一个电机相关联,并设置了比例。

通过以上配置,控制器的滚转、俯仰、偏航和油门命令将被正确地转换为四个电机的控制信号,从而实现稳定的飞行控制。

控制信号到电机输出信号的过程

在PX4飞控系统中,actuator control主题(/actuator_controls)包含了飞行器的控制指令。这些控制指令通过混合器机制被转换为具体的电机控制信号(PWM信号)。以下是这个转换过程的详细解释:

actuator control主题

actuator control主题发布飞行控制指令,这些指令通常包括以下内容:

roll(滚转)
pitch(俯仰)
yaw(偏航)
throttle(油门)

这些指令以一个数组的形式发布,每个元素对应一个控制通道。例如:

float control[8];

control[0] = roll;

control[1] = pitch;

control[2] = yaw;

control[3] = throttle;

// 其他控制通道

混合器工作流程

- 接收控制指令 :混合器接收来自actuator control主题的控制指令。

- 应用比例和偏移 :根据混合器配置文件中定义的比例和偏移,将控制指令转换为每个电机的输出值。

- 生成PWM信号 :将转换后的输出值转换为PWM信号,并发送到电机控制器。

具体的混合器实现代码位于PX4的源代码中,主要在src/modules/systemlib/mixer目录下。以下是一个简化的工作流程示意图:

void Mixer::mix(float control[]) {

for (int i = 0; i < num_outputs; i++) {

float output = 0;

for (int j = 0; j < num_controls; j++) {

output += control[j] * mixer_config[i][j].scale;

}

motor_output[i] = output;

}

}

最终,混合器生成的PWM信号通过PX4的输出模块发送到电机控制器,实现对电机的具体控制。

通过以上步骤,PX4将飞行控制指令(actuator control主题)转换为混合器输出信号,并驱动电机实现飞行控制。这一过程确保了飞行器能够根据控制指令稳定飞行和执行各种动作。

启发问题

  • 为什么PX4使用混控器这种方式并且可以适配多数常见机型?
  • 混控器和传统控制率的方式相比有何优缺点?

回到教程目录:Kerloud飞控系列教程(1):目录