PX4混控器相关知识梳理

1.mixer在系统中的地位与作用

    PX4从核心控制器获取所需的扭矩和推力指令,并将它们转换为控制电机或驱动器的驱动指令。例如,“向右转”需要给出一个扭矩指令: 

  • 对于每个副翼都有一个舵机的飞机来说,该指令将会控制一个舵机向高处偏转,另一个向低处偏转。
  • 多旋翼将会通过改变所有电机的转速来向右偏航。

    混控器又称为mixer。混控的作用是把输入指令分配到电机、舵机的执行器指令。 将姿态控制的结果结合机型、尺寸进行PWM的输出,进而使得各个电机实现各自需要的转速。

下图为PX4运行过程中比较核心的进程:

        

   红色框表示的是由导航与解算过程,得到飞机当前的位置属性和姿态属性。

   蓝色框表示的控制命令,由用户发出commander命令进行模式选择,navigator进行路径规划,最终通过姿态控制产生控制量,控制量通过mixer分配到每个电机上。

2.mixer启动的两个阶段

2.1第一阶段

  第一部分:机型选择背后所进行的一系列启动和配置过程

主要过程如下图虚线框所示:

  在地面站进行机型选择时触发,代码部分在飞控源码rcs中进行,rcs为总的启动脚本,在该脚本中依次递归调用其他的启动脚本。图中所有以数字代表的即为机型参数。

    假设我们在地面站配置时已经选择了Dji_f450,那么system_params.c文件中就会将SYS_AUTOSTART这个参数设置为4011,4011就是Dji_f450在程序中的代号。

配置好后会在rcs脚本中进行判断    

     这时就会递归调用第二个脚本rc.autostart。

    在第二个脚本中会继续进行判断,如果参数被设置为4011,就会继续调用4011_dji_f450第三个脚本

    之后我们来到第三个脚本, 在这个脚本中设定了一组默认的PID参数,设定了PWM的最小值,这些都是根据你的机型和尺寸进行设定的,不同机型的这组默认参数是不同的。除了设定这些参数外,在这个脚本中也调用了第四个脚本4001_quad_x。

    quad_x意思为x型旋翼,dji450也属于x型旋翼,在这个脚本中,初始化PWM输出为1234,代表对于该机型有4路PWM输出,并且设定了×型旋翼 mixer脚本,递归调用第五个启动脚本rc.mc_defaults。

 在这个脚本中配置了一组PWM参数,例如PWM的输出最大、最小值、频率等。

    以上就是mixer启动的第一部分,递归调用五个脚本,总结来说在mixer启动的第一阶段主要做的就是对mixer进行配置,配置了PID参数,配置了mixer输出通道,配置了PWM输出的最小值最大值以及输出频率,配置了使用什么脚本。

2.2第二阶段

    第二部分:脚本的加载,脚本的解析,PWM的计算,PWM的解析,这些都在rc.interface脚本中完成。

    主要过程如下图虚线框所示:

   下面通过源码对第二阶段进行解读:

    我们在第一阶段已经将mixer配置成了quad_x,‘$’代表读取变量,即这里的mixer就等于quad_x,下面这行代码代表选中脚本,准备进行解析。

     加载脚本:

     配置PWM输出:

3.控制量的传递过程 

    姿态控制产生的控制量在att_control_main.cpp文件这,[0][1][2][3]即代表横滚、俯仰、偏航以及油门合力产生的4路控制量。

这四路的控制量会以一个消息ID进行发布:

   PIXHAWK飞控板有主处理器FMU(运算)和协处理器IO(输出),在进行PWM的计算时,需要两个输入,一个是姿态控制的控制量(在FMU上产生),一个是脚本(脚本的解析也在FMU上解析),而PWM又是通过协处理器输出,所以主处理器和协处理器之间需要通过串口通信,将主处理器上产生的控制量传递到协处理器上。

 4.mixer脚本的认识

    mixer脚本中只有特定大写字母后的内容会被加载进内存中, 以x型旋翼垂直起降脚本为例,如下图。

4.1 R类型 

    R类型即旋翼类型,R型旋翼的PWM通过混控器的逆矩阵和控制量矩阵相乘得到。

    第一个参数 4X 代表X型四旋翼,也代表4路PWM输出。

    第二个参数10000本质为1,放大10000倍是为了方便计算,代表pitch的控制量是否缩放。

    第三个参数代表roll的控制量是否缩放。

    第四个参数代表yaw的控制量是否缩放。

    第五个参数为起始油门为0。

4.2 Z类型

    Z 类型即代表 zero,表示第五路PWM输出恒为0,在此只起占位符的作用。

4.3 M类型

     M 类型代表simple 简单求和类型,也代表一路PWM输出。M之后的参数2代表有两路source参与计算。

     两个S代表source,S之后的第一个参数为1代表1号控制组,第二个参数0代表0号控制量

     第三个参数5000代表负缩放0.5,第四个参数5000代表正缩放0.5。

     第五个参数0代表偏移量为0,第七、八个参数表示限幅在[-1,1]。

     O代表输出output,即两路S求和的结果。

5.PWM的计算

    在上一步计算得到的PWM是一个被限幅在[-1,1]之间的原始值,还需要将这个原始值转变成真实有效的在[1000,2000]us,即PWM输出周期内高电平的时间,将这个输出交给定时器,定时器产生方波,进而驱动电机转动。上述过程可以在mixer.cpp文件中通过三句源码来进行解释。

    第一句:其背后所做的工作就是控制量的获取,脚本的解析,以及将原始的PWM波输出到outputs[0]中。

    mixer_group是一个链表类型,可以存储我们之前提到的每一种类型的脚本,通过调用其对应的计算方法,得到原始控制量。 

    第二句:将原始的PWM输出转换为在[1000,2000]之间的真实有效的PWM。

    第三句:将产生的真实有效PWM进行输出,写入到定时器,产生方波。

  • 20
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值