px4源码学习三--px4源码结构分析

时间:2024-04-04 07:52:10

px4源码结构分析

Px4源码目录

px4源码学习三--px4源码结构分析
px4源码学习三--px4源码结构分析

cmake:

是存放的 Cmake 编辑脚本文件夹, 其中 Cmake/Configs 是存放的不同硬件的编译脚本, nuttx_mindpx-v2_default 是 PIXHAWK 这个硬件的编辑脚本, 如果要添加驱动, 添加系统功能的模块函数, 要修改里面的编译选项, 保证添加的模块文件, 能够被编译到。

msg

这个目录存放在有关urob主题相关的数据,文件名对应着主体名称。需要扩展uORB主题时候,需要在这个目录下添加对应文件,加入数据,就会自动生成主题名称的数据结构。

nuttx-configs

(猜测)应该是运行nuttx系统时对应的硬件宏的定义,以及编译啊什么的配置

ROMFS

是文件系统文件夹。 里面存放的飞控系统的启动脚本, 我们要修改启动脚本主要在这个文件夹里面。 src/Romfs/px4fmu_common/init.d ,如 rcS 主要的启动脚本, 还有其他的rc.XXX 的脚本, 传感器脚本, 参数脚本等等, 以 rc 为开头的都是飞控的启动脚本的文件,通过这些文件决定哪些应用程序应该执行, 哪些不执行。

src

源码目录,所有的源码都在这呢

drivers

所有的传感器驱动都在这里面, 气压计, GPS, 加速度, 地磁, 光流等等。 添加支持硬件在这里添加代码

examples

这是demo一样的文件,里面有helloworld性质的px4示例程序。

这里可以是开发者最开始学习熟悉代码风格的地方。

firmware

不知道干嘛的

include

没什么用,里面只有一个定义可见性的宏文件

lib

比较重要的库文件

modules

各个模块的源码,模块化控制,各模块独立。开发主要在这里做。

platforms

不清楚

systemcmds

系统支持的命令,nsh(nuttx shell)里用的

makefiles

这个文件夹中的文件负责构建构建PX4系统并且配置PX4板子和软件。

Images

有关版本的简绍文件(?)

Documentation

大多都流程图,转换图的,配合代码看,效果更好。

PX4启动

​ 飞控上点后自动执行Firmware/ROMFS/px4fmu_common/init.d/rcS脚本(startup script)

PX4软件架构理解

官方文档中的PX4软件架构:

px4源码学习三--px4源码结构分析
可以看出来,很明显的层次结构。

最底层是操作系统内核层次,主要是基础的东西,文件系统,操作系统,传感器驱动。还是有就是uORB模块,作为PX4系统中最重要的数据交互模块,实现方式与较多内核底层有关,(其中设备节点继承Cdev类,算是一个字符类型的驱动设备文件)

在这之上是库函数一层,封装了一些比较通用的算法模块。

再之上就是抽象的应用层,这一层主要是导航模块,系统命令模块,各种机型的控制模块,Mavlink通信协议模块。算是比较抽象的,这一层中代码逻辑基本就是这个对象调用另外一个模块的函数,看不到具体实现。因为都交给lib层去实现了。

再往上,不知道这个是干嘛的。

以下是我理解的PX4软件模块的运行关系:

px4源码学习三--px4源码结构分析

各种硬件将数据读入uORB中,

上层模块从uORB中读取需要的数据,根据情况,传入对应的参数,调用不同的库,获得期望输出,输出到uORB中

最后由输出混合器对控制模块的输出进行混合,再输出到电机舵机