PID(二)P、I、D三个参数的感性认识(小白入门)

2023-11-10 03:40

本文主要是介绍PID(二)P、I、D三个参数的感性认识(小白入门),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PID(二)P、I、D三个参数的感性认识(小白入门)

上一篇从PID整体是干啥的,整体的层面感性的分析了一下,考虑到P、I、D三个参数对大部分入

门的人也是挺不和谐的,这篇就应粉丝的留言要求,从三个参数各自的角度巴拉巴拉。

PID结构图
在这里插入图片描述
PID公式
在这里插入图片描述

O、引入场景

故事是这么着的,很久以前我是一年级的时候,看到一只乌鸦正在往瓶子里衔石子,一看就想要喝水。乌鸦衔了一会,停下来了,绕着瓶子再看,似有思考的痕迹。我也在想,乌鸦想啥呢。后来我想到了。

一、P 比例算法

首先,瓶子里的水高0.2,加石子,等液面上升到离瓶口a的时候,乌鸦可以喝到水,且a较小(下文为方便称此液面为瓶口)。我们假设距瓶口为a的液面高度为1.0,故事开始了 。

一开始,水面离瓶口误差为err=0.8,乌鸦衔石头的大小与err成正比,故大小u=kperr,我们尝试着取kp=0.5,那么
第一次:u=0.5
0.8=0.4,液面达到0.6的位置;
第二次:u=0.5*0.4=0.2,液面达到0.8的位置;
……
第N次:液面会相当接近1.0,乌鸦就可以喝到水。

这边会有一个小小的误差,而且随着次数的增加还在减小,我们叫它暂态误差,只要次数足够多,就可以足够小,小到无伤大雅。

这就是P的作用,我们把液面图连续的画出来就是这样在这里插入图片描述
假如没有P,我们看到在这里插入图片描述
石子的大小是相等的,没有调整,最后可能超过目标值。

二、 I 积分算法

上面只是乌鸦想的,等它衔了两块后,发现,石头之间会有空隙,不会排出水量。哦,乌鸦太难了。
鉴于此,我们简化一下,假设每丢一个石子会占掉0.1的水,这个水在空隙中就排不出来了。

还用上面的方法算
第一次:u=0.50.8=0.4-0.1=0.3,液面到达0.5的位置;
第二次:u=0.5
0.5=0.25-0.1=0.15,液面到达0.65的位置;
……
第N次:液面到了0.8的位置;
第N+1次:u=0.5*0.2=0.1-0.1=0,就是说我们不用加石子了,但液面只能到0.8的位置。

这是什么原因?

我们看到,这个时候液面已经稳定了,我们叫这个误差为稳定误差。

这个误差挺大的,我们想个办法解决一下。

I 算法 u=kperr+ki(对err积分)

我们取ki=0.5
第N+1次:u=0.50.2+0.50.2=0.2-0.1=0.1,液面达到0.9;(忽略前面的误差,从这次开始对误差进行积分,足以说明问题)
第N+2次:u=0.50.1+0.5(0.2+0.1)=0.25-0.1=0.15,液面达到1.05;
第N+3次:u=0.5*(-0.05)+0.5*(0.2+0.1+(-0.05))=0.1-0.1=0,液面刚好达到1.05;
第N+4次:u=0.5*(-0.05)+0.5*(0.2+0.1+(-0.05)+(-0.05))=0.075-0.1=-0.025,液面达到1.025;
第N+N次:液面一直在瓶口附近震荡,震荡越来越小。

我们看到,又经过N次的操作,水面最终从0.8到达瓶口附近很小的范围内 ,这是积分算法对比例算法的补充;
但这中间会出现震荡,就是液面会在瓶口附近波动,这是积分算法带来的问题。

三、D 微分算法

添加了积分的乌鸦已经能够把液面弄到1.0附近的地方,但中间出现了一个问题,在第N+2次加石子后,水撒了出来,那么乌鸦能够喝的水就少了。它是一只倔强的乌鸦,怎能允许这样的事发生,奥里给,解决它。

蛋黄的长裙,蓬松的头发,呦,我就是你身边最美的乌鸦。

加入微分项
u=kperr+ki(对err积分)+kd*(对err微分)

我们取kd=0.5

第N+1次:u=0.50.2+0.50.2+0.5*(0.2/1)=0.3-0.1=0.2,液面刚好达到1.0;
第N+2次:u=0.50 +0.5(0.2+0)+0.5*(0/1)=0.1-0.1=0,液面稳定在1.0.
第N+3次:u=0.50 +0.5(0.2+0+0)+0.5*(0/1)=0.1-0.1=0,液面稳定不动。

说实话,这个例子相当巧合,带入太完美了
但完全不妨碍说明问题

我们可以看到,加入微分项的乌鸦,准确无误的将液面控制在瓶口,有效的解决了积分项带来的震荡。(参数取得好,就是这么骚<_<)

##凌晨1点了,明早6点老爹又该叫着跑步了,太难了,想开学呐,超级超级想呐/哭唧唧

这篇的算式有点多,但都是相当简单的,微分、积分都用离散 我错了,都用简单的式子代替了,后面会再写一篇从工程角度分析的文章,还请大佬指正呐/抱拳/抱拳

这篇关于PID(二)P、I、D三个参数的感性认识(小白入门)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/380210

相关文章

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

SpringBoot利用@Validated注解优雅实现参数校验

《SpringBoot利用@Validated注解优雅实现参数校验》在开发Web应用时,用户输入的合法性校验是保障系统稳定性的基础,​SpringBoot的@Validated注解提供了一种更优雅的解... 目录​一、为什么需要参数校验二、Validated 的核心用法​1. 基础校验2. php分组校验3

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

基于@RequestParam注解之Spring MVC参数绑定的利器

《基于@RequestParam注解之SpringMVC参数绑定的利器》:本文主要介绍基于@RequestParam注解之SpringMVC参数绑定的利器,具有很好的参考价值,希望对大家有所帮助... 目录@RequestParam注解:Spring MVC参数绑定的利器什么是@RequestParam?@

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在