PX4源码学习(一):结构概述

2023-05-16

最近在做PX4固件的移植开发工作,由于之前没有这方面开发经验,加之PX4源码又比较庞杂,所以想要通过一点一点的学习梳理和实践,使这部分工作能够尽快开展起来。博客中如有错误,恳请大家指正,同时欢迎小伙伴们一起交流学习。

另:这篇博客很多内容借鉴了其他大神的博客,根据自己的理解做了部分修改,关于原创还是转载的问题我有些疑问,如有不妥,敬请告知。

PX4飞控源码系统框架介绍:

注:本篇内容中所编译的PX4 固件版本为v1.11,以 px4_fmu-v2_default 为例。

一、boards

各种不同的飞控板硬件配置文件。

二、build

编译后生成的文件,其路径为:Firmware/ bulid / px4_fmu-v2_default

三、Cmake

配置文件,其路径为 Firmware / boards / px4 / fmu-v2 / default.cmake。该文件主要是关于系统使用的文件的路径配置。PX4系统中所有的.cpp和.c文件都要在该处进行路径包含。自定义的任务或sensor驱动程序也需要添加到该处。

四、Cmake

其中的.cmake文件会调用其他文件夹内的.cmake文件。

五、Documation

开发者文档。

六、integrationtests

积分集成测试文档。

七、launch

仿真环境配置文档。

八、mavlink

是飞控和地面站QGC的通信协议部分,可直接调用,现已更新为2.0版本。路径为:Firmware / mavlink

九、msg

是uORB Messaging的缩写。路径为:Firmware / msg

该部分主要是PX4系统使用的所有数据的集合,各种任务和sensor驱动中需要获取的sensor数据都在此部分,还包括各种运行状态的数据。注意该文件夹下的CMakeLists.txt,该文档是整个msg部分的配置文件,类似于二中Cmake中的配置文件,在开发者创建任务或者sensor驱动时创建对应的数据(xxx.msg文件)以后,需要将其添加到CMakeLists.txt中,否则编译时识别不到开发者创建的数据。

十、platforms

PX4所使用的操作系统,路径为 Firmware / platforms / nuttx,关于os的基本概念暂不在此详述。

十一、posix-configs

可移植操作系统接口。

十二、ROMFS

ROM file_system的简写,路径为 Firmware / ROMFS,内部的px4fmu_common文件夹中的init.d文件夹里包含了px4系统初始上电启动的启动脚本,即一系列的启动过程和系统配置。包含rcS、rc.sensors 、rc.mc_default、 rc.mc_apps等文件。

其中:

rcS:最先启动的脚本,负责挂载SD,启动uORB、配置系统参数等。

rc.sensors:启动sensors启动代码。如果在src / drivers 中自己创建sensor驱动,则应放在该部分启动。

rc.mc_default:配置和PWM***相关的系统参数,内部含有怠速的配置。

rc.mc_apps:启动上层应用,如attitude_estimate、attitude_control、position_estimate和position_control等。如在src / modules 中自定义app,则应放在在该部分启动。

十三、src

13.1 drivers

该文件夹内包含了飞控硬件系统中使用的所有sensor的驱动代码。也包含了STM32主控MCU的io输出控制(PX4IO)和pwm的驱动。

13.2 examples

PX4系统给的一些简单的实例,为了便于开发者做二次开发调试测试使用。尤其是px4_simple_app,内部涉及了如何通过uORB获取需要的数据。

13.3 lib

标准库。

13.4 modules

上层任务代码的实现部分,包括姿态解算、姿态控制、配置解算、位置控制、落地检测、sensor初始化、系统配置、uORB、commander等。其中commander是实现整个控制模式的代码,包括pixhawk灯显控制、飞行模式切换、上锁解锁等。

相关算法实现也在该部分,下面是module里的app介绍:

attitude_estimator_ekf:

attitude_estimator_q: 使用mahony的互补滤波算法实现姿态解算。

commander: 整个系统的过程实现,如起飞前各sensor的校准算法实现、安全开关是否使能、飞行模式切换、pixhawk硬件上灯的控制等。

gpio_led:

land_detector: 飞行过程中使用land模式降落或者落地时的落地监测部分,内部会监测Z轴速度和加速度等。

local_position_estimator: 常说的LPE算法实现位置解算。

logger: 关于log日志的读写函数。

mavlink: 和地面站通信的通信协议,结合地面站QGC源码配合修改,或者仅仅调用mavlink内部的API接口,即可通过无线信号将所需的数据显示在地面站QGC上,此方法是一种实时监测目标数据的方法。

mc_att_control: 姿态控制的实现算法,主要就是姿态的内外环PID控制,外环角度控制,内环角速度控制。

mc_pos_control: 位置控制的算法实现,主要是位置的内外环PID控制,外环速度控制,内环加速度控制。

sdlog2: 

sensors: 关于各种sensor的相关函数。

systemlib: 

uORB: IPC通信机制。首先需要了解如何使用它进行进程间通信,了解整个系统中的数据流流向。

十四、test

十五、test_data

测试数据。

十六、tools

编译所需要的工具。

十七、validation

Makefile

最终的编译命令,用shellscript编写,可根据需要修改。

CMakeLists.txt

总的cmake


参考博客1:https://www.cnblogs.com/kinson/p/12124764.html

参考博客2:PX4与Ardupilot的入门基础知识(第一章:架构与启动过程)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PX4源码学习(一):结构概述 的相关文章

  • ChatGPT被淘汰了?Auto-GPT到底有多强

    大家好 xff0c 我是可夫小子 xff0c 关注AIGC 读书和自媒体 解锁更多ChatGPT AI绘画玩法 说Auto GPT淘汰了ChatGPT了 xff0c 显然是营销文案里面的标题党 毕竟它还是基于ChatGPT的API xff0
  • Word+ChatGPT,一分钟完成周报总结作文

    大家好 xff0c 我是可夫小子 xff0c 关注AIGC 读书和自媒体 解锁更多ChatGPT AI绘画玩法 加 xff1a keeepdance xff0c 备注 xff1a chatgpt xff0c 拉你进群 Office 的办公软
  • 两分钟速览谷歌2023IO大会:AI军备竞争,全线出击

    大家好 xff0c 我是可夫小子 xff0c 关注AIGC 读书和自媒体 解锁更多ChatGPT AI绘画玩法 加 xff1a keeepdance xff0c 备注 xff1a chatgpt xff0c 拉你进群 5月10日周三 xff
  • 科大讯飞星火认知大模型:诚意满满、全村希望

    近日 xff0c 科大讯飞召开了星火认知大模型成果发布会 xff0c 会上表示讯飞星火大模型将突破开放式问答 xff0c 对标ChatGPT xff0c 在中文能力上超过ChatGPT xff0c 在英文能力上与ChatGPT相当 对此 x
  • Android NDK tombstone分析工具

    Android NDK tombstone分析工具 在Andoird Native库发生异常的时候 xff0c Linux会发生不同级别的sig xff0c 来结构相关进程的运行 xff0c 同时会产生tombstone trace文件用于
  • 关于UEFI

    最近在Thinkpad上安装Ubuntu12 04的时候 xff0c 经历了几个问题 xff0c 发现BOIS里多了很多选项 xff0c 而且安装双系统也有UEFI有关 xff0c 在网站上找了一篇文章 xff0c 发现这还是一个新概念 x
  • 怎样在github上协同开发

    描述 xff1a How to co work wither parter via github Github协同开发情景模拟 Github不仅有很多开源的项目可以参考 xff0c 同样也是协同开发的最佳工具 xff0c 接下来的就模拟一下
  • Android libdvm.so 与 libart.so

    Android libdvm so 与 libart so 系统升级到5 1之后 xff0c 发现system lib 下面没有libdvm so了 xff0c 只剩下了libart so 对于libart模式 xff0c 从4 4就在De
  • 链表快速排序quick-sort(递归+迭代)

    递归版 直接上代码 span class token keyword static span span class token keyword void span span class token function list qsort s
  • 反向代理--解决跨域问题

    为什么要解决跨域问题 xff1a 因为浏览器有限制 xff0c 只有同域名同端口号下的数据才能拿来用 xff1b 那如果想拿到不同域名不同端口号下的数据就不行了 xff1b 在单文件组件中如何去解决跨域问题 xff1a 因为服务器没有跨域限
  • 写在2011

    很早就想写点东西了 xff0c 可晃荡晃荡地就到了2011年最后一刻 我想是要写点东西了 2011年 xff0c 我有太多的感触 这一年是我第一次在异地迎接农历新年了 xff0c 对 xff0c 当时的感觉很刺激 xff0c 刺激得让我和当
  • Translate Aticle

    最近在Thinkpad上安装Ubuntu12 04的时候 xff0c 经历了几个问题 xff0c 发现BOIS里多了很多选项 xff0c 而且安装双系统也有UEFI有关 xff0c 在网站上找了一篇文章 xff0c 发现这还是一个新概念 x
  • Window64位系统用HSDIS对java代码进行反编译

    1 下载hsdis amd64 dll文件并放入 JAVA HOME jre bin中 xff0c 例如 xff1a C Program Files Java jdk1 8 0 191 jre bin 书上说的是放在 JAVA HOME j
  • golang中的context

    一 Context含义 1 context定义 context是golang中的上下文 goroutine的相关环境快照 xff0c 其中包含函数调用以及涉及的相关的变量值 golang通过Context机制解决一个request中多个go
  • Win10部署Authelia(OAuth2授权框架)

    一 安装docker 二 下载authelia代码 span class token comment 下载代码并切换到本地运行例子 span span class token function git span clone https gi
  • golang并发学习及实战记录

    一 切片append方法不是原子操作 多个协程操作同一个切片 xff0c 使用append方法添加元素时 xff0c 存在并发安全问题 xff0c 需要对append方法加锁 span class token keyword func sp
  • Jetson TX1/TX2搭载RTSO-9003载板刷机及使用JetPack3.3安装软件教程(防踩坑)

    1 烧录Linux系统 1 1 系统要求 最好给主机电脑安装Ubuntu14和Ubuntu16 x86 64系统 Ubuntu18系统不能运行JetPack3 3软件 xff0c 且JetPack3 3安装软件必须在主机Host x86 6
  • Ubuntu系统下ROS安装说明

    1 准备工作 安装前看看有什么更改Ubuntu默认的更新源 xff0c 如果更改了 xff0c 要换回备份的默认的安装源 xff08 etc apt sources list bak xff09 权限设置 用户需要成为 拨出 组的一部分 x
  • 腾讯云服务器上搭建Hadoop伪分布式教程

    1 登陆腾讯云服务器控制台查看内网ip地址 2 更改主机名 修改master ip地址 xff0c 地址改为内网地址 vi etc hosts 172 21 0 修改主机名 vi etc hostname master 重启服务器 rebo
  • 时间序列(二)数据重采样

    数据重采样 时间数据由一个频率转换到另一个频率 降采样 升采样 生成一条带随机值的时间序列 rng 61 pd date range span class hljs string 39 1 1 2011 39 span periods 61

随机推荐