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开源工程主要提供的是飞控部分的代码。
2. PX4软件构架
2.1 设计概念
PX4软件设计遵循reactive设计理念:Published on September 16 2014. (v2.0)
- Responsive
- Resilient
- Elastic
- Message Driven
中间件主要由嵌入式传感设备驱动,控制驱动,以及消息通信接口组成。除此之外,还引入了模拟层做各种模型模拟及仿真。
2.2 飞控代码
飞行控制栈是自主无人机的制导、导航和控制算法的集合。它包括固定翼、多旋翼和垂直起降机身的控制器以及姿态和位置估算。

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() 用来启动任务:
4. 总结 & 后续补充文章汇总列表
根据对PX4软件构架和PX4运行环境,以及前面PX4开源工程结构简明介绍,我们可以得知模块主要以任务或者任务内工作队列的方式进行工作,后面主要通过每个模块的分析来了解PX4软件的具体实现。
- PX4开源工程结构简明介绍
- PX4开发环境搭建–模拟器编译及QGroundControl & RC遥控模拟配置
- TX12 + ExpressLRS 915MHz RC控制链路配置及问题汇总
- PX4模块设计之一:SITL & HITL模拟框架
- PX4模块设计之二:uORB消息代理
- PX4模块设计之三:自定义uORB消息
- PX4模块设计之四:MAVLink简介
- PX4模块设计之五:自定义MAVLink消息
- PX4模块设计之六:PX4-Fast RTPS(DDS)简介
- PX4模块设计之七:Ubuntu 20.04搭建Gazebo模拟器
- PX4模块设计之八:Ubuntu 20.04搭建FlightGear模拟器
- PX4模块设计之九:PX4飞行模式简介
- PX4模块设计之十:PX4启动过程
- PX4模块设计之十一:Built-In框架
- PX4模块设计之十二:High Resolution Timer设计
- PX4模块设计之十三:WorkQueue设计
- PX4模块设计之十四:Event设计
- PX4模块设计之十五:PX4 Log设计
- PX4模块设计之十六:Hardfault模块
- PX4模块设计之十七:ModuleBase模块
- PX4模块设计之十八:Logger模块
- PX4模块设计之十九:Replay模块
- PX4模块设计之二十:PX4应用平台初始化
- PX4模块设计之二十一:uORB消息管理模块
- PX4模块设计之二十二:FlightModeManager模块
- PX4模块设计之二十三:自定义FlightTask
- PX4模块设计之二十四:内部ADC模块
- PX4模块设计之二十五:DShot模块
- PX4模块设计之二十六:BatteryStatus模块
- PX4模块设计之二十七:LandDetector模块
- PX4模块设计之二十八:RCInput模块
- PX4模块设计之二十九:RCUpdate模块
- PX4模块设计之三十:Hysteresis类
- PX4模块设计之三十一:ManualControl模块
- PX4模块设计之三十二:AttitudeEstimatorQ模块
- PX4模块设计之三十三:Sensors模块
- PX4模块设计之三十四:ControlAllocator模块
- PX4模块设计之三十五:MulticopterAttitudeControl模块
- PX4模块设计之三十六:MulticopterPositionControl模块
- PX4模块设计之三十七:MulticopterRateControl模块
- PX4模块设计之三十八:Navigator模块
- PX4模块设计之三十九:Commander模块
- PX4模块设计之四十:FrskyTelemetry模块
- PX4模块设计之四十一:I2C/SPI Bus Instance基础知识
- PX4模块设计之四十二:ATXXXX模块
- PX4模块设计之四十三:icm20689模块
- PX4模块设计之四十四: bmp280模块
- PX4模块设计之四十五:param模块
- PX4模块设计之四十六:dataman模块
- bla…bla…
后续文章补充中。。。TBD(列表会慢慢补充)
5. 参考资料
【1】PX4 System Architecture
【2】PX4 Flight Stack Architecture
【3】PX4 Middleware
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!