当前位置: 首页 > news >正文

PX4之代码结构

PX4开源飞控是目前主流的开源飞控项目,被很多公司作为飞控开发的参考。也广泛被用于现在流行的evtol验证机的飞控,进行初步的飞行验证。可能大多数AAM以及UAM都离不开PX4。

项目代码可以从github下载
$ git clone --recursive GitHub - PX4/PX4-Autopilot: PX4 Autopilot Software

这里采用–recursive选项,因为PX4项目包含很多子项目,可以同步下载,或者采用
$ git clone https://github.com/PX4/PX4-Autopilot
$ git submodule update --init --recursive

分步下载代码库和子代码库,如果有github连接不稳定的情况,可以多次执行git submodule update来下载所有的子代码库。

项目代码结构大致如下

 

 其中主要的目录有
1 boards
各种飞控硬件平台的配置文件

2 build
编译产生的目录,make之后生成的文件放置在这个目录

3 cmake
cmake编译配置目录

4 Documentation
开发者文档目录,包括代码说明等

5 launch
仿真环境用到的文件,包括ROS节点配置等

6 mavlink
通讯协议文件,定义和实现PX4与地面站之间的通讯协议。

7 msg
uORB消息定义文件,定义PX4程序之间通讯的消息格式。

8 platforms
系统平台实现的文件,包括PX4采用的Nuttx操作系统的源代码。

9 ROMFS
系统启动调用的脚本,ROMFS\px4fmu_common\ini.d\rcS是启动脚本,rcS中又调用rc.sensors,rc.mc_apps等文件。
rcS:最先启动的脚本,负责挂载SD,启动uORB、配置系统参数等。
rc.sensors:启动传感器驱动。
rc.mc_apps:启动上层应用,如commander(指令处理)、att_control(姿态控制)、pos_control(位置控制)等。

10 src
源代码目录,包含驱动、测试示例、模块实现等源代码。
10.1 drivers
包含了飞控硬件系统中使用的所有驱动代码。
10.2 examples
PX4系统给的一些简单的实例,为了便于开发者做二次开发调试测试使用。如px4_simple_app,示例了如何通过uORB获取需要的数据。
10.3 lib
包含一些标准库,如矩阵运算、加密/解密、PID算法等
10.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日志的读写函数。

飞控固件的生成由make来实现,如
$ make px4_fmu-v5_default #v5默认
$ make px4_sitl_default gazebo #gazebo仿真

总结
整个代码实现主要涉及的包含:
platforms - 系统实现,系统底层实现,如分时控制,多线程调度,消息机制等
src/drivers - 驱动实现,设备驱动,如陀螺仪/加速度计、GPIO、I2C等硬件底层实现
src/modules - 应用实现,控制模块、任务调度等
ROMFS/px4fmu_common/ini.d/rcS - 启动脚本,里面指定了启动哪些程序、哪些模块
Makefile - 系统编译生成的配置

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

相关文章:

PX4之代码结构

PX4开源飞控是目前主流的开源飞控项目,被很多公司作为飞控开发的参考。也广泛被用于现在流行的evtol验证机的飞控,进行初步的飞行验证。可能大多数AAM以及UAM都离不开PX4。 项目代码可以从github下载 $ git clone --recursive GitHub - PX4/PX4-Autopil…...

【C++11】可变参数模板(函数模板、类模板)

在C11之前,类模板和函数模板只能含有固定数量的模板参数。C11增强了模板功能,允许模板定义中包含0到任意个模板参数,这就是可变参数模板。可变参数模板的加入使得C11的功能变得更加强大,而由此也带来了许多神奇的用法。 可变参数模…...

centos安装高版本cmake

之前centos版本为cmake version 2.8.12.2采用yum remove卸载后重装还是这个版本,看来centos下面就是这个最新了,这说明centos煞笔。于是自己下载cmake包,然后安装。 官方cmake链接地址(3.16)(其他版本自己找,链接给你了) 1,wget下载 2,解压: tar -zxf cmake-3.16.0.…...

重温一下C#的时间类型,并简单写一个定时器功能

🎉🎉 时间是一个非常抽象的概念,本篇文章我们不深究目前电脑上的时候是如何保持全网同步。主要是讲讲在使用C#编程语言里的时间类型。最后使用定时任务简单写一个提醒功能,比如:每天10点准时打开一次csdn首页&#xff…...

MYSQL查询语句执行顺序

SQL语句定义的顺序 (1) SELECT (2)DISTINCT <select_list> (3) FROM <left_table> (4) <join_type> JOIN <right_table> (5) ON <join_condition> (6) WHERE <where_condition> (7) GROUP BY <group_by_list> (8) WITH {C…...

总结:电容在电路35个基本常识

1 电压源正负端接了一个电容&#xff0c;与电路并联&#xff0c;用于整流电路时&#xff0c;具有很好的滤波作用&#xff0c;当电压交变时&#xff0c;由于电容的充电作用&#xff0c;两端的电压不能突变&#xff0c;就保证了电压的平稳。 当用于电池电源时&#xff0c;具有交流…...

Kroger EDI 855 采购订单确认报文详解

本文着重讲述Kroger EDI项目中&#xff0c;供应商发给Kroger的X12 855EDI 规范报文&#xff08;采购订单确认&#xff09;解读。 在此前的文章如何读懂X12报文中&#xff0c;我们对X12已经做了详细的介绍&#xff0c;大家可以以此为基础&#xff0c;深入了解855采购订单确认报…...

HANA SDA-远程数据源访问

我们需要把其他系统的数据拿过来&#xff0c;到BW里和财务的数据集成。 HANA SDA就是不复制数据&#xff0c;建立虚拟表&#xff08;virtual table&#xff09;来映射到远程数据源。通过这个虚拟表访问其他系统的数据。 对虚拟表的操作现在也可以查询&#xff0c;更新&#xff…...

【AUTOSAR】:OS-Hook

OS-Hook OS-HookPINIC类型1、Os_ErrKernelPanic1.1、Os_HookCallPanicHook1.1.1、OS_PANICHOOK1.1.1.1、Os_PanicHook1.1.1.2、Os_Hal_CoreFreezeOs_Hal_NOPOS-Hook 延伸阅读 延伸阅读 PINIC类型 1、Os_ErrKernelPanic...

Open3d入门

目录 点云数据 1 主成分分析 1.1 Method 1.2 Results 2 表面法线估计 2.1 Method 2.2 Results 3 体素网格下采样 3.1 Method 3.2 Results 点云数据 常用数据下载&#xff08;免积分&#xff09; 1 主成分分析 1.1 Method 对点云进行主成分分析&#xff08;PCA&…...

linux部署zookeeper

linux部署zookeeper 1、单机部署zk ZooKeeper服务器是用Java创建的&#xff0c;它需要在JVM上运行&#xff0c;所以需要使用JDK1.6及以上版本&#xff0c;一般都是jdk1.8。 选择自己安装本地的jdk&#xff0c;而不是centos自带的openjdk。 查看本地安装的jdk&#xff1a; j…...

Junit4升级Junit5汇总

Junit4升级Junit5汇总目录MockMvcBuildersUnnecessaryStubbingException目录 记录Junit4升级到Junit5中遇到的问题和结局方案 MockMvcBuilders 问题&#xff1a; 将Junit4的RunWith和Rule都改成ExtendWith后出现setup函数中MockMvcBuilders的参数不正确 ExtendWith({Spring…...

Axios二次封装和Api的解耦

目录 一、axios三种基本写法 二、axios的二次封装 三、Api的解耦 一、axios三种基本写法 1&#xff09;get方法&#xff08;是最简单的&#xff09;&#xff1a; 写法二&#xff1a; 2&#xff09;post&#xff1a; 3&#xff09;axios请求配置 默认是get请求&#xff0c;如…...

SpringAOP从入门到源码分析大全,学好AOP这一篇就够了(一)

文章目录系列文档索引一、认识AOP1、AOP的引入原因2、AOP常见使用场景日志场景统计场景安防场景性能场景3、AOP概念AOP 的概念Aspect 概念&#xff08;切面&#xff09;Join point 概念&#xff08;连接点&#xff09;Pointcut 概念&#xff08;切入点&#xff09;Advice 概念&…...

【单目标优化算法】樽海鞘群算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

手把手教你,解决C盘分区不足,C盘怎么扩大磁盘分区

由于在磁盘分区中&#xff0c;C盘是很重要的一个磁盘&#xff0c;为了保证C盘有足够的磁盘分区。其中扩大C盘分区很常见的操作之一。那么&#xff0c;C盘怎么扩大磁盘分区&#xff1f;在本文中&#xff0c;易我小编将全面地讲解C盘合并分区的方法。 一、为什么C盘怎么扩大磁盘分…...

Ethernet-APL——过程自动化的新黄金标准

| Ethernet-APL为终客户和设备制造商带来益处 Ethernet-APL&#xff08;Advanced Physical Layer&#xff0c;高级物理层&#xff09;是一种两线制以太网物理层&#xff0c;它使用了由IEEE 802.3cg所定义的10BASE-T1L&#xff0c;并采用了新的工艺制造规定&#xff0c;因此构成…...

LVGL Styles

LVGL StylesGet started按钮添加标签按钮添加风格滑动条值显示StylesSize stylesBackground stylesBorder stylesOutline stylesShadow stylesImage stylesArc stylesText stylesLine stylesGet started 按钮添加标签 /*** brief 按钮事件回调函数* param e */ void btn_eve…...

扬帆优配|联通港股创近两年新高!A股资源类股爆发,食品饮料领跌

今日上午&#xff0c;A股商场和港股商场均现较大起伏震动&#xff0c;临近上午收盘出现一波跳水&#xff0c;不过&#xff0c;到上午收盘&#xff0c;上证指数仍微涨0.10%&#xff0c;煤炭等资源类板块明显上涨。 港股商场上午走弱&#xff0c;科技股领跌。 沪指微涨0.10%资源…...

Win10+VS2019+Qt5.15.2下编译QCAD

一&#xff1a;官方说法&#xff1a;WindowsDownload and install a C compiler, for example:Visual Studio C Express or Visual Studio CommunityDownload and install Qt from qt.io (see supported platforms):Download for example the online installer fileqt-opensour…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...