PX4开源软件框架简明简介

2023-05-16

PX4开源软件框架简明简介

  • 1. PX4系统构架
    • 1.1 飞控 + 地面站/RC控制
    • 1.2 飞控 + 伴飞电脑 + 地面站(集成RC控制)
  • 2. PX4软件构架
    • 2.1 设计概念
    • 2.2 软件构架
    • 2.1 中间件
    • 2.2 飞控代码
  • 3. PX4运行环境
    • 3.1 PX4模块运行方式
    • 3.2 PX任务启动方式
  • 4. 总结 & 后续补充文章汇总列表
  • 5. 参考资料

通过Git上的工程目录结构,简单的研读了关于PX4开源工程的情况,详见PX4开源工程结构简明介绍。

鉴于PX4是一份复杂的系统,而复杂事物是非常难于被理解的。也凸显了抽象问题,简化问题的重要性。

通过这种化繁为简方法论,从清晰简洁的设计框架来理解,不仅仅是一种学习方法,也是一种工程设计方法。

注:其实这个工程技术设计岗位职责划分是息息相关的,换句话说不同位置需要从不同的角度来思考,从而将产品更为高质量,高效率的设计出来。可以参考很早之前做人岗匹配时候的资料:团队理念和设计人员级别、职责。

下面我们学习下PX4是怎么设计的!!!

1. PX4系统构架

PX4系统是由软硬件构成,通常可以简单的分为两种典型的构架:飞控和飞控+伴飞电脑。

1.1 飞控 + 地面站/RC控制

该构架上半部分是地面站和RC控制部分;下半部分是飞控。PX4开源工程主要提供的是飞控部分的代码。

Flight Control (Only)

1.2 飞控 + 伴飞电脑 + 地面站(集成RC控制)

该构架上半部分是云端应用和地面站(含手动控制)部分;下半部分是飞控和伴飞电脑。PX4开源工程主要提供的是飞控部分的代码。类似避障的代码需要在伴飞电脑上运行,比如:Obstacle Detection and Avoidance。

FC & Companior Computer

2. PX4软件构架

2.1 设计概念

PX4软件设计遵循reactive设计理念:Published on September 16 2014. (v2.0)

  • Responsive
  • Resilient
  • Elastic
  • Message Driven

reactive principle

注:上面谈及的四点,个人感觉有点接近L5或者是L4应该考虑的问题。而L5更多需要从组织层面(战略需求)考虑,通常国内从一线能一直做到这个位置的人比较少,因为他涉及到政策、规划、战略,以及国内复杂人事关系。但是从纯技术的角度,无法满足短平快项目要求。所以国内,个人认为能做到L3或者L4已经非常不错了。

  • Responsive:响应的及时性

Responsive: The system responds in a timely manner if at all possible. Responsiveness is the cornerstone of usability and utility, but more than that, responsiveness means that problems may be detected quickly and dealt with effectively. Responsive systems focus on providing rapid and consistent response times, establishing reliable upper bounds so they deliver a consistent quality of service. This consistent behaviour in turn simplifies error handling, builds end user confidence, and encourages further interaction.

  • Resilient:自愈的及时性

Resilient: The system stays responsive in the face of failure. This applies not only to highly-available, mission-critical systems — any system that is not resilient will be unresponsive after a failure. Resilience is achieved by replication, containment, isolation and delegation. Failures are contained within each component, isolating components from each other and thereby ensuring that parts of the system can fail and recover without compromising the system as a whole. Recovery of each component is delegated to another (external) component and high-availability is ensured by replication where necessary. The client of a component is not burdened with handling its failures.

  • Elastic:弹性、可扩展性

Elastic: The system stays responsive under varying workload. Reactive Systems can react to changes in the input rate by increasing or decreasing the resources allocated to service these inputs. This implies designs that have no contention points or central bottlenecks, resulting in the ability to shard or replicate components and distribute inputs among them. Reactive Systems support predictive, as well as Reactive, scaling algorithms by providing relevant live performance measures. They achieve elasticity in a cost-effective way on commodity hardware and software platforms.

  • Message Driven: 消息驱动(常规解耦方法之一)

Message Driven: Reactive Systems rely on asynchronous message-passing to establish a boundary between components that ensures loose coupling, isolation and location transparency. This boundary also provides the means to delegate failures as messages. Employing explicit message-passing enables load management, elasticity, and flow control by shaping and monitoring the message queues in the system and applying back-pressure when necessary. Location transparent messaging as a means of communication makes it possible for the management of failure to work with the same constructs and semantics across a cluster or within a single host. Non-blocking communication allows recipients to only consume resources while active, leading to less system overhead.

