1.代码框架:
文件目录:

根目录
.github/ - GitHub相关配置,包括Issue模板、工作流CI/CD配置
.devcontainer/ - VS Code开发容器配置
ROMFS/ - 运行时文件系统,包含启动脚本和飞行器配置
boards/ - 硬件板级支持包,每个厂商的飞控板配置
src/ - 核心源代码目录
platforms/ - 平台抽象层,支持Nuttx、Linux等
msg/ - uORB消息定义文件
Tools/ - 开发工具和脚本
CMakeLists.txt - 主构建配置文件
Makefile - 构建系统入口
核心源码:src
核心源代码 (src/)
src/drivers/ - 硬件驱动程序
actuators/ - 执行器驱动(电机、舵机)
adc/ - ADC模数转换器驱动
barometer/ - 气压计驱动(BMP280、MS5611等)
imu/ - 惯性测量单元驱动
gps/ - GPS接收器驱动
magnetometer/ - 磁力计驱动
optical_flow/ - 光流传感器驱动
distance_sensor/ - 测距传感器驱动
uavcan/ - UAVCAN协议支持
src/modules/ - 核心功能模块
commander/ - 飞行状态管理和安全系统
navigator/ - 导航和任务管理
ekf2/ - 扩展卡尔曼滤波器
mc_att_control/ - 多旋翼姿态控制
mc_pos_control/ - 多旋翼位置控制
fw_att_control/ - 固定翼姿态控制
fw_pos_control/ - 固定翼位置控制
vtol_att_control/ - 垂直起降飞行器控制
land_detector/ - 着陆检测器
battery_status/ - 电池状态监控
sensors/ - 传感器数据处理
mavlink/ - MAVLink协议实现
src/lib/ - 通用库函数
mathlib/ - 数学运算库
matrix/ - 矩阵运算库
PID/ - PID控制器库
terrain_estimation/ - 地形估计
weather_vane/ - 风向标算法
src/systemcmds/ - 系统命令工具
param/ - 参数管理
topic_listener/ - 话题监听
ver/ - 版本信息
motor_test/ - 电机测试
平台:platforms
platforms/nuttx/ - NuttX实时操作系统
NuttX内核配置和移植层
硬件抽象层实现
platforms/common/ - 通用平台代码
uORB发布订阅系统
工作队列管理
通用硬件接口
通信和消息:msg
- uORB消息定义 - 系统内部通信的消息格式
- 包含传感器数据、控制指令、状态信息等150+消息类型
- 版本化消息支持向后兼容
开发工具:tools
开发工具 (Tools/)
Tools/simulation/ - 仿真工具
Gazebo - 3D物理仿真
FlightGear - 飞行仿真
jMAVSim - 轻量级四旋翼仿真
Tools/astyle/ - 代码格式化
代码风格检查和自动格式化工具
Tools/ecl_ekf/ - EKF分析工具
日志分析和滤波器性能评估
Tools/px4airframes/ - 飞行器配置工具
自动生成飞行器配置文件
ROMFS文件系统
ROMFS/px4fmu_common/ - 通用配置文件
init.d/ - 启动脚本和初始化配置
init.d/airframes/ - 400+种飞行器配置文件
init.d-posix/ - POSIX系统仿真配置
硬件支持:boards
3dr/ - 3D Robotics硬件
ark/ - ARK Electronics硬件
holybro/ - Holybro硬件
modalai/ - ModalAI硬件
px4/ - 官方PX4硬件
每个板子包含:
启动配置 (init/)
NuttX配置 (nuttx-config/)
板级初始化代码 (src/)
以上大概就是整个代码文件的一个大概框架
以下是稍微详细一点的框架
2.boards--硬件支持

px4支持上述全部开发版型,为什么会有那么多版型呢,我的理解是,一个单片机,的各种io口,对的上,开发版型,就可以烧录对应的配置代码,配置一个开发板,修改配置也很方便
举例fmu-v5,这个是px4官方硬件配置

这个就是整个开发板的配置,全在这里。
点开src可以看见,一些简单的驱动文件

存放烧录的代码:我觉得这个是qgc上不是会自动烧录代码吗,那个对应的bin文件就是在这

最重要的是:default.px4board,这里就是配置文件,全部配置文件全在这了




