PX4各个模块的作用(3)

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话题发布等信息

相关推荐
清风6666663 小时前
基于单片机的喷漆机器人自动控制系统
单片机·嵌入式硬件·机器人·毕业设计·课程设计·期末大作业
不爱缺氧i4 小时前
ubuntu离线安装mariadb
linux·ubuntu·mariadb
不能跑的代码不是好代码4 小时前
STM32独立看门狗(IWDG)知识点及标准库使用指南
stm32·嵌入式硬件
疯狂敲代码的老刘4 小时前
JDK 1.6到25 全版本网盘合集 (Windows + Mac + Linux)
java·linux·windows·macos·jdk
爆米花byh4 小时前
在RockyLinux9环境的Storm2.8.3单机版安装
linux·中间件·storm
纤纡.4 小时前
Linux 下 MySQL 数据类型与约束:第三章核心表格归纳与实战应用
linux·mysql
陈桴浮海4 小时前
【Linux&Ansible】学习笔记合集三
linux·运维·云原生·ansible
来自晴朗的明天4 小时前
15、隔离 DC-DC 电源电路(18S12 模块)
单片机·嵌入式硬件·硬件工程
9呀4 小时前
【ros2】OccupancyGrid消息里的resolution
人工智能·机器人