2.2 软件构架

PX4软件构架由两层构成:

  • 飞行控制栈
  • 中间件
    High-Level Software Architecture

2.1 中间件

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

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

2.2 飞控代码

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

Flight Control Stack

3. PX4运行环境

3.1 PX4模块运行方式

采用两种方式运行:

  • Tasks
  • Work queue tasks

Tasks: The module runs in its own task with its own stack and process priority.

Work queue tasks: The module runs on a shared work queue, sharing the same stack and work queue thread priority as other modules on the queue.

3.2 PX任务启动方式

px4_task_spawn_cmd() 用来启动任务:

independent_task = px4_task_spawn_cmd(
    "commander",                    // Process name
    SCHED_DEFAULT,                  // Scheduling type (RR or FIFO)
    SCHED_PRIORITY_DEFAULT + 40,    // Scheduling priority
    3600,                           // Stack size of the new task or thread
    commander_thread_main,          // Task (or thread) main function
    (char * const *)&argv[0]        // Void pointer to pass to the new task
                                    // (here the commandline arguments).
    );

4. 总结 & 后续补充文章汇总列表

根据对PX4软件构架和PX4运行环境,以及前面PX4开源工程结构简明介绍,我们可以得知模块主要以任务或者任务内工作队列的方式进行工作,后面主要通过每个模块的分析来了解PX4软件的具体实现。

  1. PX4开源工程结构简明介绍
  2. PX4开发环境搭建–模拟器编译及QGroundControl & RC遥控模拟配置
  3. TX12 + ExpressLRS 915MHz RC控制链路配置及问题汇总
  4. PX4模块设计之一:SITL & HITL模拟框架
  5. PX4模块设计之二:uORB消息代理
  6. PX4模块设计之三:自定义uORB消息
  7. PX4模块设计之四:MAVLink简介
  8. PX4模块设计之五:自定义MAVLink消息
  9. PX4模块设计之六:PX4-Fast RTPS(DDS)简介
  10. PX4模块设计之七:Ubuntu 20.04搭建Gazebo模拟器
  11. PX4模块设计之八:Ubuntu 20.04搭建FlightGear模拟器
  12. PX4模块设计之九:PX4飞行模式简介
  13. PX4模块设计之十:PX4启动过程
  14. PX4模块设计之十一:Built-In框架
  15. PX4模块设计之十二:High Resolution Timer设计
  16. PX4模块设计之十三:WorkQueue设计
  17. PX4模块设计之十四:Event设计
  18. PX4模块设计之十五:PX4 Log设计
  19. PX4模块设计之十六:Hardfault模块
  20. PX4模块设计之十七:ModuleBase模块
  21. PX4模块设计之十八:Logger模块
  22. PX4模块设计之十九:Replay模块
  23. PX4模块设计之二十:PX4应用平台初始化
  24. PX4模块设计之二十一:uORB消息管理模块
  25. PX4模块设计之二十二:FlightModeManager模块
  26. PX4模块设计之二十三:自定义FlightTask
  27. PX4模块设计之二十四:内部ADC模块
  28. PX4模块设计之二十五:DShot模块
  29. PX4模块设计之二十六:BatteryStatus模块
  30. PX4模块设计之二十七:LandDetector模块
  31. PX4模块设计之二十八:RCInput模块
  32. PX4模块设计之二十九:RCUpdate模块
  33. PX4模块设计之三十:Hysteresis类
  34. PX4模块设计之三十一:ManualControl模块
  35. PX4模块设计之三十二:AttitudeEstimatorQ模块
  36. PX4模块设计之三十三:Sensors模块
  37. PX4模块设计之三十四:ControlAllocator模块
  38. PX4模块设计之三十五:MulticopterAttitudeControl模块
  39. PX4模块设计之三十六:MulticopterPositionControl模块
  40. PX4模块设计之三十七:MulticopterRateControl模块
  41. PX4模块设计之三十八:Navigator模块
  42. PX4模块设计之三十九:Commander模块
  43. PX4模块设计之四十:FrskyTelemetry模块
  44. PX4模块设计之四十一:I2C/SPI Bus Instance基础知识
  45. PX4模块设计之四十二:ATXXXX模块
  46. PX4模块设计之四十三:icm20689模块
  47. PX4模块设计之四十四: bmp280模块
  48. PX4模块设计之四十五:param模块
  49. PX4模块设计之四十六:dataman模块
  50. bla…bla…

