前言

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

一、代码整体结构

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

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

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

二、src文件夹解析

src文件夹可谓是PX4项目的精华,其中包含了无人机算法的所有实现,src文件夹中的内容分为以下6个部分
(1).drivers文件夹
包含飞控程序中所有的驱动程序,其文件夹内容如下:

模块功能从模块命名很容易看出,例如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代码解析(1)相关推荐

  1. PX4代码解析(5)

    一.前言 我所讨论的PX4代码是基于v1.11版本,该版本与之前的版本有不少不同,其中一个比较大的区别在于新版本大部分用到了C++中模板,使得代码没有以前那么容易理解,因此我在后面介绍PX4的姿态估计 ...

  2. PX4代码解析(6)

    一.前言 上一节介绍了PX4姿态估计调用函数的流程,这一节分享一下我对PX4姿态解算的解读.首先,要理解PX4姿态解算的程序,要先从传感器的特性入手,这里主要介绍的传感器有加速度计,磁力计,陀螺仪. ...

  3. px4代码解析(3)

    前言 在使用PX4飞控时,我们难免要对其进行二次开发,例如修改控制算法,添加新的传感器,这时需要在代码中定义属于自己的消息.本节主要分享一下如何在PX4代码中添加自己的消息 一.消息添加与配置 从代码 ...

  4. PX4代码解析(4)

    一.引言 PX4程序是基于实时操作系统(Real-time operating system, RTOS)的上层应用程序,PX4飞控程序的很多重要模块都是在Nuttx操作系统的调度下运行的.因此,想要 ...

  5. PX4代码解析(2)

    前言 在大致了解PX4代码架构后,我们需要了解PX4的通信机制.在PX4代码架构中,每通信总线主要分为两个部分,一是内部通信总线uORB,即PX4内部进程通信采用的协议,例如PX4内部姿态控制需要获取 ...

  6. PX4代码解析:振动分析

    本篇文章首发于公众号:无人机系统技术.更多无人机技术相关文章请关注此公众号 一.前言 前面的文章主要都是一些理论知识为主,很多读者朋友看了之后可能会有点枯燥,里面很多公式看起来也比较晦涩,今天起给大家 ...

  7. px4代码jlink调试

    之前看了许多介绍px4环境搭建的文章有介绍windows下eclipse和ubuntu下eclipse阅读px4源码的文章,但是没有看到对px4进行代码调试的文章,后来查看px官网发现可以通过visu ...

  8. PX4代码学习系列博客(6)——offboard模式位置控制代码分析(之前转载过,这是第二次转载了)

    我刚刚发现这篇文章去年八月份的时候转载过一次了 https://blog.csdn.net/sinat_16643223/article/details/107874349 转载自:https://b ...

  9. matrix_multiply代码解析

    matrix_multiply代码解析 关于matrix_multiply 程序执行代码里两个矩阵的乘法,并将相乘结果打印在屏幕上. 示例的主要目的是展现怎么实现一个自定义CPU计算任务. 参考:ht ...

最新文章

  1. 专属程序员的编程日历,终于来了 | 10月书讯
  2. HBase的安装与使用
  3. 安装配置JDK和Eclipse的步骤
  4. REST、SOAP、protocolbuf、thrift、avro
  5. chrome主题_谷歌Chrome将很快允许用户创建自定义主题
  6. Laravel源码解析之中间件
  7. js基本函数和基本方法
  8. 操作系统大作业模拟实现命令解释器_06 初识shell之系统命令基础
  9. gitlab ci php 构建,GitLab CI的入门搭建
  10. 单片机加减法计算器_单片机简易加法计算器程序
  11. 大型项目编译注意事项
  12. 邮箱是互联网的个人中心
  13. FPGA设计之首——Altera FPGA 选型及官网文档阅读
  14. 使用UIImageView实现加载GIF图片
  15. 超级计算机summit存储容量,美国Summit超级计算机:采用超过27000块NV计算卡
  16. centos安装stress安装失败_Linux压力测试工具stress
  17. 如何做客户分析?客户分析的内容有哪些?
  18. 9-17每日一题:Leetcode36. 有效的数独
  19. 棕榈油增仓大涨,铁矿石认购上涨,豆粕09-01季节性正套2022.5.27
  20. 前端工程化、模块化、组件化

热门文章

  1. Django开发自己的博客系统
  2. su - 提示失败问题[su方式]
  3. android-HttpClient上传信息(包括图片)到服务端
  4. AngularJS之过滤器
  5. 《Android深入透析》之界面
  6. 如何从一个吊丝男成为一个合格的高级程序员
  7. dns在企业网络中的应用-1
  8. Back to back销售订单和drop ship第三方销售订单的销售成本的问题
  9. linux磁盘满了怎么处理
  10. 线性代数与电路学、信号与系统的关系、微分方程--学习笔记