查看“︁PX4核心源码src目录分析”︁的源代码
←
PX4核心源码src目录分析
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
= PX4自动驾驶系统核心源码目录:src目录分析 = == 概述 == `src/`目录是PX4飞控系统最核心的源代码目录,包含了从底层硬件驱动到上层飞行控制算法的所有实现。理解该目录的结构是进行PX4二次开发和深度定制的关键。 == 目录结构总览 == <pre> src/ ├── drivers/ # 硬件设备驱动 ├── modules/ # 上层功能模块(核心算法所在) ├── lib/ # 公共库与数学工具 ├── systemcmds/ # 系统命令 ├── examples/ # 示例代码 └── include/ # 头文件 </pre> == 核心子目录详解 == === 1. <code>drivers/</code> (硬件驱动层) === 此目录包含了飞控硬件所使用的所有设备驱动代码,是软件与硬件交互的桥梁。 * '''功能''':提供陀螺仪、加速度计、磁力计、气压计、GPS、光流等传感器的驱动,以及PWM输出、RC输入(遥控器)、PX4IO通信等。 * '''关键子目录/文件''': ** <code>imu/</code>:惯性测量单元驱动。 ** <code>magnetometer/</code>:磁力计驱动。 ** <code>barometer/</code>:气压计驱动。 ** <code>gps/</code>:GPS模块驱动。 ** <code>pwm_out/</code>:PWM信号输出驱动,控制电机和舵机。 ** <code>rc/</code>:遥控器信号接收与解析。 * '''开发者提示''':若要新增或移植传感器硬件,通常需要在此目录下编写或修改驱动代码,并在<code>ROMFS/px4fmu_common/init.d/rc.sensors</code>启动脚本中激活它。 === 2. <code>modules/</code> (功能模块层 - 核心中的核心) === 此目录实现了PX4的所有上层应用功能,采用模块化设计,各模块通过uORB消息机制进行通信。这是飞行控制算法的集中地。 * '''功能''':包含姿态估计、姿态控制、位置估计、位置控制、导航、状态管理等所有高级功能。 * '''关键模块详解''': {| class="wikitable" |- ! 模块名称 !! 功能描述 !! 核心算法/备注 |- | <code>commander</code> || 系统状态机、模式切换、安全检查、解锁/上锁逻辑、LED控制。 || 飞控的“大脑”,负责决策和安全管理。 |- | <code>ekf2</code> || 姿态与位置估计。 || 使用'''扩展卡尔曼滤波 (EKF)'''算法,融合多传感器数据,提供高精度的状态估计。 |- | <code>mc_att_control</code> || 多旋翼姿态控制。 || 通常采用'''内外环PID控制结构'''(外环角度→内环角速率)。 |- | <code>mc_pos_control</code> || 多旋翼位置控制。 || 采用'''内外环PID控制结构'''(外环位置→速度→加速度)。 |- | <code>fw_att_control</code> || 固定翼姿态控制。 || |- | <code>fw_pos_control_l1</code> || 固定翼位置控制。 || 使用L1导航算法。 |- | <code>navigator</code> || 任务执行、航点导航、失效保护(如自动返航RTL)。 || 飞控的“导航员”。 |- | <code>land_detector</code> || 着陆状态检测。 || 通过分析Z轴速度、加速度等数据判断飞行器是否接地。 |- | <code>sensors</code> || 传感器数据预处理、投票、校准和发布。 || 为估计器提供可靠、准确的传感器数据。 |- | <code>logger</code> || 飞行数据记录(ULog格式)。 || 记录uORB消息到SD卡,用于事后分析。 |- | <code>mavlink</code> || MAVLink通信协议模块。 || 与地面站(如QGC)通信,收发数据和控制指令。 |- | <code>uORB</code> || 微对象请求代理,进程间通信(IPC)机制。 || 所有模块间数据交换的枢纽,是PX4系统解耦的关键。 |} * '''开发者提示''':绝大多数算法改进和功能添加都在此目录下的对应模块中进行。例如,修改PID控制器通常在<code>mc_att_control</code>或<code>mc_pos_control</code>中。 === 3. <code>lib/</code> (库文件) === 此目录包含了系统所需的公共算法库和数学工具。 * '''功能''':提供矩阵运算、滤波器、控制器、坐标转换等通用功能,避免代码重复。 * '''关键子目录/文件''': ** <code>matrix/</code>:矩阵运算库。 ** <code>mathlib/</code>:数学函数库(如滤波器、三角函数)。 ** <code>controllib/</code>:控制算法库(如PID控制器实现)。 ** <code>ecl/</code>:导航算法库(被EKF2等模块使用)。 ** <code>rc/</code>:遥控信号处理库。 * '''开发者提示''':开发新模块时,应优先使用这里的公共库,以保证代码一致性和可靠性。 === 4. <code>systemcmds/</code> (系统命令) === 此目录包含了可在NuttX系统Shell中执行的命令的源码。 * '''功能''':提供系统调试、状态查询和参数管理工具。 * '''关键命令''': ** <code>top</code>:查看系统任务运行状态和CPU占用率。 ** <code>param</code>:参数管理(查看、设置、保存)。 ** <code>reboot</code>:重启系统。 ** <code>led</code>:控制LED灯。 * '''开发者提示''':通过这些命令可以快速诊断系统状态,是调试和验证的利器。 === 5. <code>examples/</code> (示例代码) === 此目录包含了PX4官方提供的简单示例程序。 * '''功能''':帮助开发者学习如何创建新的PX4模块,以及如何使用uORB进行进程间通信。 * '''关键示例''': ** <code>px4_simple_app</code>:演示了一个最简单的模块,如何订阅和发布uORB消息。 * '''开发者提示''':这是'''二次开发的入门起点''',强烈建议在创建新模块前先学习此处的代码。 == 数据流核心:uORB机制 == `src/`目录下的所有模块并非孤立工作,它们通过'''uORB(Micro Object Request Broker)'''消息机制进行通信,这是一种发布-订阅模式的进程间通信(IPC)机制。 * '''工作流程''': # 驱动(在<code>drivers/</code>中)读取传感器数据,并'''发布(Publish)'''到某个uORB主题(Topic)(例如<code>sensor_imu</code>)。 # 估计器(如<code>ekf2</code>)'''订阅(Subscribe)'''该主题,获取数据并进行处理。 # 估计器将处理结果(如姿态)'''发布'''到新的主题(例如<code>vehicle_attitude</code>)。 # 控制器(如<code>mc_att_control</code>)'''订阅'''姿态主题,计算输出控制量,并'''发布'''到执行器主题。 # 驱动(如<code>pwm_out</code>)'''订阅'''执行器主题,最终将控制量输出给电机和舵机。 * '''定义位置''':所有uORB消息(Topic)的数据结构都在Firmware根目录下的<code>msg/</code>目录中定义(<code>.msg</code>文件),编译时会自动生成C++头文件。 == 给开发者的建议 == # '''入门''':从<code>src/examples/px4_simple_app</code>开始,理解模块结构和uORB通信。 # '''算法研究''':重点关注<code>src/modules/</code>下的<code>ekf2</code>, <code>mc_att_control</code>, <code>mc_pos_control</code>等模块。 # '''添加新功能''': ## 在<code>msg/</code>目录下定义新的uORB消息(若需要)。 ## 在<code>src/modules/</code>中创建新模块,实现功能逻辑。 ## 在<code>cmake/configs/</code>的板型配置文件中添加新模块的编译路径。 ## 在<code>ROMFS/px4fmu_common/init.d/rc.mc_apps</code>(或其它启动脚本)中启动新模块。 # '''调试''':熟练使用<code>systemcmds</code>中的命令(如<code>param</code>, <code>top</code>)以及通过地面站或日志分析工具进行调试。
返回
PX4核心源码src目录分析
。
导航菜单
个人工具
创建账号
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
无人智胜
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官网
开发文档
工具
链入页面
相关更改
页面信息
导航
特殊页面