【 PID 算法 】PID 算法基础

news2025/1/16 11:34:11

一、简介

PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。也就是说,PID算法是结合这三种环节在一起的。粘一下百度百科中的东西吧。

顾名思义,PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,它是连续系统中技术最为成熟、应用最为广泛的一种控制算法,该控制算法出现于20世纪30至40年代,适用于对被控对象模型了解不清楚的场合。实际运行的经验和理论的分析都表明,运用这种控制规律对许多工业过程进行控制时,都能得到比较满意的效果。PID控制的实质就是根据输入的偏差值,按照比例、积分、微分的函数关系进行运算,运算结果用以控制输出

二、闭环控制

这里有一个闭环控制与开环控制的概念,先说一下最简单的开环控制,就是不控制(好简单,哈哈哈)。

1. 开环控制

开环控制,就是控制回路不形成环,也就是,输出没有影响到输入的情况,输入只管输入,不依赖于输出。

这种情况下,可能系统由于外界干扰的等情况,导致输出并不是我们预期的输出,而是有一些偏差,这就不太好了。

在这里插入图片描述
粘一个知乎博主的图吧,就是如果想走到目标位置,由于外界影响走到了实际位置,但是因为是开环控制,输出并不会在行进过程中影响输入,也就是人并不会自动的根据输出来调整走的方向。这样就不太好。

2. 闭环控制

所谓闭环控制,就是输出影响输入,闭环控制是将输出量直接或间接反馈到输入端形成闭环、参与控制的控制方式。这样的话,当输出出现偏差的时候,就可以根据偏差来影响输入,进而调整下次输出的偏差。从而保持一种稳定情况。
在这里插入图片描述
如上图所示,假定在时刻T有:
输入【input(t)】、输出【output(t)】、误差【err(t) = input(t) - output(t)】、PID输出【u(t)】

系统真正的执行是执行的PID的输出值。系统的输出值,回到输入的地方,与当前时刻的输入进行误差计算,进而影响系统的执行过程。像这种输出影响输入的,就属于闭环控制。

如果上面开环控制部分:如果人的眼睛可以看到系统的执行输出,就可以影响人所进行的前进决策,从而调整系统的误差。这感觉就像形成了一个闭环控制。

三、PID算法的控制架构

在这里插入图片描述
如上图所示,就是PID算法的控制架构,它主要分为三个部分,并且这三个部分都是简单的相加就决定了u(t)。算是很简单的控制算法了。

接下来依次说一下:比例控制算法,积分控制算法,微分控制算法。

四、比例控制算法(P)

比例控制算法,我感觉应该是PID算法中比较核心的部分,感觉他是整个PID中的主力,至于其他的像积分控制算法,和微分控制算法,是为了消除误差,减少震荡。

如果在某一个环境中,如将水倒入水缸中,假设水缸的目的水位为1m,即r(t)为一个常量D=1m,

  1. 此时水缸为空,则当前的目的水位为0m,故此时误差e(t)为1m。此时的PID系统只有比例控制算法,故,u(t)=Kp * e(t),假设Kp为0.1,故此时u(t)为0.1m,将0.1m的水倒进水缸中去。
  2. 水缸中有了0.1m的水,此时的误差就为0.9m,故此时需要加入0.09m的水,可以想象,这里就是一个累加的过程,最终终将会将水缸倒满。

在理想状态下,其实有比例控制算法就完全可以满足要求,但是,如果水缸漏水怎么办,如每当你放入0.05m的水,水缸就漏0.05m的水,这就导致最后水缸是永远填不满的,并且水缸水位保持固定,这就导致了这个误差会是一个稳定值,称为稳态误差,也就是这个误差通过PID算法计算出来的u(t)完全没有起到作用。

( 在实际情况中,这种类似水缸漏水的情况往往更加常见,比如控制汽车运动,摩擦阻力就相当于是“漏水”,控制机械臂、无人机的飞行,各类阻力和消耗都可以理解为本例中的“漏水”)

五、积分控制算法(I)

积分控制算法,就是为了消除稳态误差,由于积分是从0时刻一直积分到当前时刻 t,并且是对e(t)函数进行积分。

  1. 在到达节点位置之前,e(t)始终是正的,也就是它的积分始终是大于0的,如果系统存在稳态误差的话,由于误差一直不变,但是积分变呀,积分会一直积下去,之前的稳态误差是中和了比例控制算法的值,现在有一个一直增长的积分,导致每次u(t)的输出也在一直的增大,从而稳态误差就被消除了。到最后,误差为零了,而此时的e(t)也为0了,积分也就固定在某一个值了。从而每次的稳态误差就都可以被消除掉。
  2. 如果到达节点位置之后了,也就是冲过了节点的指定位置,这时候误差就变为了负的,然后由于积分正负可以相减,同样可以很好的适应这种情况。

