浅谈 PID 控制算法
PID 控制算法概念
在我们的生活中可能大家都没有听说过 PID 控制算法,但它可以说是无处不在,小到空调的温度控制、无人机的精准悬停、机器人运作系统,大到飞机和火箭的飞行姿态控制都有 PID 的身影。
PID 控制算法,即比例 - 积分 - 微分(Proportional-Integral-Derivative)控制算法,是一种广泛应用于各种自动控制系统中的反馈控制算法。PID 控制器通过计算控制误差的三种成分 —— 比例(P)、积分(I)和微分(D)来调节系统输出,使得系统的输出达到目标值。
PID 控制算法的运行步骤
1 比例控制(P 部分)
这是 PID 中的最简单基本比例控制算法。这个环节产生的分力是: f p = k p × e ( t ) f_p=k_p\times e(t) fp=kp×e(t) 我们就拿水桶倒水来介绍 PID 控制算法。设水位目标高度为 1 1 1,当前水位为 0.2 0.2 0.2 米,那么当前时刻的水位和目标水位之间是存在一个误差的 e ( t ) e(t) e(t),且 e ( t ) = 10 − 2 = 8 e(t)=10-2=8 e(t)=10−2=8 米。如果单纯的用比例控制算法,就是指加入的水位 f p f_p fp 和误差 e ( t ) e(t) e(t) 是成正比的。假设 k p kp kp 取 0.5 0.5 0.5,
那么 t = 1 t=1 t=1 时(表示第 1 1 1 次加水,也就是第 1 1 1 次对系统施加控制),那么 f p = 0.5 × 0.8 = 0.4 f_p=0.5\times 0.8=0.4 fp=0.5×0.8=0.4,所以这一次加入的水量会使水位在 0.2 0.2 0.2 的基础上上升 0.4 0.4 0.4,达到 0.6 0.6 0.6。接着, t = 2 t=2 t=2 时(第 2 2 2 次施加控制),当前水位是 0.6 0.6 0.6,所以 e ( t ) e(t) e(t) 是 0.4 0.4 0.4。 f p = 0.5 × 0.4 = 0.2 f_p=0.5\times 0.4=0.2 fp=0.5×0.4=0.2,会使水位再次上升 0.2 0.2 0.2,达到 0.8 0.8 0.8。如此这么循环下去,就是比例控制算法的运行方法。可以看到,最终水位会达到我们需要的 1 1 1 米。
2 微分控制(D 部分)
从上面我们可以看出来在不断加水的过程中是会产生震荡的,那想要阻止震荡就只能用微分控制了。微分环节也会计算出一个分力,计算方法是: f d = k d × d e ( t ) d t f_d=k_d\times\frac{\mathrm{d}e(t)}{{\rm d}t} fd=kd×dtde(t) 也就是说,这个分力与误差的变化速度有关。假设目标位置不变,水位向上运动时误差减小,即误差变化速度为负,分力向下;反之当水位向下运动时分力向上;综合看来,微分环节产生的分力始终阻碍水位的运动。
因此如果在刚刚的基础上加入微分产生的分力,就会产生一个阻尼效果,水位会仿佛始终受到一个阻力,因此上下摆动的幅度会逐渐减小,最终收敛到目标位置上。
3 积分控制(I 部分)
但现在,我们更希望在水位有一些外部干扰时也能实现上面的效果,比如我们在水桶上有一个洞,这样就要使用积分控制了,它的计算方法是: f i = k i × ∫ e ( t ) d t f_i=k_i\times \int_{}^{} e(t)\, {\rm d}t fi=ki×∫e(t)dt 也就是说积分环节产生的分力正比于误差的积分,当误差持续存在时,这个分力会逐渐变大,试图消除误差。
加入积分作用,我们的 PID 就能完美实现在有恒力干扰的情况下对水位的控制了
公式
经上面分析可得知: u ( t ) = k p × e ( t ) + k d × d e ( t ) d t + k i × ∫ e ( t ) d t u(t)=k_p\times e(t)+k_d\times\frac{\mathrm{d}e(t)}{{\rm d}t}+k_i\times \int_{}^{} e(t)\, {\rm d}t u(t)=kp×e(t)+kd×dtde(t)+ki×∫e(t)dt
PID 控制算法代码实现
#include<bits/stdc++.h>
using namespace std;
double tl=0.0; //目标追踪位置
double nl=0.0; //目标当前位置
float kp,ki,kd;
int main(){double ep=0; //kp误差double ei=0; //ki误差double ed=0; //kd误差double edp=0; //表示e(k-1),上一次的kp误差,用于计算kd误差cout<<"请输入目标追踪值"<<endl;cin>>tl;cout<<"请输入kp"<<endl;cin>>kp;cout<<"请输入ki"<<endl;cin>>ki;cout<<"请输入kd"<<endl;cin>>kd;edp=tl-nl;//整个系统第一次计算kd时、 e(k)-e(k-1)。 while(nl!=tl){ep=tl-nl;ei+=ep;ed=ep-edp;edp=ep;nl+=kp*ep+ki*ei+kd*ed;cout<<"当前位置为:"<<nl<<"当前的误差为"<<tl-nl<<endl;}
}
相关文章:
浅谈 PID 控制算法
PID 控制算法概念 在我们的生活中可能大家都没有听说过 PID 控制算法,但它可以说是无处不在,小到空调的温度控制、无人机的精准悬停、机器人运作系统,大到飞机和火箭的飞行姿态控制都有 PID 的身影。 PID 控制算法,即比例 - 积分…...

ailx10的专栏电子书(2022版)
最近整理了一下自己的知乎专栏,基于myBase和html help workshop做了一本电子书,一共20个章节,接近280M,19块9,有兴趣的同学私信我,记录了从我上学到工作这些年来的心得体会,以及学习历程&#x…...

WPS按双字段拆分工作表到独立工作簿-Excel易用宝
我们老板真是事多,他说要把这个工作表以月份和支付方式的维度,以这两个字段进行拆分工作表,而且拆分出来的表格要保存一个新的工作簿。 啥事都交给我,他还以为我有三头六臂呢,还好我有易用宝,可以轻松拆分…...

C++ Qt练习项目 日期时间数据 未完待续
个人学习笔记 新建项目 设计UI 实现组件功能 参考资料 4.7日期时间数据_哔哩哔哩_bilibili...

vim文本编辑器
vim命令的使用: [rootxxx ~]# touch aa.txt #首先创建一个文件 [rootxxx ~]# vim aa.txt #vim进入文件aa.txt进行编辑 vim是vi的升级版,具有以下三种基本模式: 输入模式(编辑模式) 点击i进入编辑模式 (说明…...
产品经理面试题总结2025【其一】
一、产品理解与定位 1、你如何理解产品经理这个角色? 作为一名互联网产品经理,我理解这个角色的核心在于成为产品愿景的制定者和执行的推动者。具体来说,产品经理是连接市场、用户和技术团队之间的桥梁,负责理解市场需求、用户痛…...

资料03:【TODOS案例】微信小程序开发bilibili
样式 抽象数据类型 页面数据绑定 事件传参...

玉米植物结构受乙烯生物合成基因 ZmACS7 的调控
摘要: 植物高度和叶片角度是玉米(Zea mays)植物结构的两个关键决定因素,与高种植密度下的抗倒伏性和冠层光合作用密切相关。这两个性状主要由几种植物激素调节。然而,乙烯在调节玉米植物结构中的机制,特别…...
C#语言的函数实现
C#语言的函数实现详解 C#是一种功能强大的编程语言,以其易于学习和强大的功能而备受欢迎。在C#中,函数(或称为方法)是构建程序的基本单位,它们可以封装特定的功能和逻辑。本文将详细讲解C#语言中函数的概念、定义、调…...
1.6 从 GPT-1 到 GPT-3.5:一路的风云变幻
从 GPT-1 到 GPT-3.5:一路的风云变幻 人工智能的进步一直是科技领域的一个重要话题,而在自然语言处理(NLP)领域,GPT(Generative Pre-trained Transformer)系列模型的发布,标志着一个又一个技术突破。从2018年发布的 GPT-1 到2022年推出的 GPT-3.5,OpenAI 的每一次更新…...
TypeScript - 利用GPT辅助学习
TypeScript 一、基础1. 安装 TypeScript2. 创建你的第一个 TypeScript 文件3. 编译 TypeScript 代码4. 变量声明与类型注解5. 函数与类型注解6. 总结 二、进阶常用类型1. 类型别名2. 对象类型3. 类型断言4.typeof 操作符 高级类型1. 类2. 交叉类型3. 泛型与 keyof4. 索引签名类…...
VMware虚拟机迁移到阿里云
VMware虚拟机迁移到阿里云是一个涉及多个步骤的过程,具体如下: 使用阿里云的服务器迁移中心(SMC)进行P2V或V2V迁移。如果是小型应用,可以通过制作镜像文件然后上传至阿里云OSS,并基于该镜像创建ECS实例。对…...

【STM32-学习笔记-15-】MAX7219点阵屏模块
文章目录 MAX7219点阵模块一、MAX7219Ⅰ、 概述Ⅱ、功能特点Ⅲ、引脚功能Ⅳ、典型应用电路Ⅴ、内部组成结构Ⅵ、时序图Ⅶ、寄存器 二、STM32控制点阵屏Ⅰ、程序框图Ⅱ、程序编写①、MAX7219.c②、MAX7219.h③、MAX7219_Img.h④、main.c MAX7219点阵模块 一、MAX7219 Ⅰ、 概述…...

高并发内存池_CentralCache(中心缓存)和PageCache(页缓存)申请内存的设计
三、CentralCache(中心缓存)_内存设计 (一)Span的创建 // 页编号类型,32位下是4byte类型,64位下是8byte类型 // #ifdef _WIN64 typedef unsigned long long PageID; #else _WIN32 typedef size_t PageI…...

elementUI Table组件实现表头吸顶效果
需求描述 当 table 内容过多的时候,页面上滑滚动,表头的信息也会随着被遮挡,无法将表头信息和表格内容对应起来,需要进行表头吸顶 开始编码💪 环境:vue2.6、element UI step1: 给el-table__h…...
语言模型的价值定位与技术突破:从信息处理到创新认知
标题:语言模型的价值定位与技术突破:从信息处理到创新认知 文章信息摘要: 当前语言模型的核心价值主要体现在信息综合与处理能力上,用户友好的交互界面是其成功关键。在模型计算机制方面,推理能力的实现包括chain-of-…...

微信小程序使用上拉加载onReachBottom。页面拖不动。一直无法触发上拉的事件。
1,可能是原因是你使用了scroll-view的标签,用onReachBottom触发加载事件。这两个是有冲突的。没办法一起使用。如果页面的样式是滚动的是无法去触发页面的onReachBottom的函数的。因此,你使用overflow:auto.来使用页面的某些元素滚动…...

Spring Boot 快速创建项目
目录 一. 创建项目 编辑 二. 项目目录 三. 运行项目 (1) 启动项目 (2) 输出HelloWorld 一. 创建项目 我们以idea专业版为例创建Spring项目: 步骤: (1) File --> New --> Project (2) 配置项目基本信息 (3) 依赖: 需要什么就勾选什么. 我们这里就只勾选一个Spri…...
kafka学习笔记5 PLAIN认证——筑梦之路
在Kafka中,SASL(Simple Authentication and Security Layer)机制包括三种常见的身份验证方式: SASL/PLAIN认证:含义是简单身份验证和授权层应用程序接口,PLAIN认证是其中一种最简单的用户名、密码认证方式&…...
直驱式风电储能制氢仿真模型matlab/simulink
接着还是以直驱式风电为DG中的研究对象,上篇博客考虑的风电并网惯性的问题,这边博客主要讨论功率消纳的问题。 考虑到风速是随机变化的,导致风电输出功率的波动性和间歇性问题突出;随着其应用规模的不断扩大以及风电在电网中渗透率…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...