后续文章补充中。。。TBD(列表会慢慢补充)

5. 参考资料

【1】PX4 System Architecture
【2】PX4 Flight Stack Architecture
【3】PX4 Middleware

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PX4开源软件框架简明简介 的相关文章

  • 使用从源码编译的SITL测试dronekit代码

    使用从源码编译的SITL测试DroneKit代码 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 DroneKit和SITL简述 DroneKit是一款Python语言的无人机开发库 xff0c 可以对使用MAV
  • Keil一进入调试器就退出的解决方法

    Keil一进入调试器就退出的解决方法 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 问题描述 在使用Keil与TI公司的Tiva TM4C123开发板进行开发时 xff0c 偶尔会出现一进入在线调试器 xff0
  • 在ArduPilot旋翼机上安装PX4Flow光流传感器

    在ArduPilot旋翼机上安装PX4Flow光流传感器 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 预先要求 在安装和调试光流传感器之前 xff0c 请先保证 xff1a 旋翼机已经安装 调试完毕 xff0
  • 教程:使用树莓派连接Pixhawk飞控

    教程 xff1a 使用树莓派连接Pixhawk飞控 树莓派可以与Pixhawk飞控相连 xff0c 读取飞控中的状态信息 xff0c 同时对飞控发送指令 树莓派作为一个更高性能的计算平台 xff0c 可以运行图像识别 机器学习 实时路径规划
  • STM32Cube的PWM控制基础篇(一)一路PWM设置

    以下是有关STM32cube的PWM的花式操作 xff0c 大佬们在看下面链接之前建议先看完本博客 xff0c 个人觉得写的比较详细 xff0c 欢迎大佬之指正 xff01 STM32Cube的PWM控制基础篇 xff08 二 xff09
  • MissionPlanner找不到全部参数表(Full Parameter List)的解决方法

    MissionPlanner 找不到全部参数表 xff08 Full Parameter List xff09 的解决方法 ArduPilot是一款强大的开源飞控软件 xff0c 在使用MissionPlanner的高级功能的时候 xff0
  • Pixhawk室内自动控制:参数设置

    Pixhawk室内自动控制 xff1a 参数设置 本文针对使用光流传感器和超声波传感器 xff08 或激光雷达 xff09 的Pixhawk用户 ArduCopter目前 xff08 3 52 xff09 已经能够使用光流传感器提供的位置信
  • Pixhawk室内自动控制:参数设置(SITL)

    Pixhawk室内自动控制 xff1a 参数设置 xff08 SITL xff09 本文针对使用光流传感器和超声波传感器 xff08 或激光雷达 xff09 进行开发 xff0c 期望实现室内自动控制的Pixhawk用户 这篇文章讲解了如何
  • DroneKit教程(一):安装DroneKit和测试工具

    DroneKit教程 xff08 一 xff09 xff1a 安装DroneKit和测试工具 DroneKit Python是一个用于控制无人机的Python库 DroneKit提供了用于控制无人机的API xff0c 其代码独立于飞控 x
  • DroneKit教程(二):控制Pixhawk示例

    DroneKit教程 xff08 二 xff09 xff1a 控制Pixhawk示例 本篇提供了一个简单的示例 xff0c 配以详细的注释说明不同语句的功能 xff0c 希望能给各位一个总体的框架和印象 该示例文件改写自DroneKit的官
  • DroneKit教程(三):连接Pixhawk飞控

    DroneKit教程 xff08 三 xff09 xff1a 连接Pixhawk飞控 DroneKit提供了非常简便的代码 xff0c 可通过多种方式与飞控连接 连接飞控 使用DroneKit中的connect函数 xff0c 可以方便地连
  • DroneKit教程(四):属性和参数的读取与设置

    DroneKit教程 xff08 四 xff09 xff1a 属性和参数的读取与设置 DroneKit内置了无人机的属性和参数 xff0c 使用简单的Python代码即可进行读取和修改 此教程的例子均使用在本地编译完成的SITL进行测试 如
  • DroneKit教程(五):使用自定义MAVLink指令

    DroneKit教程 xff08 五 xff09 xff1a 使用自定义MAVLink指令 DroneKit的实质是通过发送和接受MAVLink消息 xff0c 向飞控发送控制指令 从飞控获取各种状态信息 DroneKit的所有内置功能都是
  • DroneKit教程(六):继承和自定义Vehicle类

    DroneKit教程 xff08 六 xff09 xff1a 继承和自定义Vehicle类 DroneKit的Vehicle类内置了许多基于MAVLink消息的属性数据 xff0c 但同时也有许多属性数据没有被支持 有时 xff0c 为了支
  • DroneKit教程(七):遥控信道覆盖

    DroneKit教程 xff08 七 xff09 xff1a 遥控信道覆盖 MAVLink支持一项有用却又非常危险的功能 xff1a 遥控信道覆盖 xff08 Channel Override xff09 遥控信道覆盖可以将任一至全部通道的
  • STM32Cube的PWM控制基础篇(三)定时器的PWM设置详解

    STM32Cube的PWM控制基础篇 xff08 一 xff09 一路PWM设置 STM32Cube的PWM控制基础篇 xff08 二 xff09 多路占空比不同的PWM 今天是挤牙膏的第三天 xff0c 感觉如果每天都放很多干货的话可能会
  • 教程:使用DroneKit在室内控制无人机

    教程 xff1a 使用DroneKit在室内控制无人机 DroneKit Python是一个用于控制无人机的Python库 DroneKit提供了用于控制无人机的API xff0c 其代码独立于飞控 xff0c 单独运行在机载电脑 xff0
  • OpenCV 3.3+VS2017+Win10环境配置指南

    OpenCV 3 3 43 VS2017 43 Win10环境配置指南 最近开始接触OpenCV xff0c 没想到安装和环境配置又踩了不少坑 一开始本着对官网的信任 xff0c 按着官方tutorial里的步骤走 xff0c 但是怎么样都
  • 朴素贝叶斯算法原理

    朴素贝叶斯算法原理 朴素贝叶斯分类器 xff08 Naive Bayes Classifier xff09 的优点是运算时间短 数学原理清晰 xff0c 我在MNIST和CIFAR 10数据集上测试 xff0c 错误率分别为15 74 和5
  • ubuntu18.04更新源方法

    前言 Ubuntu自带默认的软件源指向的服务器是部署在国外的 xff0c 在国内进行软件下载更新时会非常慢 xff0c 可以通过更改源地址指向国内的镜像数据源 xff0c 比如阿里 网易 清华 中科等等 PS xff1a 因为今天群里有人在