具体配置文件:这个配置文件,关系其实很明显:config是必备的,driver就是对应driver里面具体的某些文件驱动,给y就是表示,会编译进去,给n就是表示不编译进去开发板,后面我们需要添加的新代码的话,也是可以从这添加进去之后,就实现了把自己写的代码编译进去开发版
CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" # ARM交叉编译工具链
CONFIG_BOARD_ARCHITECTURE="cortex-m7" # 目标CPU架构:Cortex-M7
CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS0" # GPS串口1
CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS1" # 遥测串口1
CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS2" # 遥测串口2
CONFIG_BOARD_SERIAL_TEL4="/dev/ttyS3" # 遥测串口4
CONFIG_DRIVERS_ADC_ADS1115=y # ADS1115 ADC芯片驱动
CONFIG_DRIVERS_ADC_BOARD_ADC=y # 板载ADC驱动
CONFIG_COMMON_BAROMETERS=y # 通用气压计支持
CONFIG_COMMON_DIFFERENTIAL_PRESSURE=y # 通用差压传感器
CONFIG_COMMON_DISTANCE_SENSOR=y # 通用测距传感器
CONFIG_COMMON_HYGROMETERS=y # 通用湿度传感器
CONFIG_COMMON_LIGHT=y # 通用光照传感器
CONFIG_COMMON_MAGNETOMETER=y # 通用磁力计
CONFIG_DRIVERS_IMU_ANALOG_DEVICES_ADIS16448=y # ADIS16448 IMU
CONFIG_DRIVERS_IMU_BOSCH_BMI055=y # BMI055 IMU
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20602=y # ICM20602 IMU
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20689=y # ICM20689 IMU
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20948=y # ICM20948 IMU
CONFIG_DRIVERS_IMU_INVENSENSE_ICM42688P=y # ICM42688P IMU
CONFIG_DRIVERS_GPS=y # GPS接收器
CONFIG_DRIVERS_HEATER=y # 加热器控制
CONFIG_DRIVERS_IRLOCK=y # IRLOCK红外锁定
CONFIG_DRIVERS_PCA9685_PWM_OUT=y # PCA9685 PWM输出
CONFIG_DRIVERS_POWER_MONITOR_INA226=y # INA226电源监控
CONFIG_DRIVERS_PWM_INPUT=y # PWM输入捕获
CONFIG_DRIVERS_PWM_OUT=y # PWM输出
CONFIG_DRIVERS_PX4IO=y # PX4IO协处理器
CONFIG_DRIVERS_RC_INPUT=y # 遥控输入
CONFIG_DRIVERS_SAFETY_BUTTON=y # 安全按钮
CONFIG_DRIVERS_TONE_ALARM=y # 蜂鸣器报警
CONFIG_DRIVERS_UAVCAN=y # UAVCAN协议
CONFIG_BOARD_UAVCAN_TIMER_OVERRIDE=6 # UAVCAN定时器6
CONFIG_MODULES_ATTITUDE_ESTIMATOR_Q=y # 姿态估计器Q
CONFIG_MODULES_EKF2=y # 扩展卡尔曼滤波器2
CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=y # 着陆目标估计
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y # 磁力计偏差估计
CONFIG_MODULES_FW_ATT_CONTROL=y # 固定翼姿态控制
CONFIG_MODULES_FW_RATE_CONTROL=y # 固定翼角速度控制
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y # 固定翼横向纵向控制
CONFIG_MODULES_MC_ATT_CONTROL=y # 多旋翼姿态控制
CONFIG_MODULES_MC_POS_CONTROL=y # 多旋翼位置控制
CONFIG_MODULES_MC_RATE_CONTROL=y # 多旋翼角速度控制
CONFIG_MODULES_VTOL_ATT_CONTROL=y # VTOL姿态控制
CONFIG_MODULES_COMMANDER=y # 飞行指挥官
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y # 飞行模式管理
CONFIG_MODULES_FW_MODE_MANAGER=y # 固定翼模式管理
CONFIG_MODULES_NAVIGATOR=y # 导航模块
CONFIG_MODULES_LAND_DETECTOR=y # 着陆检测器
CONFIG_MODULES_LOGGER=y # 飞行日志记录
CONFIG_MODULES_MAVLINK=y # MAVLink协议
CONFIG_MODULES_UXRCE_DDS_CLIENT=y # XRCE-DDS客户端
CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y # 仿真支持
CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y # 执行器测试
CONFIG_SYSTEMCMDS_PARAM=y # 参数管理
CONFIG_SYSTEMCMDS_TOPIC_LISTENER=y # 话题监听
CONFIG_SYSTEMCMDS_MOTOR_TEST=y # 电机测试
CONFIG_SYSTEMCMDS_REBOOT=y # 重启命令
CONFIG_SYSTEMCMDS_TOP=y # 系统监控
CONFIG_SYSTEMCMDS_VER=y # 版本信息
3.msg--消息和通信接口
存放全部的数据格式,定义新数据的变量可以存放在这

4.ROMFS:文件系统,非常重要
ROMFS/px4fmu_common/ - 通用配置文件
init.d/- 启动脚本和初始化配置init.d/airframes/- 400+种飞行器配置文件init.d-posix/- POSIX系统仿真配置
这是一个很重要的文件,存放了机架的参数

这个存放的rc文件,可以使用来启动你写的模块,

随便打开一个看看,这些就是启动对应模块的存放,你选择机架之后,就打开对应的参数,就可以启动对应的逻辑,所以后面我们新加机架的的时候也会是这样来选择的哟

像这种就是机架文件和参数存放区域,我们新机架就可以存放在这里
至于机架参数文件,我们可以看看,px4手册来写新机架参数,当然也可以直接在相似机型的基础上修改也是可以的
5.tools---工具文件
存放很多工具的文件

这个setup下面的文件夹,很重要

存放这一件配置环境的代码,我们可以使用这些文件快速在电脑上部署环境
6.src--源代码--最重要的文件
这里存放的是各种机架的逻辑代码,以及数据的来源或者驱动

重点是modules和systemcmds,一个是模块,和系统文件,
modules文件

里面存放各种机架的逻辑代码
systemcmds文件下面存放的主要是系统的操作指令的代码文件,

像什么电机测试等等的,还有urob话题发布等信息