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

相关文章

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

Spring、Spring Boot、Spring Cloud 的区别与联系分析

《Spring、SpringBoot、SpringCloud的区别与联系分析》Spring、SpringBoot和SpringCloud是Java开发中常用的框架,分别针对企业级应用开发、快速开... 目录1. Spring 框架2. Spring Boot3. Spring Cloud总结1. Sprin

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock