【PX4学习笔记】07.PX4框架学习以及PX4中的PID

目录

文章目录

  • 目录
  • 无人机实现飞行的控制流程
  • PX4固件框架学习
    • 具体框架(总体)
    • 具体框架(boards)
    • 具体框架(build)
    • 具体框架(SRC)
    • 具体模块数据之间的关系
  • PX4中的PID代码体现
    • uORB
  • 其他
    • QGC的姿态控制PID参数体现
    • QGC的位置控制PID参数体现
    • 注意

[!NOTE]

  1. PID本质上是对误差进行处理,然后进行反馈控制。
  2. 姿态控制使用P-PID控制
  3. 位置控制使用P-PID控制
  4. 这两个模块是相互构成串级PID

[!IMPORTANT]

​ PX4中其实是没有高级控制算法的,都是朴素的PID算法。一个是算力限制,另一个是应用场景限制。(原来的东西就很稳定而且够用)

无人机实现飞行的控制流程

PX4飞控中的控制流程如下:

image-20240218061039034

[!IMPORTANT]

​ 最底层是motor_driver,再往上是混控器mixer,再往上是姿态控制att_ctrl,再往上是位置控制pos_ctrl和姿态估计attitude_estimator。

​ 1.其中位置控制pos_ctrl由导航模块navigator和位置估计position_estimator两个部分组成。这里面navigator模块来自于commander和stickmapper。position_estimator模块来自于GPS或者是optical_flow。

​ 2.其中姿态估计attitude_estimator由position_estimator和inertial_sensors两个模块构成。

image-20240218061751174

[!IMPORTANT]

​ 有一个很有道理的点,就是四旋翼运动的本质落脚到最底层其实姿态控制。那么就有一个问题?先有电机转速,还是先有姿态控制?

​ 需要考虑两个量:实际量与期望量。

​ 以att_ctrl这个模块为例子:实际量来源于attitude_estimator,期望量来源于pos_ctrl

​ 以pos_ctrl这个模块为例子:实际量来源于position_estimator,期望量来源于navigator

不太理解的地方是pos_ctrl与att_ctrl的关系

PX4固件框架学习

具体框架(总体)

image-20240218064139998

[!NOTE]

​ Firmware的整体框架如上图。

具体框架(boards)

image-20240218065454841

[!NOTE]

​ boards文件夹里主要存放了固件支持的硬件,px4是最常用的

image-20240218065549774

[!NOTE]

​ boards文件夹中px4内,可以看到各个硬件版本对应的硬件,比如硬件PIXHAWK2.4.8对应的固件fmu-V2,硬件PIXHAWK4对应的固件fmu-V4。

image-20240218065750395

[!NOTE]

fmu-v2固件中的内容。主要存放的是硬件的配置。

image-20240218065843353

[!NOTE]

​ fmu-v2/src文件夹中存放的是硬件的相关驱动和板卡配置部分。

具体框架(build)

image-20240218070027506

[!NOTE]

​ 存放编译好PX4固件后生成的,可以直接烧录进pixhawk硬件的二进制文件。

image-20240218070211203

[!NOTE]

​ px4固件中,由一些重要的头文件。

具体框架(SRC)

image-20240218064155334

image-20240218064159251

image-20240218142922422

[!NOTE]

​ 控制算法中使用到的库。

image-20240218143318704

[!NOTE]

​ src/modules文件夹中放了最关键的控制算法。

具体模块数据之间的关系

image-20240218064204434

[!NOTE]

​ 具体的msg数据流消息的流动

PX4中的PID代码体现

image-20240218145808616

image-20240218150931720

​ 在mc_att_control_params.c中存放了进行姿态控制所需要的各种参数。

image-20240218151413340

[!NOTE]

​ 上述文件与qgc地面站中的参数设置是一一对应的。

uORB

image-20240218151052368

其他

QGC的姿态控制PID参数体现

image-20240218151704002

QGC的位置控制PID参数体现

image-20240218151913384

注意

image-20240218151952937

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/484760.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础数据结构与相关C++ STL容器

文章目录 数组arrayvector 栈和队列dequestackqueue 堆heappriority_queue 链表listforward_list 树setmapmultisetmultimap 哈希表unordered_setunordered_mapunordered_multisetunordered_multimap 图 数组 array 不开口的连续线性空间,支持随机访问。 array是…

【xss跨站漏洞】xss漏洞利用工具beef的安装

安装环境 阿里云服务器,centos8.2系统,docker docker安装 前提用root用户 安装docker yum install docker 重启docker systemctl restart docker beef安装 安装beef docker pull janes/beef 绑定到3000端口 docker run --rm -p 3000:3000 janes/beef …

HTTP与HTTPS-HTTPS 的应用数据是如何保证完整性的?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTPS 的应用数据是如何保证完整性的? TLS 在实现上分为握手协议和记录协议两层 TLS 握手协议就是我们前面说的 TLS 四次握手的过程,负责协商加密算法和生成对称密钥,后续用此密…

【CVE-2024-21626】容器逃逸漏洞修复

哈喽大家好,我是咸鱼。 好久不见,最近有一个很火的 CVE——runc 容器逃逸漏洞。年前的时候我们已经在测试环境进行了相关操作打算年后线上进行修复。 因为今天咸鱼才开工,所以文章也就拖到了现在 😃 漏洞介绍 简单来讲&#xf…

MongoDB学习笔记

1. 写在前面 最近工作用到了Mongodb,虽然有了gpt,对于这种数据库操作的代码基本上不用自己费多大功夫,但对于知识本身,还是想借机会系统学习下Mongodb的,原因是之前接触数据库一直都是mysql,oracle等关系型…

Redis篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、缓存雪崩**二、缓存穿透三、缓存预热四、缓存更新五、缓存降级 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女…

Sora:打开视频创作新纪元的魔法钥匙

随着人工智能技术的飞速发展,AI视频模型已成为科技领域的新热点。而在这个浪潮中,OpenAI推出的首个AI视频模型Sora,以其卓越的性能和前瞻性的技术,引领着AI视频领域的创新发展。让我们将一起探讨Sora的技术特点、应用场景以及对未…

环境规制滞后一期数据集(2002-2020年)

时间范围:2002-2020年 参考文献: [1] 纪小乐, 薛启航, 魏建. 环境规制与数字经济:中国南北经济差异的诱致与扩大因素分析[J]. 中国人口资源与环境, 2023, 33 (12): 94-108. [2] 邹志明, 陈迅. 外商直接投资对技术创新与经济高质量发展的影…

qt-OPENGL-星系仿真

qt-OPENGL-星系仿真 一、演示效果二、核心程序三、下载链接 一、演示效果 二、核心程序 #include "model.h"Model::Model(QOpenGLWidget *_glWidget) { glWidget _glWidget;glWidget->makeCurrent();initializeOpenGLFunctions(); }Model::~Model() {destroyV…

Flink双流(join)

一、介绍 Join大体分类只有两种:Window Join和Interval Join Window Join有可以根据Window的类型细分出3种:Tumbling(滚动) Window Join、Sliding(滑动) Window Join、Session(会话) Widnow Join。 🌸Window 类型的join都是利用window的机制…

SpringIOC之support模块StaticApplicationContext

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

数据库事物复习

事务 比如说将张三的银行账户拿出一千给李四,首先需要查询张三的账户余额,扣除1000,然后如果给李四加上1000的过程中出现异常会回滚事务,临时修改的数据会回复回去。 -- 1. 查询张三账户余额 select * from account where name …