最新要闻
- 世界热资讯!小米史上最强!雷军确认小米13 Pro支持Wi-Fi 7:国内认证后开放
- 快报:高帧畅玩《巫师3》!满血3060游戏本华硕天选3双旦入手7599 性价比超高
- 天天热头条丨豆瓣评分跌至6.3!《三体》动画播放量破2亿
- 东西生锈了是什么原因?东西生锈了怎么去除?
- cbz是什么文件格式?cbz文件格式怎么打开?
- 大喜之日是什么意思?大喜之日祝福语
- 碳化硅是什么材料?碳化硅的用途有哪些?
- 越南十二生肖是哪些动物?越南十二生肖和中国的区别
- newjeans为什么叫吴晓梅?newjeans女团成员个人资料
- 省略号的快捷键是什么?省略号的快捷输入方式
- 皮卡全面解禁再下一城!广西南宁:明年起进城无需办通行证
- 登陆火星4年电量即将耗尽:探测器洞察号发文告别
- 【新要闻】中国汽车流通协会:建议全面取消汽车限购 买车可抵税
- 热头条丨Redmi K20 Pro钉子户三年多不换机:就等卢伟冰发K60
- 最强性能旗舰!一加11配置公布:二代骁龙8、直接12GB+256GB起步
- 速读:QQ音乐iOS版12.0版发布:新增“臻品母带” 无损音质升级
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界消息!(笔记)PID算法讲解
PID算法资料很多,质量高低不一,但若想把PID研究透,还是需要仔细甄别与筛选。本文根据网上一些较好的文章及个人理解,整理成文,也是给自己做了笔记。
在此感谢: https://zhuanlan.zhihu.com/p/168751613
1 前言
控制系统通常根据有没有反馈会分为开环系统和闭环系统,在闭环系统的控制中,PID
算法非常强大,其三个部分分别为;
(资料图片)
P
:比例环节;I
:积分环节;D
:微分环节;
PID
算法可以自动对控制系统进行准确且迅速的校正,因此被广泛地应用于工业控制系统。
2 开环控制
首先来看开环控制系统,如下图所示,隆哥蒙着眼,需要走到虚线旗帜所表示的目标位置,由于缺少反馈(眼睛可以感知当前距离和位置,由于眼睛被蒙上没有反馈,所以这也是一个开环系统),最终隆哥会较大概率偏离预期的目标,可能会运行到途中实线旗帜所表示的位置。
开环系统的整体结构如下所示;
这里做一个不是很恰当的比喻;
Input
: 告诉隆哥目标距离的直线位置(10米);Controller
:隆哥大脑中计算出到达目标所需要走多少步;Process
: 双腿作为执行机构,输出了相应的步数,但是最终仍然偏离了目标;
看来没有反馈的存在,很难准确到达目标位置。
3 闭环控制
所以为了准确到达目标位置,这里就需要引入反馈,具体如下图所示;
在这里继续举个不怎么恰当的比喻;隆哥重获光明之后,基本可以看到目标位置了;
- 第一步
Input
: 告诉隆哥目标距离的直线位置(10米); - 第二步
Controller
:隆哥大脑中计算出到达目标所需要走多少步; - 第三步
Process
: 双腿作为执行机构,输出了相应的步数,但是最终仍然偏离了目标; - 第四步
Feedback
: 通过视觉获取到目前已经前进的距离,(比如前进了2米,那么还有8米的偏差); - 第五步
err
: 根据偏差重新计算所需要的步数,然后重复上述四个步骤,最终隆哥达到最终的目标位置。
4 PID
4.1 系统架构
虽然在反馈系统下,隆哥最终到达目标位置,但是现在又来了新的任务,就是又快又准地到达目标位置。所以这里隆哥开始采用PID Controller
,只要适当调整P
,I
和D
的参数,就可以到达目标位置,具体如下图所示;
隆哥为了最短时间内到达目标位置,进行了不断的尝试,分别出现了以下几种情况;
- 跑得太快,最终导致冲过了目标位置还得往回跑;
- 跑得太慢,最终导致到达目标位置所用时间太长;
经过不断的尝试,终于找到了最佳的方式,其过程大概如下图所示;
这里依然举一个不是很恰当的比喻;
- 第一步:得到与目标位置的距离偏差(比如最开始是10米,后面会逐渐变小);
- 第二步:根据误差,预估需要多少速度,如何估算呢,看下面几步;
P
比例则是给定一个速度的大致范围,满足下面这个公式;
因此比例作用相当于某一时刻的偏差(err
)与比例系数
绿色线为上述例子中从初始位置到目标位置的距离变化;红色线为上述例子中从初始位置到目标位置的偏差变化,两者为互补的关系;
I
积分则是误差在一定时间内的和,满足以下公式;
如下图所示;
红色曲线阴影部分面积即为积分作用的结果,其不断累积的误差,最终乘以积分系数
D
微分则是误差变化曲线某处的导数,或者说是某一点的斜率,因此这里需要引入微分;
从图中可知,当偏差变化过快,微分环节会输出较大的负数,作为抑制输出继续上升,从而抑制过冲。
综上,
4.2 理论基础
上面讲了这么多,无非是为了初步理解PID
在负反馈系统中的调节作用,下面开始推导一下算法实现的具体过程;PID
控制器的系统框图如下所示;
因此不难得出输入
">Kp是比例增益; K p ">Ki是积分增益; K i ">Kd是微分增益; K d
4.3 离散化
在数字系统中进行PID算法控制,需要对上述算法进行离散化;假设系统采样时间为
4.4 伪算法
这里简单总结一下位置式PID实现的伪算法;
previous_error := 0 //上一次偏差integral := 0 //积分和//循环 //采样周期为dtloop: //setpoint 设定值 //measured_value 反馈值 error := setpoint − measured_value //计算得到偏差 integral := integral + error × dt //计算得到积分累加和 derivative := (error − previous_error) / dt //计算得到微分 output := Kp × error + Ki × integral + Kd × derivative //计算得到PID输出 previous_error := error //保存当前偏差为下一次采样时所需要的历史偏差 wait(dt) //等待下一次采用 goto loop
对于dt时间而言,通常可简单地将其置为单位时间1,此时公式就更简化了。
5 C++实现
这里是位置式PID算法的C语言实现;
pid.cpp
#ifndef _PID_SOURCE_#define _PID_SOURCE_#include#include #include "pid.h"using namespace std;class PIDImpl{ public: PIDImpl( double dt, double max, double min, double Kp, double Kd, double Ki ); ~PIDImpl(); double calculate( double setpoint, double pv ); private: double _dt; double _max; double _min; double _Kp; double _Kd; double _Ki; double _pre_error; double _integral;};PID::PID( double dt, double max, double min, double Kp, double Kd, double Ki ){ pimpl = new PIDImpl(dt,max,min,Kp,Kd,Ki);}double PID::calculate( double setpoint, double pv ){ return pimpl->calculate(setpoint,pv);}PID::~PID() { delete pimpl;}/** * Implementation */PIDImpl::PIDImpl( double dt, double max, double min, double Kp, double Kd, double Ki ) : _dt(dt), _max(max), _min(min), _Kp(Kp), _Kd(Kd), _Ki(Ki), _pre_error(0), _integral(0){}double PIDImpl::calculate( double setpoint, double pv ){ // Calculate error double error = setpoint - pv; // Proportional term double Pout = _Kp * error; // Integral term _integral += error * _dt; double Iout = _Ki * _integral; // Derivative term double derivative = (error - _pre_error) / _dt; double Dout = _Kd * derivative; // Calculate total output double output = Pout + Iout + Dout; // Restrict to max/min if( output > _max ) output = _max; else if( output < _min ) output = _min; // Save error to previous error _pre_error = error; return output;}PIDImpl::~PIDImpl(){}#endif
pid.h
#ifndef _PID_H_#define _PID_H_class PIDImpl;class PID{ public: // Kp - proportional gain // Ki - Integral gain // Kd - derivative gain // dt - loop interval time // max - maximum value of manipulated variable // min - minimum value of manipulated variable PID( double dt, double max, double min, double Kp, double Kd, double Ki ); // Returns the manipulated variable given a setpoint and current process value double calculate( double setpoint, double pv ); ~PID(); private: PIDImpl *pimpl;};#endif
pid_example.cpp
#include "pid.h"#includeint main() { PID pid = PID(0.1, 100, -100, 0.1, 0.01, 0.5); double val = 20; for (int i = 0; i < 100; i++) { double inc = pid.calculate(0, val); printf("val:% 7.3f inc:% 7.3f\n", val, inc); val += inc; } return 0;}
编译并测试;
g++ -c pid.cpp -o pid.o# To compile example code:g++ pid_example.cpp pid.o -o pid_example
-
一、【Java】多线程与高并发
一、启动多线程的三种方式1、继承Thread接口类实现run()方法staticclassMyThredextendsThread{@Overridepublicvoidr
来源: 世界消息!(笔记)PID算法讲解
低代码:让企业“活”起来,赋能企业数字转型
今日要闻!大四上 | 计算机综合课设答辩经验帖
一、【Java】多线程与高并发
世界热资讯!小米史上最强!雷军确认小米13 Pro支持Wi-Fi 7:国内认证后开放
全球最资讯丨今天突然发现谷歌翻译用不了,发现是谷歌域名解析问题,现提供以下方法解决
快报:高帧畅玩《巫师3》!满血3060游戏本华硕天选3双旦入手7599 性价比超高
天天热头条丨豆瓣评分跌至6.3!《三体》动画播放量破2亿
东西生锈了是什么原因?东西生锈了怎么去除?
cbz是什么文件格式?cbz文件格式怎么打开?
快讯:创元集团的数智化实践 这次选择了和火山引擎 VeDI 搭档
大喜之日是什么意思?大喜之日祝福语
碳化硅是什么材料?碳化硅的用途有哪些?
越南十二生肖是哪些动物?越南十二生肖和中国的区别
newjeans为什么叫吴晓梅?newjeans女团成员个人资料
省略号的快捷键是什么?省略号的快捷输入方式
皮卡全面解禁再下一城!广西南宁:明年起进城无需办通行证
登陆火星4年电量即将耗尽:探测器洞察号发文告别
【新要闻】中国汽车流通协会:建议全面取消汽车限购 买车可抵税
世界百事通!如何在Word表格中拆分或合并单元格?
当前速讯:Kubernetes监控手册02-宿主监控概述
【全球新要闻】STM32 SPI DMA 源码解析及总结
全球快看点丨MySQL-带你上官网看索引
天天简讯:图算法、图数据库在风控场景的应用
热头条丨Redmi K20 Pro钉子户三年多不换机:就等卢伟冰发K60
最强性能旗舰!一加11配置公布:二代骁龙8、直接12GB+256GB起步
速读:QQ音乐iOS版12.0版发布:新增“臻品母带” 无损音质升级
“灵魂”没了!育碧确认《刺客信条:英灵殿》Steam版将无成就系统
天天观速讯丨美版《西游记》剧照公布:吴彦祖悟空、杨紫琼观音亮相
赛尔号动画片的结局是什么?赛尔号动画片精灵实力排名
流浪地球小说结局是什么?流浪地球小说经典语录
二极管如何判断正负极?二极管工作原理
世界快消息!Visual Studio Code 安装教程
Redis集群的三种方式详解(附优缺点及原理区别)
全球即时:echarts设置单位的偏移
每日速看!网约车司机一路刷抖音吓坏女乘客 司机:投诉去吧 无所谓的
天天快资讯:因收购动视暴雪 微软被美国十名玩家集体诉讼
天天视讯!气场百万 比亚迪仰望高端越野车预告:L形尾灯头次见
【独家】OPPO部分旗舰能升级到Android 17:国产手机独此一家
TCP套接字
全球即时:认证管理(锐捷无线篇)
热资讯!基于 Dubbo-Admin 实现根据请求条件路由
最新快讯!教你用Java实现动态调色板
4090也秒怂!东北网友晒NV RTX 3070显卡温度:这效果我服!
大众ID.Xtreme概念车曝光:旗下最野性的电动车
当前快讯:员工漏打卡11次被辞 法院判决:公司赔大发了
“兔圆圆”!2023年总台春晚标识和吉祥物官宣 附春晚节目单
每日速讯:网易MOBA游戏《无尽战区》宣布复活!曾于两年前停运
世界快看点丨Spring Cloud 2022 正式发布!我的天,OpenFeign 要退出历史舞台了?!
焦点快播:君子不玩物丧志,亦常以借物调心,网站集成二次元网页小组件(widget)石蒜模拟器,聊以赏玩
天天播报:让人诧异!浙江台州天上突然飘落大量羽毛:宛如鹅毛大雪
环球热文:美国动物园将归还大熊猫丫丫和乐乐 结束20年租期:曾被质疑虐待国宝
除了蔚来:大多数车企都给黑客赎金了
全球看热讯:韩国刷新世界最低生育率纪录 上学人减半:日本欧洲更慌了
天天速看:性能超RX7900 XTX!RTX 4070/4070 Ti确定:这售价给老黄买单?
焦点速读:世界最慢的PC诞生 单核跑分不到13900K的百分之一
跟着TDP配电源怎么就蓝屏了?原因揭开
环球新消息丨vue-router
每日速讯:i9-13900K史上第一次超到9GHz!液氦、零下250度
今日快讯:核显笔记本也能跑50帧夜之城!AMD这次干的好啊
环球最资讯丨RTX 40笔记本显卡全线泄露:第一次xx90、功耗达175W
【世界快播报】Intel官方“意外”走光6GHz i9-13900KS:基础功耗150W
60万粉丝女网红偷平价睡衣被抓:真相大跌眼镜
全球时讯:《泰坦尼克号》的世纪疑问 卡梅隆终于解答了:杰克和露丝没法一块活下来
2023年北美最受期待的10大电影来了
当前焦点!FreeSWITCH学习笔记:日志
每日聚焦:官方公布长征九号重型火箭!运力150吨、2030年左右首飞
【环球快播报】太阳的“脾气”突然变了!日益活跃起来:科学家们感到紧张
每日看点!央视科普:黄河源头是巴掌大的小泉眼!反差感十足
天天快播:普通人或者门外汉该怎样入门编程?
洛谷 P5401 [CTS 2019] 珍珠 题解
红魔8 Pro拥有最震撼屏占比:边框比iPhone 14 Pro更窄
世界首富也扛不住!特斯拉被曝暂停招聘 下季度新一波裁员
真卖不动了 2022年全球电视出货量仅2.02亿台:创十年新低
当前要闻:12306出现北京直达香港高铁 网友火速围观:官方客服回应
热推荐:北京多地下雪你看到没?62条公交线路临时有变
关注:充电式加热羽绒服突然火了 又一“韭菜收割机”问世?
全球观热点:一日痛失两位院士!稀土冶金专家张国成、激光技术专家赵伊君逝世
快播:只有《流浪地球2》才适合中国观众?《阿凡达2》全球票房一览:国人贡献第二
每日短讯:不止LCD 大尺寸OLED面板也跌了
今日热文:很多人非常关心Redmi K60 卢伟冰:我再打磨会
每日讯息!今日内容 docker-compose部署项目
【热闻】《三体》《流浪地球》后 刘慈欣另三部科幻著作影视化立项
女童拿氢气球烤火突发爆燃 消防试验爆燃威力
腾讯新专利发布:人脸识别安全性稳了
化身“充电刺客”也难掩颓势!共享充电宝第一股怪兽充电一年亏损超4个亿
每日头条!20款前端特效及部分代码
别再浪费钱 这三款买完就吃灰的数码产品要避开
环球通讯!十二天线旗舰猛兽!小米万兆路由图赏
即时:数据被窃遭“天价”勒索!蔚来卢龙:不影响车辆驾乘
全球资讯:网红撒盐哥硬拉梅西合照遭网暴 网友吐槽:不礼貌、纯蹭热度
【焦点热闻】罗永浩:我很高兴得到了“亡命徒”的评价
环球速递!.NET Core如何通过认证机制访问Kafka?
今日看点:正则表达式?!的理解
环球滚动:配置Git客户端上传代码至Gitlab仓库
5-38℃智能温控:美菱踢脚线取暖器79元起大促
世界球精选!10999元!女子苹果店新买iPad无法充电后换机:更杯具了 竟无法开机
天天快资讯:离谱!我花1万多买MacBook Pro 居然送来了这种东西
暴涨300%以上!P社宣布上调阿根廷等区域游戏价格
全球焦点!你的城市在列吗?2022中国最具幸福感10大城市出炉:第一成都14连冠