四轴无人机-飞行控制原理(PID)

news2025/2/23 10:06:51

 控制目标:

1、稳定/平衡 【最核心】:四旋翼微型飞行器的控制就是以地理坐标系为参考,做三维飞行姿态控制。控制目标是使其在 无动作指令时保持稳定悬停状态,有动作指令 时有效完成指定动作。

2、准确

3、快速

4、鲁棒

控制方法:

对于四轴飞行器平衡控制中,四个电机的转速并不是完全直接由遥控油门来决定,而是结合姿态控制指令和外部扰动综合了PID姿态控制输出算出来的。

飞行员只要将他想要的四轴整体动作(升降、三轴旋转)告诉飞控,飞控通过算法计算评估当前姿态与目标姿态的偏差,再通过这些偏差来修正四个电机的动作。

往深一步思考,遥控器如何控制了无人机:

四路使用:油门+三个姿态角(这也是PID控制系统中的几个控制对象;四路备用:

往深一步思考,电机具体是怎么控制的?

由四轴飞行力学可知,控制无人机的的平衡飞行

== 把四个电机的转向和转速 控制好

== 因4 路 PWM 驱动 4 个 NMOS 管来控制 4 个电机。

==最终是控制好四路PWM占空比和方向

再回味上面一段话,飞行员发出具体期望 角度/量 (升降、三轴旋转)的指令到飞控,那么就有了飞控通过算法计算评估当前姿态与目标姿态的偏差,再通过这些偏差来修正四个电机的动作。

PID控制理论

单级PID

 

串级PID

 PID算法学习:

PID算法 - 从入门到实战!_哔哩哔哩_bilibili来自 “23电赛特训班 (小黑、小强、菠萝)” 录课,本期是由小黑主讲的PID算法,首先用生活中和电赛中的例子带大家直观了解什么是PID,然后用浅显的语言讲解PID的数学表达式及其含义(重要),并用代码来实现,最后总结实际使用中PID的各类组合和调参技巧,并通过讲解平衡小车的代码和调参来运用于实践。内容如下:一、PID是什么?1. 开环和闭环2. 闭环控制的实现方式二、什么时候要用到PID, 视频播放量 43013、弹幕量 292、点赞数 2330、投硬币枚数 1581、收藏人数 6880、转发人数 256, 视频作者 _WNNN, 作者简介 ,相关视频:通俗易懂的 PID 控制算法讲解,PID控制从入门到精通,PID控制算法精讲,进国赛了,可以发了,【平衡小车PID】直立环+速度环完整调参过程 (开源),PID控制指令,第11讲:PID控制器算法代码分析,快速入门Simulink的PID仿真,只用PID?加上前馈解决95%的问题!,智能小车制作教程(基于stm32)https://www.bilibili.com/video/BV1iP411x71X/?vd_source=f443c8140671d1c361aa817ad1193312icon-default.png?t=N7T8https://www.bilibili.com/video/BV1iP411x71X/?vd_source=f443c8140671d1c361aa817ad1193312

开环/闭环控制

开环:系统输出不反馈,输入不会受到输出的影响

温度水壶:是一个最简单的闭环系统,达到设定稳定,输入会被切断;并非PID,PID时随动系统控制(连续函数方式,而不时简单的阶跃函数)

PID数学表达公式

PID三种算法物理意义理解

 Ek   就是 控制偏差;

对于P算法,比例算法;当前时刻系统误差越大,P算法贡献就越大,系统响应越剧烈,随着系统误差的减小,P算法贡献逐渐减小趋近于0;

对于D算法,微分算法,在dt时间内,如果系统响应缓慢的话,误差的差值就很小,阻尼就感受到很小。

对于 I算法:积分算法,数学上是误差曲线与坐标轴围成的面积,一个误差和的曲线,消除稳态误差

无人机定高调节---PID模拟调参网站

Webpack App (rossning92.github.io)https://rossning92.github.io/pid-simulation/

PID算法例子理解

四轴PID算法学习之一理解PID控制的理论-CSDN博客四轴PID算法学习前言一、什么是PID二、 PID是怎么控制的比例控制积分控制微分控制三、PID应用前言PID控制算法在控制领域应用的非常广泛,在四轴飞行器的开发中为了保证姿态稳定在大多数情况下采用的也是PID算法,我在学习四轴之前也接触过PID,但是对它的理解总是不够深刻,因此最近也查了一些资料把自己的理解写下来。一、什么是PID简单来说,我们为什么要用PID控制呢?因为当我们在做实验或...https://blog.csdn.net/bty156/article/details/104563505?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%9B%9B%E8%BD%B4%E6%97%A0%E4%BA%BA%E6%9C%BApid%E6%8E%A7%E5%88%B6&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-4-104563505.142^v94^chatsearchT3_1&spm=1018.2226.3001.4187

PID调参

考虑现在你用一根手指来快速达到二轮小车的平衡状态;

【急先锋】首先就是P算法,发现快倒了,倒的比较多,就要施加个力触碰下。反馈传感器就是眼睛,你的大脑里只有简单的P算法,输入就是你的手指。

然后,你发现每次都要用手指左一下,右一下,尽管可能具体平衡态越来越近了,但是很慢,还需要不断左右碰。

【稳重的谋将】然后,你就想到了再上一根手指,这根手指在发现P算法手指用力过大的时候,做个反作用阻尼力,抵消过冲。 

调参顺序:P D I,I不一定用的上;我们希望达到的调参效果是,P快速响应,发现P快速响应有过冲风险时,D又能审时度势出力,防止超调。

PID控制:

四轴单级PID单角度姿态控制

无人机的飞行姿态控制,我们的控制对象是无人机的三个角度。每个角度都考虑用一个PID环去控制,最终作用到执行机构上的还是四路电机的PWM信号。

四轴单级PID姿态控制

同理,三个角度。(三个角度的控制,最终作用到四路电机的PWM控制效果是线性叠加)

串级PID控制

主要是在角度控制的基础上,增加了角速度控制。期望姿态角与姿态结算出来的角度进行角度PID控制,输出的角度值,是离散型数据。又因为w(角速度)=a(角度)/t(时间)。所以可以认为输入的也是角速度。于是就实现了外环PID值作为内环PID的期望值目的。再结合陀螺仪比较精准的采集角速度的原理。内环的角速度控制可以保证飞行器测量值迅速的达到期望值。

这样一来就大大缓解了单角度环控制,由于飞机的电机转速与升力不成正比而出现的失衡(比如说在目标位置前后,左右偏移),跟随滞后等等问题。
————————————————
原文链接:https://blog.csdn.net/qq_60521516/article/details/123704887

PID计算结果的动力分配

PID计算的结果最终是要输出给电机的,所以我们要将三个姿态角的控制输出正确的分配给四个电机。顺时针开始,从第四象限开始,依次是M1,M2,M3,M4四个电机。(注意上面给的参考图片,左下侧是机头方向)

实现左右横滚运动的时候:(Roll)

需要M1,M4的转速增大。M2,M3电机的转速减少。(或者反着来,运动方向相反)并且为了使得飞行的稳定性。输出的增量和减少量是一致:

MOTOR1 += + pidRateX.out
 
MOTOR2 += - pidRateX.out
 
MOTOR3 += - pidRateX.out
 
MOTOR4 += + pidRateX.out
实现前后俯仰运动的时候:(Pitch)

需要M3,M4的转速增大。M1,M2电机的转速减少。(或者反着来,运动方向相反)同样的为了使得飞行的稳定性。输出的增量和减少量是一致:

MOTOR1 += - pidRateY.out
 
MOTOR2 += - pidRateY.out
 
MOTOR3 += + pidRateY.out
 
MOTOR4 += + pidRateY.out

实现偏航运动的时候:(Yaw)

需要M2,M4的转速增大。M1,M3电机的转速减少。(或者反着来,运动方向相反)同样的为了使得飞行的稳定性。输出的增量和减少量是一致:

MOTOR1 += -pidRateZ.out;
 
MOTOR2 += + pidRateZ.out;
 
MOTOR3 += - pidRateZ.out;
 
MOTOR4 += + pidRateZ.out ;

将三个式子加和:

MOTOR1 += + pidRateX.out - pidRateY.out -pidRateZ.out;
 
MOTOR2 += - pidRateX.out - pidRateY.out + pidRateZ.out;
 
MOTOR3 += - pidRateX.out + pidRateY.out - pidRateZ.out;
 
MOTOR4 += + pidRateX.out + pidRateY.out + pidRateZ.out;

关于上面式子中的做一点说明:pidRateX.out这个应该是一个四维向量

————————————————
版权声明:本文为CSDN博主「Xiao |」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_60521516/article/details/123704887

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【李沐深度学习笔记】线性代数实现

课程地址和说明 线性代数实现p2 本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。 这节就算之前内容的复习,后面以截图形式呈现 标量由只有一个元素的张量表示 import torch x torch.tensor([3.0]) y …

时序分解 | Matlab实现CEEMD互补集合经验模态分解时间序列信号分解

时序分解 | Matlab实现CEEMD互补集合经验模态分解时间序列信号分解 目录 时序分解 | Matlab实现CEEMD互补集合经验模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现CEEMD互补集合经验模态分解时间序列信号分解 1.分解效果图 &#xff0…

hive3.X的HiveServer2 内存泄漏问题定位与优化方案(bug)

参考文档: https://juejin.cn/post/7141331245627080735?searchId20230920140418F85636A0735C03971F71 官网社区: https://issues.apache.org/jira/browse/HIVE-22275 In the case that multiple statements are run by a single Session before bein…

金蝶云星空与旺店通·旗舰奇门对接集成收料通知单查询连通新增采购订单(金蝶收料通知单-旺店通采购订单开单)

金蝶云星空与旺店通旗舰奇门对接集成收料通知单查询连通新增采购订单(金蝶收料通知单-旺店通采购订单开单) 数据源平台:金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践,面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司…

Linux学习-HIS系统部署(2)

GitLab服务器搭建 使用rpm包本地部署GitLab服务器 # 确认GitLab主机硬件配置,注GitLab服务器至少要有4G内存,关闭SWAP分区 [rootgitlab ~]# free -mtotal used free shared buff/cache available Mem: 4021 1…

“高级前端开发技术探索路由的使用及Node安装使用“

目录 引言1. Vue路由的使用2. VueNode.js的安装使用总结 引言 在当今互联网时代,前端开发技术日新月异,不断涌现出各种新的框架和工具。作为一名前端开发者,我们需要不断学习和探索新的技术,以提升自己的开发能力。本文将深入探讨…

Windows AD域使用Linux Samba

Windows AD域使用Linux Samba 1. 初始化配置 1.1 初始化配置 配置服务器名 hostnamectl set-hostname samba.sh.pana.cnhosts文件配置,确保正常解析到本机和域控 [rootcentos7 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.loc…

微信小程序商城怎么弄

微信小程序商城怎么弄?这是一个常见的问题,对于那些想要在微信上创建一个自己的商城的人来说。下面为您介绍一些基本的步骤和注意事项,帮助您轻松地创建一个微信小程序商城。 首先,要创建一个微信小程序商城,您需要注册…

java面向对象(七)

文章目录 一、单例设计模式是什么?1.概念2.如何实现1.饿汉式2.懒汉式 3.区分饿汉式和懒汉式 二、main()方法的使用1.使用说明 三、类的成员之四:代码块(或初始化块)1.概念2.静态代码块3.非静态代码块 四、final关键字五、多态性的…

element树形组件使用之数据授权

<template><div><el-card class"tree-card"><p class"title">数据授权</p><div class"box"><div class"tree"><div class"member">选择授权人员</div><div class…

电压放大电路的作用有哪些(电压放大器)

电压放大电路是电子电路中常见且重要的组件&#xff0c;其主要作用是将输入信号的电压放大到所需的输出电压级别&#xff0c;并保持输入信号的形状和准确度。电压放大电路广泛应用于各种电子设备和系统中&#xff0c;具有以下几个重要的作用&#xff1a; 信号放大&#xff1a;电…

算法通关村第14关【白银】| 堆的经典问题

1.数组中的第k个最大元素 思路&#xff1a; 最直观的就是选择法&#xff0c;遍历一k次找到第k大的数之前使用快速排序的思想每次找出一个位置&#xff0c;会超时这里使用堆&#xff08;优先队列&#xff09;&#xff0c;找最大用小堆&#xff0c;找最小用大堆。 例如找第k大的…

Mysql——压缩包方式安装教程

一.Mysql压缩包下载方式 zip版&#xff08;5.7及8.0&#xff09;的下载需到官方网站下载&#xff0c;不同版本对应能安装在不同的操作系统下&#xff0c;本次介绍的是mysql-8.0.30-winx64在win10下的安装方式。 下载网址&#xff1a;MySQL :: Download MySQL Community Server …

java版网页代码生成器系统myeclipse定制开发mysql数据库网页模式java编程jdbc生成无框架java web网页

一、源码特点 java版网页代码生成器系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&#xff0c;使…

D. Boris and His Amazing Haircut

Problem - D - Codeforces 问题描述&#xff1a;剪发&#xff0c;将数组a减为数组b&#xff0c;有m个剪刀&#xff0c;每个剪刀只可以用一次且可以在任意区间内剪发&#xff0c;将长度大于mi的减为mi。现在有m数组&#xff0c;数组元素是第i个剪刀可以剪到mi&#xff0c;问能否…

app发布动态解决图片适配问题(等比展示)

#前言 最近在用uni-app写一个移动端的小项目&#xff0c;基本上就是登陆注册、发表动态等&#xff0c;但是发表动态一个最大的问题就是图片的展示问题&#xff0c;因为每个人上传的图片大小是不一样的。 1.如果按照一定的尺寸固定图片宽高&#xff0c;那如果图片规格不符合要求…

第一章:最新版零基础学习 PYTHON 教程(第六节 - Python 中的命名空间和作用域)

什么是命名空间&#xff1a; 命名空间是一个为 Python 中的每个对象都有唯一名称的系统。对象可能是变量或方法。Python 本身以 Python 字典的形式维护一个命名空间。让我们看一个例子&#xff0c;计算机中的目录文件系统结构。不用说&#xff0c;可以有多个目录&#xff0c;每…

关于Allegro17.4 3d模型大小不匹配问题解决

文章目录 问题概述问题原因解决办法 问题概述 Allegro 17.4版本采用 3D Canvas 工具进行3D模型的映射&#xff0c;映射后&#xff0c;无需保存任何映射文件&#xff0c;只要指定好step文件路径&#xff0c;即可将模型映射信息保存在pcb封装文件中&#xff0c;方便快捷。映射流…

idea集成tomcat(Smart Tomcate插件安装)

当我们在 tomcat 上部署好一个 webapp 后&#xff0c;如果我们要修改代码&#xff0c;就需要重新进行打包和部署&#xff0c;但往往在工作中是需要频繁修改代码&#xff0c;然后再查看成果的&#xff0c;就需要反复的进行打包和部署的过程&#xff0c;这是很麻烦的 通过 Smart …

WebGIS开发教程:Openlayers常见功能实现

Openlayers的核心 Openlayers如何实现交互式绘制 创建矢量图层和矢量数据源 - 创建画布 创建画笔 激活画笔 如何加载天地图,设置中心点和显示级别 const TianDiMap_cva new ol.layer.Tile({ title:"天地图矢量注记图层", source:new ol.source.XYZ({ url:htt…