PX4源代码的结构复杂,这是源代码的总目录结构(以v1.13.0为例):

Firmware
├─boards
├─build
├─cmake
├─Documentation
├─integrationtests
├─launch
├─msg
├─platforms
├─posix-configs
├─ROMFS
├─src
├─test
├─test_data
├─Tools
└─validation

在这里插入图片描述

boards文件夹

boards文件夹中是各个品牌、版本的飞控板的编译脚本,其中px4文件夹装的是pixhawk的原生固件的编译脚本。

在这里插入图片描述

进入px4文件夹,内部是pixhawk的不同版本,我使用的是pixhawk v2.4.8版本对应fmu-v2文件夹。

在这里插入图片描述

进入fmu-v2文件夹,这里的所有px4board文件就是编译脚本,不同的编译脚本对应不同的编译命令,也会生成不同的编译文件。

比如default.px4board对应make px4_fmu-v2_default命令,fixedwing.px4board对应make px4_fmu-v2_fixedwing命令,multicopter.px4board对应make px4_fmu-v2_multicopter命令,rover.px4board对应make px4_fmu-v2_rover命令。

extras文件夹中是飞控板两个芯片的BootLoader文件,分别是px4_fmu-v2_bootloader.bin和px4_io-v2_default.bin二进制文件。

在这里插入图片描述

编译脚本用来设置哪些驱动文件、功能模块要被编译进固件中,通过增减里面的路径进行配置。

build文件夹

build文件夹是编译目标目录,只有经过至少一次编译才会生成此文件夹,内部存放的是源码经过编译生成的编译选项、中间文件、目标文件等。编译不同版本的固件会生成不同的文件夹。

在这里插入图片描述

比如px4_fmu-v2_default就是make px4_fmu-v2_default命令编译生成的,用于飞控板的。

px4_sitl_default就是make px4_sitl_default命令编译生成的,用于jMAVSim仿真或gazebo仿真。

cmake文件夹

cmake文件夹是cmake编译工具的相关文件,在开发中这个文件夹中的文件不需要修改。

在这里插入图片描述

Documentation文件夹

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

launch文件夹

launch文件夹是仿真环境用到的文件,在gazebo中生成世界,配置ros节点等。

在这里插入图片描述

msg文件夹

msg文件夹是存放uORB消息主题的地方,实现PX4各进程之间通信就是用这些message。我们可以在这个文件夹内定义自己的message。

在这里插入图片描述

ROMFS文件夹

ROM file system的缩写,是文件系统文件夹,里面存放的飞控系统的启动脚本,负责系统初始化。

内部的 px4fmu_common 文件夹中的 init.d 是关于 px4 系统初始上电启动的启动脚本,即一系列的启动过程和系统配置。其中较为重要的部分在如下目录下:Firmware\ROMFS\px4fmu_common\init.d

如文件rcS、rc.logging、rc.mc_apps、rc.sensors等

rcS:最先启动的脚本,负责挂载SD卡、启动uORB、配置系统参数等。

rc.logging:日志配置和启动代码。

rc.sensors:sensors驱动启动代码。

rc.mc_apps:启动上层应用(src/modules中的模块均在此启动),如 attitude_estimate 、 attitude_control 、position_estimate 和 position_control 等。

在这里插入图片描述

platforms文件夹

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

在这里插入图片描述

src文件夹

src是源代码目录,是PX4的核心,非常重要。

在这里插入图片描述

drivers文件夹

pixhawk 硬件系统中使用的所有传感器的驱动代码,包括陀螺仪、加速度计、磁力计、气压计、GPS、光流等,也包括pwm输出、px4io控制、不同遥控器通信协议等功能的驱动。

在这里插入图片描述

examples文件夹

examples文件夹是官方给出的简单例程,帮助新手开发者入门进行二次开发。

在这里插入图片描述

include文件夹

include文件夹是其他代码需要用到的头文件和库。

在这里插入图片描述

lib文件夹

标准库,有矩阵运算、PID控制、传感器校准等。

在这里插入图片描述

modules文件夹

modules文件夹是功能模块文件夹,也是二次开发主要的文件夹,包括姿态解算,姿态控制,位置估计,位置控制,指令控制,落地检测,传感器初始化等。

attitude_estimator_q:使用 mahony 互补滤波算法实现姿态结算。

commander:整个系统的过程实现,包括起飞前各传感器的校准、安全开关是否使能、飞行模式切换、pixhawk硬件上指示灯颜色定义等。

ekf2:使用扩展卡尔曼滤波器算法实现姿态和位置结算。

fw_att_control:固定翼飞机的姿态控制。

fw_pos_control_l1:固定翼飞机的位置控制器。

land_detector:使用land飞行模式降落的落地监测部分。

local_position_estimator:LPE 算法实现位置解算。

logger:关于 log 日志的读写函数。

mavlink:和地面站通信的通信协议。

mc_att_control:姿态控制的算法实现,主要就是姿态的内外环 PID 控制,外环角度控制、内环角速度控制。

mc_pos_control:位置控制的算法实现,主要就是位置的内外环 PID 控制,外环速度控制、内环加速度控制。

navigator:任务,失效保护和RTL导航仪。

sensors:关于各种传感器的相关函数。

vtol_att_control:垂直起降姿态控制器。

在这里插入图片描述

systemcmds文件夹

systemcmds文件夹是系统指令文件夹,都是飞控终端支持的命令的源码,如top命令,reboot命令等。

在这里插入图片描述

templates文件夹

templates文件夹中是存放功能模块的代码模板,可以用于参考。

在这里插入图片描述

Tools文件夹

Tools文件夹下是一些工具,比如下载工具、仿真环境等。

在这里插入图片描述


参考资料:

PX4原生固件源码分析(挖坑)–1、代码结构_梦里见莯的博客-CSDN博客_px4源码分析

PX4 飞控源码系统框架介绍 - 徐景祥 - 博客园 (cnblogs.com)

Px4源码框架结构图_csshuke的博客-CSDN博客

PX4代码阅读笔记(一)——代码结构_星光2020的博客-CSDN博客_px4代码结构

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