查看: 344|回复: 0

PX4-2-系统架构浅析

[复制链接]

221

主题

256

帖子

699

积分

高级飞友

Rank: 4

积分
699
飞币
441
注册时间
2017-7-26
发表于 2022-10-28 07:43:02 | 显示全部楼层 |阅读模式
PX4软件架构图是PX4官方开发者网站中的一张总体框架图,相信很多同学都看过,我们今天围绕这张图作一下简单的分析。

PX4-2-系统架构浅析-1.jpg
如果希望仔细研究PX4源码的同学应该仔细阅读这一张图,它包含了所有的核心模块,以及它们的关系。
整个PX4源码分为几个部分

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

    • 任务管理
      这部分在这个框图中没有体现,作为系统的基础服务,其接口在 platforms/common/include/px4_platform_common中申明
      任务接口 platforms/common/include/px4_platform_common/tasks.h
      工作队列接口 platforms/common/include/px4_platform_common/px4_work_queue
    • 日志系统
      px4的日志系统框架不同于apm,用户使用非常简单,日志系统会记录uORB消息,用户无需手动定义需要记录数据的格式,只需要正常定义uORB消息即可,APM记录日志会稍微麻烦一些,需要手动编写不少代码。当然方便的同时也有一定的灵活性不足的问题。
      用户需要添加的新消息可在这个文件中添加需要记录的topic即可src/modules/logger/logged_topics.cpp
    • 参数系统
      PX4可以在任意模块目录下定义参数,在编译时由src/lib/parameters/px_generate_params.py脚本生成一个全局的参数源文件,生成在build目录中build/xxx/src/lib/parameters,可以在这里找到飞控所有的参数

  • 外部接口

    • mavlink
      飞控与地面站和机载计算机、外部设备的主要通信协议
    • fast-rtps
      一种实时可靠的分布式消息框架,应用于ROS2中作为消息中间件,在PX4中为高频消息传递提供了一个除了mavlink外的一个新的选择
      PX4开发者文档中提供的描述 https://docs.px4.io/master/en/middleware/micrortps.html

  • 设备驱动与框架
    PX4的设备驱动大致可以分为:

    • 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的总线操作方法,如总线初始化、读写接口
    • 串口设备
      GPS、部分定高雷达等
    • 其他设备
      包括adc、pwmin、pwmout、io

  • 导航系统
    导航系统使用各种传感器数据经过状态估计算法获取姿态、位置等状态数据,是PX4的核心算法。
    状态估计的核心算法库位于 src/lib/ecl
    它的主要作者为Paul Riseborough,他同时也是APM的AP_NavEKF2/3的主要作者。
  • 控制系统

    • 任务系统
      PX4的位置指令生成模块,包括
      控制指令 src/modules/commander
      任务模式的控制(定高、定点、航线、返航、降落等模式)src/modules/navigator
    • 位置与姿态控制器
      内回路控制器,根据Vechile类型的不同(多旋翼、固定翼、小车、船、飞艇等)执行不同的位置和姿态控制器
      多旋翼位置控制器 src/modules/mc_pos_control
      多旋翼姿态控制器 src/modules/mc_att_control
      多旋翼角速率控制器 src/modules/mc_rate_control
      固定翼L1位置控制器 src/modules/fw_pos_control_l1
      固定翼姿态控制器 src/modules/fw_att_control
      垂起姿态控制器 src/modules/vtol_att_control
      小车位置控制器 src/modules/rover_pos_control

PX4的软件框架简单介绍到这里,大家对系统有一个基础的整体认识,然后可以根据自己的兴趣去仔细研究其中的一些模块。
这个博客转载自我个人的微信公众号,这里会不定期更新一些我整理的无人机相关知识和个人设计,欢迎添加关注。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表