PX4中混控器Mixer的分析

2024-08-31 06:32
文章标签 分析 px4 mixer 控器

本文主要是介绍PX4中混控器Mixer的分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PX4架构保证了核心控制器中不需要针对机身布局做特别处理。混控指的是把输入指令(例如:遥控器打右转)分配到电机以及舵机的执行器(如电调或舵机PWM)指令。对于固定翼的副翼控制而言,每个副翼由一个舵机控制,那么混控的意义就是控制其中一个副翼抬起而另一个副翼落下。同样的,对多旋翼而言,俯仰操作需要改变所有电机的转速。将混控逻辑从实际姿态控制器中分离出来可以大大提高复用性。

1 控制流程

一个特定的控制器(如姿态控制器)发送特定的归一化(-1..+1)的命令到给混合(mixing),然后混合后输出独立的PWM到执行器(电调,舵机等).在经过输出驱动如(串口,UAVCAN,PWM)等将归一化的值再转回特性的值(如输出1300的PWM等)。如图1所示。

2 控制组

PX4 有输入组和输出组的概念,顾名思义:控制输入组(如: attitude),就是用于核心的飞行姿态控制,(如: gimbal )就是用于挂载控制.一个输出组就是一个物理总线,如前8个PWM组成的总线用于舵机控制,组内带8个归一化(-1..+1)值,一个混合就是用于输入和输出连接方式(如:对于四轴来说,输入组有俯仰,翻滚,偏航等,对于于向前打俯仰操作,就需要改变输出组中的4个电调的PWM输出值,前俩个降低转速,后两个增加转速,飞机就向前)。对于简单的固定翼来说,输入0(roll),就直接连接到输出的0(副翼)。对于多旋翼来说就不同了,输入0(roll)需要连接到所有的4个电机。

Control Group #0 (Flight Control)
•	0: roll (-1..1)
•	1: pitch (-1..1)
•	2: yaw (-1..1)
•	3: throttle (0..1 normal range, -1..1 for variable pitch / thrust reversers)
•	4: flaps (-1..1)
•	5: spoilers (-1..1)
•	6: airbrakes (-1..1)
•	7: landing gear (-1..1)
Control Group #1 (Flight Control VTOL/Alternate)
•	0: roll ALT (-1..1)
•	1: pitch ALT (-1..1)
•	2: yaw ALT (-1..1)
•	3: throttle ALT (0..1 normal range, -1..1 for variable pitch / thrust reversers)
•	4: reserved / aux0
•	5: reserved / aux1
•	6: reserved / aux2
•	7: reserved / aux3
Control Group #2 (Gimbal)
•	0: gimbal roll
•	1: gimbal pitch
•	2: gimbal yaw
•	3: gimbal shutter
•	4: reserved
•	5: reserved
•	6: reserved
•	7: reserved (parachute, -1..1)
Control Group #3 (Manual Passthrough)
•	0: RC roll
•	1: RC pitch
•	2: RC yaw
•	3: RC throttle
•	4: RC mode switch
•	5: RC aux1
•	6: RC aux2
•	7: RC aux3
Control Group #6 (First Payload)
•	0: function 0 (default: parachute)
•	1: function 1
•	2: function 2
•	3: function 3
•	4: function 4
•	5: function 5
•	6: function 6
•	7: function 7

 

3 混控文件的定义

ROMFS/px4fmu_common/mixers中的文件实现了预定义机架所使用的混控器。它们可以用于自定义机架或者一般的测试。

3.1 语法

mixer通过文本文件定义;以单个大写字母加一个冒号开始的行是有效的。其它的行则会被忽略,这意味着注释可以自由地在定义中穿插使用。
每个文件可以定义多个混控器;混控器与作动器的分配关系由读取混控器定义的设备决定,作动器输出数目则由混控器决定。
例如:每个简单混控器或者空混控器按照它们在混控器文件中出现的顺序对应到输出1到输出x。一个混控器定义通常具有如下形式:
<tag>: <mixer arguments>
tag标签决定混控器的类型;M对应简单求和混控器,R对应多旋翼混控器,等等。

3.2 空混控器

空混控器不接受控制输入并产生单个作动器输出,其输出值恒为零。空混控器的典型用法是在一组定义作动器特定输出模式的混控器组中占位。空混控器定义形式如下:
Z:

3.3 简单混控器

