查看“︁PX4源码目录分析”︁的源代码
←
PX4源码目录分析
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
== PX4自动驾驶系统目录结构分析 == PX4是一款广泛使用的开源飞控项目,其代码结构复杂但组织清晰。以下是对其目录结构的详细分析,采用MediaWiki代码格式展示,并添加了更多中文备注和解释。 === 目录结构总览 === PX4源代码的顶层目录(以v1.13.0为例)包含以下主要文件夹: <pre> Firmware/ ├─ boards/ # 硬件板级配置和编译脚本 ├─ build/ # 编译生成目录(编译后自动创建) ├─ cmake/ # CMake编译系统配置 ├─ Documentation/ # 项目开发文档 ├─ integrationtests/# 集成测试相关 ├─ launch/ # 启动脚本(主要用于仿真) ├─ msg/ # uORB消息定义文件 ├─ platforms/ # 平台相关代码(如NuttX RTOS) ├─ posix-configs/ # POSIX系统配置 ├─ ROMFS/ # 内存文件系统(包含启动脚本) ├─ src/ # 核心源代码目录 ├─ test/ # 单元测试 ├─ test_data/ # 测试数据 ├─ Tools/ # 开发工具集 └─ validation/ # 验证测试 </pre> === 主要目录详解 === ==== 1. <code>boards/</code> ==== 此目录包含了各种品牌和版本的飞控板(如Pixhawk系列)的编译脚本和配置文件。 例如,<code>px4/fmu-v2/</code>目录下就包含了针对Pixhawk v2.4.8硬件的编译脚本(如<code>default.px4board</code>, <code>fixedwing.px4board</code>)。不同的编译脚本对应不同的编译命令,也会生成不同的固件文件。 <code>extras/</code>子目录则存放了飞控板芯片的BootLoader文件(如<code>px4_fmu-v2_bootloader.bin</code>)。 编译脚本用来设置哪些驱动文件、功能模块要被编译进最终固件中,通过增减里面的路径进行配置。'''(中文备注:这是硬件适配的关键目录,如果你要移植PX4到新的飞控硬件平台,就需要在这里添加对应的板级配置)''' ==== 2. <code>build/</code> ==== 这是'''编译目标目录''',只有在执行至少一次编译后才会生成。它存放编译过程中产生的中间文件、目标文件以及最终的固件。 针对不同硬件目标和编译配置(例如<code>make px4_fmu-v2_default</code>用于实体飞控板,<code>make px4_sitl_default</code>用于软件在环仿真),会生成相应的子目录(如<code>build/px4_fmu-v2_default/</code>, <code>build/px4_sitl_default/</code>)。'''(中文备注:通常不需要手动修改这个目录的内容,编译时会自动生成和更新)''' ==== 3. <code>cmake/</code> ==== 此目录包含CMake编译系统的配置文件。 <code>cmake/configs/</code>下的<code>.cmake</code>文件(如<code>nuttx_px4fmu-v2_default.cmake</code>)定义了针对不同硬件平台的特定编译选项和配置。 该目录下的文件在开发中通常无需修改。'''(中文备注:除非你需要添加新的编译目标或者修改全局编译选项,否则不建议修改这里的文件)''' ==== 4. <code>Documentation/</code> ==== 存放PX4系统的'''开发者文档''',包括代码说明、开发指南等。'''(中文备注:阅读这里的文档可以帮助你更好地理解PX4的设计理念和API用法)''' ==== 5. <code>launch/</code> ==== 包含用于'''仿真环境'''(如Gazebo)的启动文件,用于配置ROS节点、生成仿真世界等。'''(中文备注:如果你主要做仿真研究,这个目录下的文件非常重要,可以配置不同的仿真环境和参数)''' ==== 6. <code>mavlink/</code> ==== 存放与'''MAVLink通信协议'''相关的文件。MAVLink是一种轻量级的消息传输协议,用于PX4飞控与地面站(如QGroundControl)或其他外部设备之间的通信。该目录包含了协议的定义和实现。'''(中文备注:MAVLink是飞控与外部通信的"普通话",定义了大量消息类型用于传输状态、控制指令等)''' ==== 7. <code>msg/</code> ==== 这是'''uORB消息定义目录'''。uORB是PX4内部用于模块间通信的发布-订阅机制。 所有uORB消息主题(Topic)的数据结构都在此目录下的<code>.msg</code>文件中定义(例如<code>sensor_combined.msg</code>)。 在编译过程中,这些文件会被自动转换为相应的C++头文件(<code>.h</code>)和源文件(<code>.cpp</code>)。'''(中文备注:如果你要添加新的模块间通信消息,就需要在这里定义新的.msg文件。uORB是PX4内部通信的"神经脉络")''' ==== 8. <code>platforms/</code> ==== 包含与'''系统平台相关'''的底层代码,特别是PX4所采用的'''NuttX实时操作系统'''的源代码和适配层。该目录实现了工作队列、多进程、多线程调度等系统特性。'''(中文备注:这是PX4系统底层的核心,包含了任务调度、内存管理、设备驱动框架等RTOS核心功能)''' ==== 9. <code>ROMFS/</code> ==== '''ROM文件系统'''目录。该目录存放了飞控系统启动时加载的脚本和配置文件,对系统初始化至关重要。 <code>ROMFS/px4fmu_common/init.d/</code>包含了初始化脚本: ** <code>rcS</code>: 这是'''最先执行的主启动脚本''',负责挂载SD卡、启动uORB、配置系统参数等基础任务。 ** <code>rc.sensors</code>: 负责启动各种传感器驱动。 ** <code>rc.mc_apps</code>: 负责启动上层应用模块,如状态估计器(<code>attitude_estimator</code>)、控制器(<code>attitude_control</code>, <code>position_control</code>)等。 ** <code>rc.logging</code>: 配置并启动日志记录功能。 该目录还可能包含不同机型(如多旋翼、固定翼)的混控器(Mixer)配置文件。'''(中文备注:这是系统启动过程的"总指挥",控制了所有模块的启动顺序和初始化参数。如果你要添加开机自启动模块,需要修改这里的脚本)''' ==== 10. <code>src/</code> ==== 这是PX4项目最核心的'''源代码目录''',包含了无人机飞行控制的大部分算法实现。'''(中文备注:这是开发者最常接触的目录,包含了从底层驱动到上层控制算法的所有核心代码)''' ====== 10.1. <code>drivers/</code> ====== 包含了飞控硬件所使用的'''所有设备驱动代码''',例如陀螺仪、加速度计、磁力计、气压计、GPS模块、PWM输出等。这些驱动提供了与硬件交互的底层接口。'''(中文备注:这是硬件控制的"驱动程序库",每种传感器和执行器都有对应的驱动实现。如果你要支持新的硬件设备,通常需要在这里添加驱动代码)''' ====== 10.2. <code>examples/</code> ====== PX4官方提供的一些'''简单示例程序''',例如<code>px4_simple_app</code>,用于帮助开发者学习如何通过uORB进行数据交互和创建新的模块,是二次开发的入门参考。'''(中文备注:新手入门的最佳起点,通过这些示例可以快速学习PX4模块的开发方法和uORB通信机制)''' ====== 10.3. <code>include/</code> ====== 包含其他源代码文件可能需要的'''头文件'''和库定义。'''(中文备注:集中了全局头文件和API定义,方便不同模块间的引用和协作)''' ====== 10.4. <code>lib/</code> ====== 包含许多'''公共算法函数库和数学工具''',例如: <code>matrix</code>: 矩阵运算 <code>mathlib</code>: 数学函数库 <code>controllib</code>: 控制算法相关(如PID) <code>EKF</code>: 扩展卡尔曼滤波实现 <code>rc</code>: 遥控器协议解析 <code>conversion</code>: 坐标旋转转换等 '''(中文备注:这是PX4的"数学与算法工具箱",提供了控制系统所需的各种数学运算和滤波算法)''' ====== 10.5. <code>modules/</code> ====== 这是'''上层应用模块'''的主要目录,也是飞行控制算法实现的核心所在。PX4的功能由许多独立的模块(类似于ROS中的节点)构成,每个模块通过订阅和发布uORB消息进行通信。关键模块包括: <code>commander</code>: 系统状态管理和模式切换(如解锁、上锁、飞行模式切换)、安全检查。'''(中文备注:飞行控制的"指挥官",负责决策和状态管理)''' <code>attitude_estimator_q</code> 或 <code>ekf2</code>: 姿态估计器(分别使用互补滤波和扩展卡尔曼滤波算法)。'''(中文备注:飞行器的"内耳",负责估计当前姿态和方位)''' <code>mc_att_control</code>: 多旋翼姿态控制(通常采用内外环PID结构,外环控制角度,内环控制角速率)。'''(中文备注:多旋翼的"平衡大师",负责保持飞行器稳定)''' <code>mc_pos_control</code>: 多旋翼位置控制(同样采用内外环PID结构,外环控制速度,内环控制加速度)。'''(中文备注:多旋翼的"导航员",负责精确位置控制)''' <code>fw_att_control</code> / <code>fw_pos_control_l1</code>: 固定翼姿态和位置控制。'''(中文备注:固定翼飞行器的控制专家)''' <code>local_position_estimator</code> (LPE): 基于光学flow、GPS等信息的位置估算。'''(中文备注:本地位置估计,提供高精度的局部定位信息)''' <code>navigator</code>: 任务执行、失效保护和返航(RTL)导航。'''(中文备注:飞行任务的"导航系统",负责路径规划和任务执行)''' <code>land_detector</code>: 着陆状态检测。'''(中文备注:降落状态的"监测员",判断飞行器是否已着陆)''' <code>logger</code>: 飞行日志记录。'''(中文备注:飞行数据的"记录员",负责记录所有重要数据供后续分析)''' <code>sensors</code>: 传感器数据处理模块。'''(中文备注:传感器数据的"预处理中心",负责原始数据的校准和融合)''' '''(中文备注:这是飞行控制算法的"大脑",包含了从状态估计到控制决策的所有核心算法模块。大多数算法改进和功能添加都在这里进行)''' ====== 10.6. <code>systemcmds/</code> ====== 包含一系列'''系统命令'''的源码,这些命令可以在PX4的NuttX Shell中使用,例如<code>reboot</code>(重启)、<code>top</code>(查看任务状态)、<code>param</code>(参数管理)等。'''(中文备注:这些是飞控系统的"管理命令",可以通过串口工具调用进行系统调试和状态查询)''' === 核心架构总结 === PX4固件从架构上可以分为三大层次: '''实时操作系统层''': 主要由<code>platforms/</code>目录下的NuttX RTOS及相关底层代码构成,提供多任务、调度等核心系统服务。'''(中文备注:提供基础的系统服务,如任务调度、内存管理和设备驱动框架)''' '''中间件层''': 包括<code>src/drivers/</code>中的设备驱动和<code>msg/</code>定义的uORB消息机制,为上层应用提供硬件抽象和高效的进程间通信。'''(中文备注:承上启下的关键层,提供硬件抽象和模块间通信能力)''' '''飞行控制栈层''': 主要集中在<code>src/modules/</code>目录,实现了姿态估计、姿态控制、位置估计、位置控制、导航、命令处理等所有飞行相关的高级算法和应用。'''(中文备注:实现具体飞行控制功能的应用层,包含所有核心算法)''' === 如何获取代码 === PX4项目包含许多子模块(Git Submodules),推荐使用以下命令克隆代码以确保完整获取: <pre> git clone --recursive https://github.com/PX4/PX4-Autopilot.git </pre> 或者分步执行: <pre> git clone https://github.com/PX4/PX4-Autopilot cd PX4-Autopilot git submodule update --init --recursive </pre> '''(中文备注:由于PX4依赖较多子模块,一定要使用<code>--recursive</code>参数或者手动更新子模块,否则会缺少重要组件)''' === 编译示例 === 针对不同的硬件目标和仿真环境,编译命令也不同: <pre> 编译用于 Pixhawk FMU-v3 的固件 make px4_fmu-v3_default 编译用于 Gazebo 软件在环仿真 (SITL) 的固件 make px4_sitl_default gazebo </pre> '''(中文备注:编译前需要安装相关工具链,仿真编译通常需要更复杂的依赖环境,建议参考官方文档配置)''' === 开发建议 === '''新手入门''': 建议从<code>src/examples/</code>中的示例代码开始,了解uORB通信机制和模块开发模式。 '''算法研究''': 重点关注<code>src/modules/</code>目录下的各种估计器和控制器。 '''硬件适配''': 如果需要支持新硬件,需要修改<code>boards/</code>目录中的配置和<code>src/drivers/</code>中的驱动代码。 '''参数调整''': 大多数算法参数可以通过QGC地面站调整,无需修改代码重新编译。 '''调试技巧''': 使用<code>systemcmds/</code>中的调试命令和uORB消息监听工具进行系统调试。
返回
PX4源码目录分析
。
导航菜单
个人工具
创建账号
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
无人智胜
PX4 介绍
PX4与ArduPilot对比
PX4与Pixhawk关系
PX4与NuttX关系
PX4 官方镜像
发布日志
QGC地面站下载
新手上路
首次飞行
机架选择
传感器校准
遥控器连接
遥控器校准
电机电调测试
飞行模式
六段开关飞行模式
参数列表
任务规划
安全飞行
飞控硬件
Pixhawk飞控
电机与电调
传感器指南
GPS与罗盘
数传与遥控
PX4二次开发
PX4源码目录
PX4核心源码
PX4机型目录
4001_quad_x
编译PX4
模块开发
驱动程序
仿真教程
调试技巧
传感器与估计
EKF2状态估计
IMU校准
视觉定位
光流定位
日志分析
机架与平台
飞行器气动布局
多旋翼无人机
固定翼无人机
VTOL无人机
无人地面车辆
无人船
外围设备
相机与云台
任务载荷
避障与导航
RTK-GPS
编程与开发
Linux
ESP32
STM32
ArduPilot
修改侧边栏
社区讨论
贡献文档
PX4官网
开发文档
工具
链入页面
相关更改
页面信息
导航
特殊页面