随机推荐

  • 数据结构算法学习总结-慕课网(五)冒泡排序,与选择,插入排序的异同(从小到大)

    数据结构算法学习总结 慕课网 xff08 五 xff09 冒泡排序 xff0c 与选择 xff0c 插入排序的异同 xff08 从小到大 xff09 1 回顾 上一节讲到了插入排序的优化 xff0c 了解了插入排序的优势 xff0c 这一节
  • 拒绝采样(reject sampling)原理详解

    文章转自 xff1a https blog csdn net jteng article details 54344766 版权归原作者 xff01 蒙特 卡罗方法 Monte Carlo method 也称统计模拟方法 xff0c 通过重
  • Ubuntu sudo 命令行直接输入密码

    在 sh 文件中输入命令时碰上输入密码的最让人头疼 xff0c 就要想一个办法密码自动填充 xff1b 例子 xff1a echo 123 sudo S su 假之密码为123 原命令为 sudo su
  • ESP32+Blufi+Tcp+UART

    ESP32 43 Blufi 43 TCP 43 UART 在上上一篇文章的基础上添加了蓝牙配网的功能 xff0c 第一次连接WiFi时 xff0c 通过手机微信小程序蓝牙配网 xff0c 第二次通过记录的WiFi内容就能够直接连接 参考的
  • ESP32+UART+TCP_Client+OTA

    在上一篇博客的基础上添加了OTA空中升级功能 实现的功能是一个WiFi DTU模块 xff0c ESP32板子通过串口与下位机连接 xff0c 我目前使用的下位机为51 xff0c ESP32第一次启动时 xff0c 通过微信小程序连接wi
  • ubuntu 网络编程

    ubuntu的网络编程 网络编程 一般有两种 TCP 和 UDP TCP 是面向连接层的传输协议 是无误的 数据没有丢失的失序 和 数据不会重复到达的 UDP是用户数据协议 是不可靠的无连接的协议 xff0c 但是可以进行高效率的传输 说起
  • 头文件intrins.h的用法

    KEIL 中 头文件 INTRINS H的作用 在 C51 单片机编程中 xff0c 头文件 INTRINS H 的函数使用起来 xff0c 就会让你像在用汇编时一样简便 内部函数 描述 crol 字符循环左移 cror 字符循环右移 ir
  • 4G DTU 透传模块简单使用方法

    不是打广告 xff0c 纯记录用途 最近由于项目需要 xff0c 买了一批4g 透传模块 众所周知 xff0c 两个4g模块一般不能直连 xff0c 需要中间通过搭建服务器来搭桥 卖家把桥搭好了 xff0c 自己简单配置下 xff0c 就可
  • ucos多任务与linux进程、多线程的比较分析

    从最初使用51片机 xff0c 再到avr msp430 xff0c arm7 arm9裸机 xff0c 单片机的处理速度越来越快 xff0c 而产品需求的日新月异 xff0c 在硬件成本 功耗 体积以及开发周期等的限制下 xff0c 开发
  • 【记录】Ubuntu下简单的软件安装-aptitude安装,samba安装,terminator软件

    Ubuntu下安装简单的软件 一 安装aptitude管理软件 sudo apt get install aptitude 这样可以使用aptitude来管理软件 如下命令 xff1a sudo aptitude update 更新软件源
  • freeRTOS开源项目crazyflie

    不小心接触到了开源飞控 xff0c 有一个小四轴的项目 xff1a crazyflie xff0c 有兴趣百度搜 使用的就是freeRTOS内核 xff0c 可以作为学习freeRTOS应用的一个参考 另外freeRTOS官方源码包里面就有
  • ROS serial串口通讯

    目录 ROS serial 串口通讯安装基本使用代码示例 Reference ROS serial 串口通讯 安装 sudo apt get install ros kinetic serial 基本使用 代码示例 include lt r
  • 四轴飞控DIY简明步骤介绍

    新手四轴飞控DIY组装简明步骤介绍 1 什么叫做新手 xff1f 2 新手如何思考 xff1f 3 上手步骤Step1 xff1a 四轴飞控介绍定义运动原理组成 Step2 xff1a 四轴飞控组装视频Step3 xff1a 四轴飞控新手规
  • BetaFlight开源工程结构简明介绍

    BetaFlight开源工程结构简明介绍 Step1 获取开源代码开源代码版本克隆开源代码 Step2 了解工程情况支持模型类型 xff1a 多旋翼 amp 固定翼支持特性 amp 功能安装 amp 文档链接配置工具下载其他介绍 xff08
  • 四轴FPV无人机手动操作简明介绍

    四轴FPV无人机手动操作简明介绍 通常航拍机都是有自稳算法 43 GPS导航 43 辅助功能 避障 的支持 xff0c 从而保证飞手能够相对容易且稳定的操作模型飞机 xff0c 通常通过阅读说明书都能很快上手 xff0c 这里就不在赘述 本
  • BetaFlight模块设计之三十:Cli模块分析

    BetaFlight模块设计之三十 xff1a Cli模块分析 Cli模块Cli接口Cli框架Cli命令结构主要函数分析cliProcess函数processCharacterInteractive函数processCharacter函数
  • PX4开发环境搭建--模拟器编译及QGroundControl & RC遥控模拟配置

    PX4开发环境搭建 模拟器编译 1 PX4开发环境介绍2 PX4开发环境搭建2 1代码下载2 2 国内环境调整2 3 建立ubuntu开发环境2 4 构建jMAVSim仿真2 5 补充版本信息 3 jmavsim仿真环境3 1 仿真命令集3
  • Android中的枚举

    在ARouter源码中发现使用到了枚举 xff0c 说明枚举并不是不常见的 xff0c 刚好枚举在我的视野中处于盲区 xff0c 于是打算周末加班给拿下 xff0c 扩展视野 了解枚举之前首先说一下什么是常量和变量 常量 声明后无法改变的量
  • PX4开源工程结构简明介绍

    PX4开源工程结构简明介绍 Step1 获取开源代码1 1 开源代码版本1 2 克隆开源代码 Step2 了解工程情况2 1 支持模型类型2 2 支持特性 amp 功能2 3 安装 amp 文档链接2 4 配置工具下载2 5 其他介绍 xf
  • PX4开源软件框架简明简介

    PX4开源软件框架简明简介 1 PX4系统构架1 1 飞控 43 地面站 RC控制1 2 飞控 43 伴飞电脑 43 地面站 集成RC控制 2 PX4软件构架2 1 设计概念2 2 软件构架2 1 中间件2 2 飞控代码 3 PX4运行环境