六、微分控制算法(D)

用了积分控制算法,现在可以消除稳定误差了,但是考虑下面几种情况:

  1. 现在的情况是不存在稳态误差,但是存在积分控制算法,那么问题就出现了,当到达了目的位置后,哪怕误差已经是0了,但是积分控制算法那里还是一个整数,导致下一次输出u(t)仍然为一个整数,而不是0,这样的话,就会越过目的位置,虽然之后误差就变成了负数,又会回落回目的位置,但是这样始终是震荡的,而不是一直稳定下去。
  2. 在初始状态下,如果Kp或者Ki设置的过大,则会导致u(t)的变化幅度过大。

综上,在上述情况下,加入微分控制就很有必要,其实微分控制的作用就是防止幅度过大,导致震荡或者超调,微分就是为了在输出斜率变的太大之前,在系统中引入一个有效的早期修正信号。微分可以防止震荡。

当存在稳态误差的时候,由于微分对于常数的求导是0,故微分不能解决稳态误差的问题。单独使用意义不大,故需要与比例积分共同配合使用,构成PD或PID控制。

七、PID算法公式

PID算法公式如下图所示,Kp作用于所有的项,然后给积分部分再额外配一个系数,给微分项再额外配一个系数。
在这里插入图片描述

Kp —— 比例增益,Kp与比例度成倒数关系;
Tt —— 积分时间常数;
TD —— 微分时间常数;
u(t) —— PID控制器的输出信号;
e(t) —— 给定值 r (t) 与测量值之差。

这样再一看这个PID算法是不是就一目了然了呢。

接下来说一下公式推导。

1. 位置式

由于PID算法原型是连续函数,这样的一个操作在计算机中怕是不太行,所以需要将其离散化。从时刻0开始每隔 △t 时间间隔进行数据采样,则会形成下列一系列时间节点

(e0,e1,e2,e3 … ek)

相应的有

(u0,u1,u2,u3 … uk)

则有积分为离散化累加,微分为与上一时刻节点的连线斜率:
在这里插入图片描述

不过不影响理解,可以看到对于积分部分和微分部分,把 △t 都写成了T,然后把Kp都乘了进去 。然后对于以上的式子,给他们配一个统一的系数,即称积分部分为Ki,微分部分为Kd,则有如下式子:

在这里插入图片描述
这样的话,就清晰很多了,并且离散化的数值有利于计算机实现。

2. 增量式

这时设 △u(k) = u(k) - u(k-1) ,最终得到的增量式PID的离散公式如下:
在这里插入图片描述

八、结语

关于PID算法应该是超级简单的,下面我贴一个视频演示,以及两个我主要参考的博客吧。
在这里插入图片描述

PID控制算法原理(抛弃公式,从本质上真正理解PID控制)
简易PID算法的快速扫盲(超详细+过程推导+C语言程序)

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

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

相关文章

Ubuntu打开文件夹不显示文件

1.情况介绍 使用ubuntu打开文件夹不显示文件夹里面的内容,而是直接打开了资源查看器。 2.解决办法 命令行安装nautilus sudo apt-get install nautilus

java.text.SimpleDateFormat (日期)

前言: 小编最近让流感折磨的快嘎啦, 呜呜呜,拖更了俩天, 从明天开始我们继续日更!!!! 我们一直都是以这样的形式,让新手小白轻松理解复杂晦涩的概念, 把Ja…

游戏市场成果及趋势

2024 年的游戏行业发展情况如何?这是一个既关系到开发商,又关系到玩家的问题,而市场分析师可以为我们揭晓答案。下面,就让我们来看看分析师给出的结论以及他们对未来趋势的预测。 玩家 自 2021 年起,全球平均游戏时间…

Java版-oracle数据库连接测试工具-Maven配置JDBC

一、目标: 1)数据迁移方案,原RAC,新RAC 2)关闭原RAC环境,修改新RAC环境的IP=原RAC环境的IP,优点:所有的应用端不用修改数据库连接字符串。 3)测试工具目标: 3.1 Java程序,运行后cmd窗口, 3.2 链接原RAC数据库IP,每2秒查询并显示数据; 3.3 关闭/断掉原RAC服务器,…

微信小程序实现个人中心页面

文章目录 1. 官方文档教程2. 编写静态页面3. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/ 2. 编写静态页面 mine.wxml布局文件 <!--index.wxml--> <navigation-bar title"个人中心" ba…

数据结构-ArrayLIst-一起探索顺序表的底层实现

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 大家好&#xff0c;我们今天来学习java数据结构的第一章ArrayList&#xff08;顺序表&#xff09; 1.ArrayList的概念 那小伙伴就要问了线性表到…

