PX4源码学习(一):结构概述

    科技2025-08-28  32

    最近在做PX4固件的移植开发工作,由于之前没有这方面开发经验,加之PX4源码又比较庞杂,所以想要通过一点一点的学习梳理和实践,使这部分工作能够尽快开展起来。博客中如有错误,恳请大家指正,同时欢迎小伙伴们一起交流学习。

    另:这篇博客很多内容借鉴了其他大神的博客,根据自己的理解做了部分修改,关于原创还是转载的问题我有些疑问,如有不妥,敬请告知。

    PX4飞控源码系统框架介绍:

    注:本篇内容中所编译的PX4 固件版本为v1.11,以 px4_fmu-v2_default 为例。

    一、boards

    各种不同的飞控板硬件配置文件。

    二、build

    编译后生成的文件,其路径为:Firmware/ bulid / px4_fmu-v2_default

    三、Cmake

    配置文件,其路径为 Firmware / boards / px4 / fmu-v2 / default.cmake。该文件主要是关于系统使用的文件的路径配置。PX4系统中所有的.cpp和.c文件都要在该处进行路径包含。自定义的任务或sensor驱动程序也需要添加到该处。

    四、Cmake

    其中的.cmake文件会调用其他文件夹内的.cmake文件。

    五、Documation

    开发者文档。

    六、integrationtests

    积分集成测试文档。

    七、launch

    仿真环境配置文档。

    八、mavlink

    是飞控和地面站QGC的通信协议部分,可直接调用,现已更新为2.0版本。路径为:Firmware / mavlink

    九、msg

    是uORB Messaging的缩写。路径为:Firmware / msg

    该部分主要是PX4系统使用的所有数据的集合,各种任务和sensor驱动中需要获取的sensor数据都在此部分,还包括各种运行状态的数据。注意该文件夹下的CMakeLists.txt,该文档是整个msg部分的配置文件,类似于二中Cmake中的配置文件,在开发者创建任务或者sensor驱动时创建对应的数据(xxx.msg文件)以后,需要将其添加到CMakeLists.txt中,否则编译时识别不到开发者创建的数据。

    十、platforms

    PX4所使用的操作系统,路径为 Firmware / platforms / nuttx,关于os的基本概念暂不在此详述。

    十一、posix-configs

    可移植操作系统接口。

    十二、ROMFS

    ROM file_system的简写,路径为 Firmware / ROMFS,内部的px4fmu_common文件夹中的init.d文件夹里包含了px4系统初始上电启动的启动脚本,即一系列的启动过程和系统配置。包含rcS、rc.sensors 、rc.mc_default、 rc.mc_apps等文件。

    其中:

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

    rc.sensors:启动sensors启动代码。如果在src / drivers 中自己创建sensor驱动,则应放在该部分启动。

    rc.mc_default:配置和PWM***相关的系统参数,内部含有怠速的配置。

    rc.mc_apps:启动上层应用,如attitude_estimate、attitude_control、position_estimate和position_control等。如在src / modules 中自定义app,则应放在在该部分启动。

    十三、src

    13.1 drivers

    该文件夹内包含了飞控硬件系统中使用的所有sensor的驱动代码。也包含了STM32主控MCU的io输出控制(PX4IO)和pwm的驱动。

    13.2 examples

    PX4系统给的一些简单的实例,为了便于开发者做二次开发调试测试使用。尤其是px4_simple_app,内部涉及了如何通过uORB获取需要的数据。

    13.3 lib

    标准库。

    13.4 modules

    上层任务代码的实现部分,包括姿态解算、姿态控制、配置解算、位置控制、落地检测、sensor初始化、系统配置、uORB、commander等。其中commander是实现整个控制模式的代码,包括pixhawk灯显控制、飞行模式切换、上锁解锁等。

    相关算法实现也在该部分,下面是module里的app介绍:

    attitude_estimator_ekf:

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

    commander: 整个系统的过程实现,如起飞前各sensor的校准算法实现、安全开关是否使能、飞行模式切换、pixhawk硬件上灯的控制等。

    gpio_led:

    land_detector: 飞行过程中使用land模式降落或者落地时的落地监测部分,内部会监测Z轴速度和加速度等。

    local_position_estimator: 常说的LPE算法实现位置解算。

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

    mavlink: 和地面站通信的通信协议,结合地面站QGC源码配合修改,或者仅仅调用mavlink内部的API接口,即可通过无线信号将所需的数据显示在地面站QGC上,此方法是一种实时监测目标数据的方法。

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

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

    sdlog2: 

    sensors: 关于各种sensor的相关函数。

    systemlib: 

    uORB: IPC通信机制。首先需要了解如何使用它进行进程间通信,了解整个系统中的数据流流向。

    十四、test

    十五、test_data

    测试数据。

    十六、tools

    编译所需要的工具。

    十七、validation

    Makefile

    最终的编译命令,用shellscript编写,可根据需要修改。

    CMakeLists.txt

    总的cmake


    参考博客1:https://www.cnblogs.com/kinson/p/12124764.html

    参考博客2:PX4与Ardupilot的入门基础知识(第一章:架构与启动过程)

     

    Processed: 0.027, SQL: 8