PX4项目学习::(一)项目架构::软件简明架构

1 软件构架

  • PX4软件架构由两个层次组成:

  • 一是飞行控制栈(flight stack),即自驾仪的软件解决方案

  • 二是中间件,一种可以支持任意类型自主机器人的通用机器人中间件

在这里插入图片描述

High-Level Software Architecture

2.1 中间件

        中间件主要由嵌入式传感设备驱动,控制驱动,以及消息通信接口组成。除此之外,还引入了模拟层做各种模型模拟及仿真。

 ├──> 硬件驱动&适配
 │   ├──> 飞控板硬件适配
 │   ├──> 操作系统硬件适配
 │   ├──> 传感&控制驱动适配
 ├──> 消息通信
 │   ├──> uORB消息机制
 │   ├──> MAVLink消息机制
 │   ├──> RTPS/DDS消息机制
 └──> 模拟器
     ├──> jMAVSim模拟
     ├──> Gazebo模拟
     ├──> Ignition Gazebo模拟
     ├──> FlightGear模拟
     ├──> JSBSim模拟
     ├──> AirSim模拟
     ├──> Multi-Vehicle模拟
     ├──> Failsafes模拟
     ├──> FHITL模拟
     └──> SIH模拟

2.1.1消息总线 uORB

        PX4软件架构的核心思想就是去耦合,所以消息中间件(uORB)处于整个框架图的中心位置。这样的设计是基本所有的大型软件系统的通用设计,比如ROS、ROS2。关于uORB详细分析,将在下一讲中详细描述。

2.1.2基础服务

1.任务管理

        这部分在这个框图中没有体现,作为系统的基础服务,其接口在 platforms/common/include/px4_platform_common中申明

        任务接口 platforms/common/include/px4_platform_common/tasks.h

        工作队列接口 platforms/common/include/px4_platform_common/px4_work_queue

2.日志系统

        px4的日志系统框架不同于apm,用户使用非常简单,日志系统会记录uORB消息,用户无需手动定义需要记录数据的格式,只需要正常定义uORB消息即可,APM记录日志会稍微麻烦一些,需要手动编写不少代码。当然方便的同时也有一定的灵活性不足的问题。

        用户需要添加的新消息可在这个文件中添加需要记录的topic即可src/modules/logger/logged_topics.cpp

3.参数系统

        PX4可以在任意模块目录下定义参数,在编译时由src/lib/parameters/px_generate_params.py脚本生成一个全局的参数源文件,生成在build目录中build/xxx/src/lib/parameters,可以在这里找到飞控所有的参数

2.1.3外部接口

1.mavlink

        飞控与地面站和机载计算机、外部设备的主要通信协议

2.fast-rtps

        一种实时可靠的分布式消息框架,应用于ROS2中作为消息中间件,在PX4中为高频消息传递提供了一个除了mavlink外的一个新的选择

        PX4开发者文档中提供的描述 https://docs.px4.io/master/en/middleware/micrortps.html

2.1.4设备驱动与框架

PX4的设备驱动大致可以分为:

1.SPI/IIC设备

        加速度计、陀螺仪、气压计、罗盘、RGB灯等

这两类设备类都会继承两个基类:

        I2CSPIDriver类

        在platforms/common/include/px4_platform_common/i2c_spi_buses.h文件中申明该类

用于获取总线相关参数,如总线类型、地址、频率以及定义设备id等等

        device::I2C/SPI类

        对于nuttx系统,在src/lib/drivers/device/nuttx中定义这两个类

这两个类定义SPI与IIC的总线操作方法,如总线初始化、读写接口

2.串口设备

        GPS、部分定高雷达等

3.其他设备

        包括adc、pwmin、pwmout、io

 

2.2 飞控代码

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

 请添加图片描述

 在这里插入图片描述

2.2.1导航系统

        导航系统使用各种传感器数据经过状态估计算法获取姿态、位置等状态数据,是PX4的核心算法。

        状态估计的核心算法库位于 src/lib/ecl ; 它的主要作者为Paul Riseborough,他同时也是APM的AP_NavEKF2/3的主要作者。

2.2.2控制系统

1.任务系统

        PX4的位置指令生成模块,包括:

  1. 控制指令 src/modules/commander
  2. 任务模式的控制(定高、定点、航线、返航、降落等模式)src/modules/navigator

2.位置与姿态控制器

        内回路控制器,根据Vechile类型的不同(多旋翼、固定翼、小车、船、飞艇等)执行不同的位置和姿态控制器

  1. 多旋翼位置控制器 src/modules/mc_pos_control
  2. 多旋翼姿态控制器 src/modules/mc_att_control
  3. 多旋翼角速率控制器 src/modules/mc_rate_control
  4. 固定翼L1位置控制器 src/modules/fw_pos_control_l1
  5. 固定翼姿态控制器 src/modules/fw_att_control
  6. 垂起姿态控制器 src/modules/vtol_att_control
  7. 小车位置控制器 src/modules/rover_pos_control
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值