PX4代码解析(1)

前言

做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳理一下无人机知识。
目前打算分享以下几个内容:代码架构;通信协议;姿态解算算法,控制算法。先这样,后面想到再加。本章先来聊聊px4代码结构

一、代码整体结构

既然要聊px4代码结构,那就先把px4代码结构图放出来,因为px4源码仍然在不断更新迭代,因此老版本与新版本目录结构可能有些不同,我的代码解析参考版本为V1.11。
PX4代码解析(1)_第1张图片刚开始接触PX4源码时,一看这么多目录,当时心态就崩了。但不要紧张,其中有大部分文件夹对我们初学者来说是用不到的,最主要的文件如下表

目录 作用
src 功能源代码,包含所有控制相关的功能代码
build 编译目标目录,包含程序源代码编译后生成的编译选项,目标文件,中间文件等
cmake 编译配置文件,存放PX4项目编译相关的配置
platforms 存放飞控程序运行平台代码
msg 内部通信接口,用来存放内部通信的消息文件
Mavlink 外部通信接口,存放mavlink协议所用头文件
ROMFS ROM文件系统,飞控程序启动相关配置以及不同机型的混合控制文件
Tools 存放仿真及与其他软件使用的工具脚本

以上便是PX4源码常用目录的作用,下面我先介绍最重要的文件夹src,文件夹会后续在详细讲解。

二、src文件夹解析

src文件夹可谓是PX4项目的精华,其中包含了无人机算法的所有实现,src文件夹中的内容分为以下6个部分
PX4代码解析(1)_第2张图片(1).drivers文件夹
包含飞控程序中所有的驱动程序,其文件夹内容如下:
PX4代码解析(1)_第3张图片
模块功能从模块命名很容易看出,例如px4io是负责FMU与IO通信;gps就是gps定位模块;这些模块根据命名就可以知道其作用,这里不在过多描述
(2).include文件夹
该文件夹主要包括飞控程序所包含的头文件
(3).lib文件夹
包含很多公共算法函数与数学工具函数,部分模块具体功能如下表

模块名称 功能
airspeed 空速计算
mathlib 数学函数库
matrix 矩阵计算
battery 电源功能
controllib 控制算法
conversion 旋转转换
EKF 扩展卡尔曼滤波
rc 遥控器协议解析

(4).modules文件夹
包括无人机相关上层应用的控制模块,如导航,规划,地面站通信,命令执行等内容

(5).platforms文件夹
定义与运行平台相关头文件,实现工作队列,多进程,多线程等相关系统特性

(6).systemcmd文件夹
文件夹实现了多个系统命令,飞控采用系统为nuttx,后续会详细介绍

(7).examples文件夹
PX4官方提供的一些学习的例子

你可能感兴趣的:(PX4,四旋翼,c++)