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):目录