(3)PX4开发指南——PX4架构等关键概念

时间:2021-01-19 21:53:49

                                                  (3)PX4架构等关键概念

接上篇(2)PX4开发指南飞行模式/操控

2.2架构概述

PX4由主要的两层组成:PX4飞行栈,自动驾驶软件和PX4中间件,这是一种通用的机器人中间件,可以支持任何类型的自主机器人。

 

所有的飞机类型,实际上所有机器人系统包括船,都共享一个代码库。整个系统的设计是反应型的,这一意味着:

(1)所有的功能被分为可以交换的组件。

(2)通过异步消息传递通信。

(3)系统可以处理各种任务载荷。

除了考虑这些的运行外,它的模块化最大限度提高可重用性。

上层软件结构

下面的每个板块是一个独立的模块,它在代码,依赖关系和甚至运行是独立的。每个箭头都是通过uORB发布/订阅实现连接。

tip:PX4架构可以非常快速、方便地交换这些单一的模块,甚至在运行时。

控制器/混频器由特定的飞机类型指定(比如直升机,垂直升降机或飞机),但是在更高层的任务管理模块,比如指令和导航器是在平台间是共享的。

(3)PX4开发指南——PX4架构等关键概念

与地面站的通信架构

飞机与地面站的交互通过“业务逻辑”应用,包括指令(通用指令和控制,比如arming),导航器(接收任务,把任务转给下一层导航原语)和mavlik应用程序接收MAVLink数据包并转化为板上的uORB数据结构。架构采用这种分离明确地减少了MAVLink对系统的深度依赖。MAVLink应用程序也使用大量的传感器数据和状态估计,并传送给地面控制站。

(3)PX4开发指南——PX4架构等关键概念

2.3 PX4飞行栈

PX4飞行栈是自主无人的一个引导集合,导航和控制算法。包括固定翼、多旋翼和垂直起降飞机,以及姿态和位置估测器。

估算和控制架构

下图表示了一个典型模块的简单实现。根据飞机,其中一些可以组合成一个简单的应用程序(特定想要一个特定飞机模型预测控制器)。

(3)PX4开发指南——PX4架构等关键概念

2.4 PX4中间件

PX4中间件组成嵌入式传感器和发布/订阅基本中间件的重要的设备驱动,这些驱动连接传感器和应用程序,运行飞行控制

使用发布/订阅方案的意思是:

(1)系统是反应型的:担忧新数据可用时,它会不断更新。

(2)它是完全并行运行的。

(3)系统部件可以使用来自任何安全线程方式的数据

 

2.5 混合驱动器

PX4的架构保证了不同机身布局,核心控制器不需要进行特定情况的处理。

混合器意味着采取强制命令(比如右转),把它们转化为控制电机或者伺服驱动器的指令。

对于带有一个伺服/副翼,这意味着它们一个高,另一个就低。同样,对于直升机:俯仰向前需要改变所有电机的转速。

混合器逻辑从实际姿态控制器中分离开来,极大提高了可重用性。

关键概念

PX4使用控制组(输入)和输出组。概念上非常简单:一个控制组是对于核心飞行控制说的,比如姿态,或者对于有效载荷来说,是万向节。一个输出组是一个物理总线,比如前8个伺服器PWM输出。每个组有8个标准化(-1…+1)命令端口,通过混合器可以映射和缩放。一个混合器定义了8个控制信号如何连接到8个输出端。

对于一个简单飞机控制0(roll)直接连接到输出0(elevator)。对于一个直升机,情况会有所不同:控制0(roll)连接到所有四个电机和油门。

映射

因为这里多种控制组(比如飞行控制、有效载荷等)和多种输出组(前8个PWM输出、UAVCAN等)。一个控制组可以给多个输出组发送指令。

(3)PX4开发指南——PX4架构等关键概念

PX4混合器的定义

在目录ROMFS/px4fmu_common/mixersimplement mixers的文件用来预定义机身类型。

它们可以用作为定制或者一般测试目的的基础。

语法

混频器的定义是一个文本文件:每行以一个简单的大写字母开头,后面跟着一个重要的冒号。其他的所有行都被忽略,意味着解释性文本可以*地与定义混合。

每个文件可能定义不止一个混频器。混频器给执行器的分配就是指定读取混频器定义的设备

一个混频器以下面这样一行的形式开始

<tag>: <mixer  arguments>

标签选择了混频器的类型,‘M’表示一个简单的加法混频器,‘R’表示多旋翼混频器等。

空混频器

一个空混频器不会使用控制信号,也不会产生简单的驱动输出,它的值一直是0。在混频器的集合里,典型的空混频器作为一个占位符来取得特定驱动器的输出模式。

空混频器的定义形式是

Z:

简单的混频器

一个简单的混频器把0或者跟多输入结合成一个简单的驱动器输出。输入被缩放,混频函数在使用输出因子前累加结果。

一个简单的混频器可以这样开始定义

M: <control count>
O: <-ve scale> <+ve scale> <offset> <lower limit> <upper limit>

比如打开quad_v.main.mix的内容如下

(3)PX4开发指南——PX4架构等关键概念

如果<control count>0,累加的和肯定是0,混合器会输出一个固定的值,这个值是<offset><lower limit>  <upper limit>的约束的范围。

第二行定义输出缩放因子和缩放参数,和上面讨论的一样。虽然计算进行浮点运算,但是存储在定义文件里以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个控制输入(滚转、俯仰、偏航和油门)结合成一组用于用于控制电机速度的执行器输出。

该混频器的定义形式是简单的一行:

R: <geometry> <roll scale> <pitch scale> <yaw scale> <deadband>

支持的几何形状包括:

  • 4x - quadrotor in X configuration
  • 4+ - quadrotor in + configuration
  • 6x - hexcopter in X configuration
  • 6+ - hexcopter in + configuration
  • 8x - octocopter in X configuration
  • 8+ - octocopter in + configuration

滚转、俯仰和偏航缩放数值是由滚转、俯仰和偏航相对于控制油门的控制来决定的。虽然进行浮点运算,但是存储在定义文件的值是通过一个10000的因子进行缩放的,比如-0.5编码成-5000.

滚转、俯仰和偏航输入希望在-1.0到1.0的范围,但是油门输入范围是0到1,每个执行器输出是-1.0到1.0

在一个执行器饱和的情况下,所有的执行器的值被重新缩放,这样使得饱和执行器被限制在1.0。

 

 

PWM状态机

PWM状态机作为控制解锁前和解锁输入的函数。提供一个确认“解锁”和确认解锁信号时油门斜坡上升之间的延迟。

概述

输入

1)解锁:确认允许危险动作,如螺旋桨旋转。

2)预解锁:确认允许开始危险动作如移动控制表面

该输入会覆盖当前状态;

确认预解锁立即强制ON行为,不管预解锁对当前状态**的认定的反应。

状态

1)INIT和OFF

pwm输出设置为锁定值。

2)RAMP

pwm输出从锁定值斜坡变化到最小值

3)ON

pwm输出设置根据控制值。

状态装换图

(3)PX4开发指南——PX4架构等关键概念

 

对于这个状态有点难理解,需要结合图像和说明文字理解。