PX4之代码结构

PX4开源飞控系统详解:代码结构与关键组件,
PX4是一个主流的开源飞控项目,广泛应用于无人机和evtol验证机。其代码结构包括硬件平台配置、驱动、模块实现、通讯协议等。主要目录有boards、src、build等,其中srcmodules包含控制算法如姿态估计、控制和位置控制。飞控固件通过make编译生成,如makepx4_fmu-v5_default。理解项目涉及研究rcS启动脚本、Makefile及系统底层和控制算法。

PX4开源飞控是目前主流的开源飞控项目,被很多公司作为飞控开发的参考。也广泛被用于现在流行的evtol验证机的飞控,进行初步的飞行验证。可能大多数AAM以及UAM都离不开PX4。

项目代码可以从github下载
$ git clone --recursive GitHub - PX4/PX4-Autopilot: PX4 Autopilot Software

这里采用–recursive选项,因为PX4项目包含很多子项目,可以同步下载,或者采用
$ git clone https://github.com/PX4/PX4-Autopilot
$ git submodule update --init --recursive

分步下载代码库和子代码库,如果有github连接不稳定的情况,可以多次执行git submodule update来下载所有的子代码库。

项目代码结构大致如下

 

 其中主要的目录有
1 boards
各种飞控硬件平台的配置文件

2 build
编译产生的目录,make之后生成的文件放置在这个目录

3 cmake
cmake编译配置目录

4 Documentation
开发者文档目录,包括代码说明等

5 launch
仿真环境用到的文件,包括ROS节点配置等

6 mavlink
通讯协议文件,定义和实现PX4与地面站之间的通讯协议。

7 msg
uORB消息定义文件,定义PX4程序之间通讯的消息格式。

8 platforms
系统平台实现的文件,包括PX4采用的Nuttx操作系统的源代码。

9 ROMFS
系统启动调用的脚本,ROMFS\px4fmu_common\ini.d\rcS是启动脚本,rcS中又调用rc.sensors,rc.mc_apps等文件。
rcS:最先启动的脚本,负责挂载SD,启动uORB、配置系统参数等。
rc.sensors:启动传感器驱动。
rc.mc_apps:启动上层应用,如commander(指令处理)、att_control(姿态控制)、pos_control(位置控制)等。

10 src
源代码目录,包含驱动、测试示例、模块实现等源代码。
10.1 drivers
包含了飞控硬件系统中使用的所有驱动代码。
10.2 examples
PX4系统给的一些简单的实例,为了便于开发者做二次开发调试测试使用。如px4_simple_app,示例了如何通过uORB获取需要的数据。
10.3 lib
包含一些标准库,如矩阵运算、加密/解密、PID算法等
10.4 modules
包含所有上层应用的模块实现,PX4的上层程序都是通过模块的形式来运行(类似于ROS里面的节点),每一个模块订阅和发布uORB信息。模块包括姿态解算、姿态控制、位置控制、命令处理(commander)等。其中commander是实现整个任务模式调度的代码,包括pixhawk灯显控制、飞行模式切换、上锁解锁等。下面是其中一些module的介绍:

attitude_estimator_ekf:采用EKF算法实现的姿态估计
attitude_estimator_q: 使用mahony的互补滤波算法实现姿态解算。
mc_att_control:即multi-copter attitude control,多轴飞行器的姿态控制算法实现,主要就是姿态的内外环PID控制,外环角度控制,内环角速度控制。
mc_pos_control: multi-copter position control,多轴飞行器的位置控制算法实现,主要是位置的内外环PID控制,外环速度控制,内环加速度控制。
commander: 整个系统的任务调度,包括命令处理、事件处理、飞行模式切换等。
land_detector: 飞行过程中使用land模式降落或者落地时的落地监测部分,内部会监测Z轴速度和加速度等。
local_position_estimator: 常说的LPE算法实现位置解算。
mavlink: 和地面站通信的通信协议,结合地面站QGC源码配合修改,或者仅仅调用mavlink内部的API接口,即可通过无线信号将所需的数据显示在地面站QGC上,此方法是一种实时监测目标数据的方法。
logger: 关于log日志的读写函数。

飞控固件的生成由make来实现,如
$ make px4_fmu-v5_default #v5默认
$ make px4_sitl_default gazebo #gazebo仿真

总结
整个代码实现主要涉及的包含:
platforms - 系统实现,系统底层实现,如分时控制,多线程调度,消息机制等
src/drivers - 驱动实现,设备驱动,如陀螺仪/加速度计、GPIO、I2C等硬件底层实现
src/modules - 应用实现,控制模块、任务调度等
ROMFS/px4fmu_common/ini.d/rcS - 启动脚本,里面指定了启动哪些程序、哪些模块
Makefile - 系统编译生成的配置

研究整个项目的生成和运行可以了解rcS,Makefile等编译生成文件和启动脚本,
了解系统底层实现可以看platforms,src/drivers等目录内容,
了解飞行控制的实现和算法主要查看src/modules中的内容。

### PX4代码结构分析 PX4代码结构基于NuttX操作系统,其设计目标是支持多种飞控硬件和外设,因此具有较高的复杂性和灵活性[^1]。以下是对PX4代码结构的详细分析: #### 1. 整体结构概述 PX4代码整体结构旨在提供模块化、可扩展的开发环境。它不仅包含飞行控制的核心功能,还支持多种通信协议、传感器驱动以及外部设备接口[^2]。这种设计使得开发者能够轻松地添加新功能或适配不同的硬件平台。 #### 2. 目录结构详解 以PX4源码v1.13.0为例,其目录结构如下所示[^4]: - **boards**: 存储与特定硬件板相关的配置文件。 - **build**: 包含编译生成的中间文件和目标文件。 - **cmake**: 包含CMake构建系统的脚本文件,用于定义不同硬件平台的编译选项。例如,`Cmake/Configs/nuttx_mindpx-v2_default` 是针对Pixhawk硬件的编译脚本[^5]。 - **Documentation**: 提供文档资料,帮助开发者理解代码的功能和使用方法。 - **integrationtests**: 包含集成测试相关代码。 - **launch**: ROS2启动文件,用于与ROS2系统集成。 - **msg**: 定义消息格式,用于模块间通信。这些消息格式通常以`.msg`文件的形式存在[^5]。 - **platforms**: 针对不同平台(如NuttX、POSIX)的实现代码。 - **posix-configs**: POSIX仿真环境的配置文件。 - **ROMFS**: 文件系统映像,包含启动时加载的文件。 - **src**: 核心代码目录,包括驱动程序、控制器、任务调度等功能模块。 - **test**: 单元测试代码。 - **test_data**: 测试数据集。 - **Tools**: 开发工具脚本。 - **validation**: 验证测试代码。 #### 3. 初始化与运行机制 在PX4中,应用的初始化和运行机制主要通过任务调度系统实现。每个功能模块通常以独立的任务形式运行,任务的创建和管理由操作系统负责[^1]。具体来说: - 初始化逻辑通常位于模块的构造函数或`init()`函数中。 - `run()`函数则由任务调度器调用,用于执行模块的核心逻辑。 #### 4. 模块化设计 PX4采用模块化设计,每个模块负责特定的功能,例如姿态解算、控制算法、传感器驱动等[^3]。这种设计方式提高了代码的可维护性和可扩展性。 ```python # 示例:PX4模块化设计 class AttitudeEstimator: def __init__(self): # 初始化逻辑 pass def run(self): # 姿态解算核心逻辑 pass class Controller: def __init__(self): # 初始化逻辑 pass def run(self): # 控制算法核心逻辑 pass ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值