px4固件源码分析(文件夹作用以及总体架构)

px4固件源码分析[文件夹作用以及总体架构]

总体概述

px4是一个操作系统,其中运行着很多程序(类比windows),比如我们十分感兴趣与关心的姿态解算、位置解算、姿态控制、位置控制等。每一个程序之间通过UORB通信。

总体构架

PX4固件可以分为三大部分:实时操作系统、中间件和飞行控制栈

  1. Nuttx实时操作系统
  2. PX4中间件:设备驱动与微对象请求代理(micro object request broker,uORB)
  3. PX4飞行控制栈:此部分可以细分为
    • 决策导航部分
    • 位置姿态估计部分
    • 位置姿态控制部分
    • 控制器输出部分

代码分块

首先是px4源码的文件夹结构:
PX4固件文件夹结构
boards文件夹:各种飞控硬件平台的配置文件。
build文件夹:这部分是编译后的结果,比如说我在终端
执行make posix_sitl_default gazebo后,就会出现相应的二进制文件用于后续的执行,同样的执行make px4fmu-v2_default后在运行make px4fmu-v2_default命令后,首先进入Firmware/Makefile文件,提取源码路径、px4fmu-v2_default参数,与cmake/configs中的文件名做比较,符合时则创建build_px4fmu-v2_default文件夹,执行cmake编译命令,会产生nuttx_px4fmu-v2_default文件夹,该文件里的px4fmu-v2_default.px4 文件可以直接下载到飞控板上面。
Cmake 文件夹:cmake文件夹下用到最多的是configs文件夹,都是.cmake文件,这些.cmake文件会调用其他文件夹下的.cmake文件,我们可以不关心其他文件夹。如果用pixhawk硬件,那么常用的是nuttx_px4fmu-v2_default.cmake。还有其他的一些配置,适用于不同的硬件和选择不同的模块(应用程序)进行编译。
Documetion文件夹:开发者文档目录,包括代码说明
launch文件夹:仿真环境用到的文件夹,在gazebo中生成世界,配置ros节点等
mavlink文件夹:下是mavlink消息的定义,打包,发送,接收,解包的函数,全部由.h文件组成,相当于库函数。是飞行器与地面站,飞行器之间通信的协议.
msg文件夹:下是uORB通信用到的数据结构,它在编译的过程中会自行生成.h文件
ROMFS文件夹:下是启动过程中调用的文件,Firmware\ROMFS\px4fmu_common\ini.d\rcS是启动脚本,它在stm32底层初始化和NuttX系统初始化完成后执行。它根据参数设置的不同决定启用哪些模块(应用程序),如果是旋翼的话,它会调用Firmware\ROMFS\px4fmu_common\init.d\rc.mc_apps
src文件夹:是源代码,其中dirvers文件夹下是各种传感器的驱动文件,examples文件夹是一些测试用的模块(应用程序),include文件夹下是px比较基础的一些变量定义和文件包含,lib文件夹下是调用的库文件,包括向量,矩阵运算,GPS转XY距离坐标,滤波算法等,platforms文件夹下也是px4专属的一些变量和函数的定义,我们最关心的是其中的modules文件夹,其中包含我们需要的控制算法。
src文件夹下的分析:
1. drivers:包含了飞控硬件系统中使用的所有驱动代码。
2. examples:PX4系统给的一些简单的实例,为了便于开发者做二次开发调试测试使用。如px4_simple_app,示例了如何通过uORB获取需要的数据。
3. lib:包含一些标准库,如矩阵运算、加密/解密、PID算法等
4. modules:包含所有上层应用的模块实现,PX4的上层程序都是通过模块的形式来运行(类似于ROS里面的节点),每一个模块订阅和发布uORB信息。模块包括姿态解算、姿态控制、位置控制、命令处理(commander)等。其中commander是实现整个任务模式调度的代码,包括pixhawk灯显控制、飞行模式切换、上锁解锁等。下面是其中一些module的介绍:
attitude_estimator_ekf:采用EKF算法实现的姿态估计
attitude_estimator_q: 使用mahony的互补滤波算法实现姿态解算。
mc_att_control:即multi-copter attitude control,多轴飞行器的姿态控制算法实现,主要就是姿态的内外环PID控制,外环角度控制,内环角速度控制。
mc_pos_control: multi-copter position control,多轴飞行器的位置控制算法实现,主要是位置的内外环PID控制,外环速度控制,内环加速度控制。
commander: 整个系统的任务调度,包括命令处理、事件处理、飞行模式切换等。
land_detector: 飞行过程中使用land模式降落或者落地时的落地监测部分,内部会监测Z轴速度和加速度等。
local_position_estimator: 常说的LPE算法实现位置解算。
mavlink: 和地面站通信的通信协议,结合地面站QGC源码配合修改,或者仅仅调用mavlink内部的API接口,即可通过无线信号将所需的数据显示在地面站QGC上,此方法是一种实时监测目标数据的方法。
logger: 关于log日志的读写函数。

总结分析

我们经常挂在嘴边的px4的源码指的就是src/modules文件夹下的代码,该文件夹下的代码分模块有着不同的功能,是今后学习的重点。
总结
整个代码实现主要涉及的包含
platforms - 系统实现,系统底层实现,如分时控制,多线程调度,消息机制等
src/drivers - 驱动实现,设备驱动,如陀螺仪/加速度计、GPIO、I2C等硬件底层实现
src/modules - 应用实现,控制模块、任务调度等
ROMFS/px4fmu_common/ini.d/rcS - 启动脚本,里面指定了启动哪些程序、哪些模块
Makefile - 系统编译生成的配置

研究整个项目的生成和运行可以了解rcS,Makefile等编译生成文件和启动脚本
了解系统底层实现可以看platforms,src/drivers等目录内容
了解飞行控制的实现和算法主要查看src/modules中的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值