Unity2017 控制.abc格式的三维动画播放

首先需要导入插件Alembic&#xff0c;否则导入abc动画&#xff0c;Unity是不会识别的。 Unity2017版本及以下直接从我这儿下载&#xff1a;https://download.csdn.net/download/qq_41603955/90272382 高版本Unity&#xff0c;请移步AssetStore商店搜找。 导入abc之后&#x…

docker虚拟机平台未启用问题

在终端中输入如下代码&#xff0c;重启电脑即可 Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform 对于Docker Desktop - Unexpected WSL error问题 参考链接 解决WSL2与docker冲突问题

软件设计大致步骤

由于近期在做软件架构设计&#xff0c;这里总结下大致的设计流程 软件设计流程 1 首先要先写系统架构图&#xff0c;将该功能在整个系统的位置以及和大致的内部模块划分 2 然后写内部的结构图&#xff0c;讲内部的各个子系统&#xff0c;模块&#xff0c;组件之间的关系和调用…

EasyLine(v2.0)自制光谱、曲线处理软件

前言&#xff1a;因为这次更新对软件的整体变动较大&#xff0c;所以就没有取版本v1.1&#xff0c;而是直接使用v2.0版本。然后上一版的讲解也不是很清楚&#xff0c;这次也做重点讲解一下。 自制光谱、曲线处理软件-EasyLine 软件的安装软件的使用总体介绍文件格式处理的使用 …

赛灵思(Xilinx)公司Artix-7系列FPGA

苦难从不值得歌颂&#xff0c;在苦难中萃取的坚韧才值得珍视&#xff1b; 痛苦同样不必美化&#xff0c;从痛苦中开掘出希望才是壮举。 没有人是绝对意义的主角&#xff0c; 但每个人又都是自己生活剧本里的英雄。滑雪&#xff0c;是姿态优雅的“贴地飞行”&#xff0c;也有着成…

晨辉面试抽签和评分管理系统之八:随机编排考生的面试批次(以教师资格考试面试为例)

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

LeetCode热题100(三十四) —— 23.合并K个升序链表

LeetCode热题100&#xff08;三十四&#xff09; —— 23.合并K个升序链表 题目描述代码实现思路一&#xff1a;选择排序(199ms)思路二&#xff1a;归并排序(2ms) 思路解析 你好&#xff0c;我是杨十一&#xff0c;一名热爱健身的程序员在Coding的征程中&#xff0c;不断探索与…

深入理解 ECMAScript 2024 新特性:字符串 isWellFormed 方法

ECMAScript 2024 引入了一个新的字符串实例方法&#xff1a;String.prototype.isWellFormed。这一新增功能是为了帮助开发者更容易地验证字符串是否为有效的 Unicode 文本。本文将详细介绍这一方法的使用场景、实现原理及其在实际应用中的价值。 String.prototype.isWellFormed…

Springboot和Es整合

说明&#xff1a;本文章主要是简单整合和简单增删改查。 1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

阀井可燃气体监测仪,开启地下管网安全新篇章-旭华智能

在城市的脉络中&#xff0c;地下管网犹如隐秘的动脉&#xff0c;支撑着现代生活的运转。而在这庞大网络的关键节点上&#xff0c;阀井扮演着不可或缺的角色。然而&#xff0c;由于其密闭性和复杂性&#xff0c;阀井内部一旦发生可燃气体泄漏&#xff0c;将对公共安全构成严重威…

C#中通道(Channels)的应用之(生产者-消费者模式)

一.生产者-消费者模式概述 生产者-消费者模式是一种经典的设计模式&#xff0c;它将数据的生成&#xff08;生产者&#xff09;和处理&#xff08;消费者&#xff09;分离到不同的模块或线程中。这种模式的核心在于一个共享的缓冲区&#xff0c;生产者将数据放入缓冲区&#x…

4.寻找两个正序数组的中位数--力扣

给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,3], nums2 [2] 输出&#xff1a;2.00000 解释&…

2Spark Core

2Spark Core 1.RDD 详解1) 为什么要有 RDD?2) RDD 是什么?3) RDD 主要属性 2.RDD-API1) RDD 的创建方式2) RDD 的算子分类3) Transformation 转换算子4) Action 动作算子 3. RDD 的持久化/缓存4. RDD 容错机制 Checkpoint5. RDD 依赖关系1) 宽窄依赖2) 为什么要设计宽窄依赖 …

面试题刷题

i 或 i 基础几个9&#xff08;评价系统的指标&#xff09; Arrays.aslist 的bug 方法做了重写 这样就能使用了 list的迭代器 不能使用list.remove方法。需要使用迭代器的remove方法 正确操作 Hashcode hashcode是object对象的方法 是一个native方法 hashcode冲突案例和hashcod…