赞
踩
最近开始学习PX4源码,并进行二次开发,苦于网上缺少有关PX4源码的分析,于是在这开个坑,记录自己学习PX4的过程,以此自勉,笔者第一次写博客,若有不足之处,还请多包涵。
硬件:雷迅V5+飞控
源码版本:v1.11(PX4固件源码在20年有一次很大的改动)
编译固件命令:make px4_fmu-v5(默认编译的是default固件)
参考链接:PX4 飞控源码系统框架介绍 - 徐景祥 - 博客园 (cnblogs.com)
PX4源码文件如下图:(笔者会根据个人理解说明,出错之处敬请指出)
boards文件夹中是各版本固件的编译脚本,比如笔者用的v5固件,路径为Firmware\boards\px4\fmu-v5
其中default.cmake文件就是总的编译脚本,之后若是添加新的模块,也要在这个文件中写入模块名称。
执行make px4_fmu-v5命令编译后生成的文件,见保存在build文件夹下,如下图所示:
px4_fmu-v5_default是编译v5固件生成的。
px4_sitl_default是只是make px4_sitl_default进行gazebo仿真编译生成的。
包含了mavlink协议所用的文件,包括基本的msg内容,以及通过mavlink代码生成工具生成的h文件。mavlink分为1.0和2.0两个版本,现PX4用的就是2.0版本的mavlink协议,主要是负责和QGC地面站进行通信。
包含了uORB所用的所用msg的内容,在PX4各进程之间传递的就是这些msg。同时我们也可以参照其格式定义自己的msg,这会在后面给出具体方法。
ROM file_system 的简写,内部的 px4fmu_common 文件夹中的 init.d 是关于 px4 系统初始上电启动的启动脚本,即一系列的启动过程和系统配置。其中较为重要的部分在如下目录下:Firmware\ROMFS\px4fmu_common\init.d
如文件rcS、rc.logging、rc.mc_apps、rc.sensors等
rcS:最先启动的脚本,负责挂载SD卡、启动uORB、配置系统参数等。
rc.logging:日志配置和启动代码。
rc.sensors:sensors驱动启动代码。
rc.mc_apps:启动上层应用(src/modules中的模块均在此启动),如 attitude_estimate 、 attitude_control 、position_estimate 和 position_control 等。
这是较为重要的一个文件夹:
drivers:pixhawk 硬件系统中使用的所有的 sensor 的驱动代码。也包含了 STM32 主控MCU 的 io 输出控制(PX4IO)和 pwm 的驱动。
examples:官方给出的简单例程,引导开发者进行二次开发。
lib:标准库,有矩阵运算、PID等
modules:各上层应用,有 attitude_estimate 、 attitude_control 、position_estimate 和 position_control等,之后自定义的应用也应也在这个文件夹中。具体介绍如下:
attitude_estimator_q:基于mahony 的互补滤波算法的姿态解算
ekf2:基于扩展卡尔曼滤波的姿态和位置解算
local_position_estimator:LPE算法实现位置解算
logger:读写log日志文件
mc_att_control:姿态控制
mc_pos_control:位置控制
uORB:进程间的通信机制
sensors:各sensors的初始化代码
关于px4整体代码结构就写到这里,若是以后有新的理解会及时补充。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。