简单混控器将0个或多个控制输入混合为单个作动器输出。所有输入被缩放后,经过混合函数得到混合后的输入,最后再经过输出缩放产生输出信号。简单混控器定义如下:
M: <control count>
O: <-ve scale> <+ve scale> <offset> <lower limit> <upper limit>
如果 <control count> 为0,那么混合结果实际上为0,混控器将输出一个定值,这个值是在<lower limit>和<upper limit>限制下的<offset>。第二行用前文讨论过的缩放参数定义了输出缩放器。计算以浮点操作被执行,存储在定义文件中的值经过了因子10000的缩放,即偏移量-0.5会被存储为-5000。紧跟在<control count>词目之后的定义描述了控制输入以及它们的缩放,形式如下:
S: <group> <index> <-ve scale> <+ve scale> <offset> <lower limit> <upper limit>
<group>值标示了控制输入来源,缩放器从中读取控制量,<index>值则是控制量在组内的序号。这些值对读取混控器定义的设备而言都是特定的。当用来混合载体控制时,控制组0是载体姿态控制组,序号0到3通常对应滚转,俯仰,偏航和油门。混控器定义行中剩下的域则用来配置缩放器,参数如前文讨论。计算以浮点操作被执行,存储在定义文件中的值经过了因子10000的缩放,即偏移量-0.5会被存储为-5000。
 

4 固定翼混控的简单分析

分析一下固定翼Wing Wing Z-84的混控器设计,机型如图2所示。它的混控文件为wingwing.main.mix。这个机型只有左右副翼和一个电机。

其中左右副翼的链接输出通道的0和1,电机链接输出通道3,对于输出通道2则闲置。输入通道来源于通道0(飞机姿态),通道0中,Roll、Pitch、thrust分别对于0,1,3(这里好像不支持Yaw的控制)。混控器的设置由图3所示。由于左右两个舵机在物理上是反向的,所以对于Pitch的输入也需要做反向处理。

混控文件是这样的

混控器中第一行M:2表示输出0需要对下面两个通道的的输入做简单的加法混控。O:      10000  10000      0 -10000  10000代表负值正值的缩放比例都为1000,偏置为0,最大最小输出范围为-10000到10000。后面两行S开头的代表需要做混控的输入,第一行是对输入Roll的处理,第二行是对输入Pitch的处理。同理第二个M:2是混控得到输出1。

举个简单的例子,Roll的输入为0,加入当前Pitch的输入为0.1。执行前两个混控后,得到的输出为,通道0的输出为650,通道1的输出为-650,按理说对Pitch的控制,两个副翼的角度应该是一样的,但是因为两个舵机在以上的安放位置相反,所以输出也相反。
对于通道3的输出就只有油门了,对油门进行缩放即可。

5 多旋翼混控的简单分析

多旋翼的的混控那最简单的四轴X模式来分析,先分析混控文件,如图4所示。四周的混控文件非常简单,R: 4x 10000 10000 10000 0表示的意思为,R:旋翼混控器,4x:四轴X模式,后面的3个10000是Roll、Pitch、Yaw的缩放比例,0为死区范围。而后面的两个混控器是准备别的辅助通道混控,Roll、Pitch、Yaw的混控并不在这个混控文件里面,因为四轴一个电机的输出和Roll、Pitch、Yaw、thrust都有关系,所以四轴的混控在mixer_multirotor.cpp中完成。

对于不同的旋翼机型会定义不同的混控数组,四轴X模式的数组如图5所示。其中每一行对应一个电机的输出,每一列对于Roll、Pitch、Yaw、Thrust的输入。

在mixer_multirotor.cpp文件中会先计算先根据Roll、Pitch的输入计算出混控器的输出,然后根据电机是否饱和缩放后,再次加入Yaw叫输入的混控,最后加入油门的混控。

6 饱和的处理

处理的代码如下图

1 根据混控矩阵计算得到out,这一步已经包含油门,同时记录下最大输出和最小输出,outputs保存四个电机的输出值。

2 第一种情况,min小于0,max大于0,min,max之差小于1,可以通过偏移解决。加油油门增加幅度大于|min|,可以通过增加油门的方式解决,boost = -min_out;如果油门增加幅度太小,需要把roll和pitch的缩小后再计算。

举个例子,当前thrust为0.2,计算得到新的输出值之后,min为-0.2,max为0.6,roll和pitch带来转速上的变化是0.4,由于只计算了Roll和Pitch,所以在旋翼里面,min和max到thrust的距离一定是一样的。这种情况就是第一种情况,并且油门增大幅度为0.2*0.5=0.1,不足以平衡min的大小。需要对Roll和Pitch进行缩放。计算得到boost=0.1,roll_pitch_scale=0.75,然后再计算下面的代码。可以知道min=0,max=0.6,没有饱和。

这篇关于PX4中混控器Mixer的分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123154

相关文章

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置