我,不是说了PID要平均值吗?
前几日写了一篇PID算法学习笔记,并幻想了一个场景进行算法仿真。经过不断探索后,博主发现,PID算法的精髓不在算法逻辑,而在于PID三个参数的值。本篇随笔将延续上次的仿真实验进行调试,总结PID调参的规律和方法。

一、调参口诀
先看看百度找到的调参口诀。
参数整定找最佳, 从小到大顺序查。①
先是比例后积分, 最后再把微分加。②
曲线振荡很频繁, 比例度盘要放大。③
曲线漂浮绕大弯, 比例度盘往小扳。④
曲线偏离回复慢, 积分时间往下降。⑤
曲线波动周期长, 积分时间再加长。⑥
曲线振荡频率快, 先把微分降下来。⑦
动差大来波动慢, 微分时间应加长。⑧
理想曲线两个波, 前高后低四比一。⑨
一看二调多分析, 调节质量不会低。⑩

二、调参实战
口诀①,从小到大。根据${PID}$公式可知,积分常数${I}$越大,对输出值影响越小,而比例常数和微分常数越大,对输出值影响越大。
因此,以${(P,I,D)=(5,500,0)}$为初始值,其仿真曲线为

口诀②,先比例。先调节${P}$,分别为5,25,50。

如上图,比例系数越大,曲线越快接近设定值,${P}$为50时,效果最佳。
后积分。后调${I}$,分别为50, 5, 0.5

如上图,积分常数P越小,曲线越快达到设定值。当${P}$为0.5时效果最佳
再微分。再调${D}$,分别为0.005, 0.05, 0.5

如上图,${D}$值变大,曲线并没有明显变化。通过上面几次调节,暂时得到一组较优的PID值,为
${PID_{s}=(50,500,0)}$
进一步研究,以该值为基准,改变其中的值。
(1)改变P值,改变为500,发现曲线很快超出了设定值,但是如果不考虑稳定性的话,该曲线能更快接近设定值。

(2)改变I值,改变为0.02,发现曲线也会很快超出设定值,后缓慢抖动接近设定值,抖动频率小于曲线(1),根据口诀⑨,这样的曲线可以称作“理想曲线”

(3)改变${D}$值,改变为0.0.75,曲线剧烈抖动。根据口诀⑦可知,积分系数过大,需要减小。


三、总结
我的数学模型存在很多缺陷,并不能完全模仿真实环境。进行简单的调参后可以发现,P系数调节可能出现“一劳永逸”的情况。而I调节可以减弱P的某些过激行为,比如剧烈抖动变为缓慢震荡,D调节则增强这种行为。本实验中,D系数的作用并不明显,还应在以后的实验中多多观察。
最后,如果调成平均值会发生什么呢?

看,它是不是变得非常强大了……
我,不是说了我不是标题党吗?

我,不是说了PID要平均值吗?的更多相关文章
- HDU 2376 树形dp|树上任意两点距离和的平均值
原题:http://acm.hdu.edu.cn/showproblem.php?pid=2376 经典问题,求的是树上任意两点和的平均值. 这里我们不能枚举点,这样n^2的复杂度.我们可以枚举每一条 ...
- 记录一个多核CPU负载不均衡问题(动态绑定进程到指定cpu:taskset -pc $CPU $PID)
昨晚和一位读者朋友讨论了一个问题:在一台多核 CPU 的 Web 服务器上,存在负载不均衡问题,其中 CPU0 的负载明显高于其它 CPUx,进一步调查表明 PHP-FPM 的嫌疑很大.话说以前我曾经 ...
- 漫谈PID——实现与调参
闲话: 作为一个控制专业的学生,说起PID,真是让我又爱又恨.甚至有时候会觉得我可能这辈子都学不会pid了,但是经过一段时间的反复琢磨,pid也不是很复杂.所以在看懂pid的基础上,写下这篇文章,方便 ...
- SIMATIC PID温度控制
SIMATIC PID温度控制 // VAR_INPUT ------------------------------------------------------------------- #if ...
- 移动端测试===PROC系列之---/proc/pid/stat 如何准确取cpu的值【转】
/proc/ /stat 包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻. [root@localhost ~]# cat /proc/6873/stat 68 ...
- 自整定模糊PID算法的理论
模糊控制系统的构成与与常规的反馈控制系统的主要区别在于控制器主要是由模糊化,模糊推理机和精确化三个功能模块和知识库(包括数据库和规则库)构成的.具体实现过程如下所示: (1)预处理: 输入数据往往是通 ...
- PID控制算法的C语言实现
参考: PID控制器开发笔 浅谈位置式PID 专家PID控制在快速系统中的仿真及应用(这篇了论文介绍的积分分离PID.专家PID(脚本实现和simulink实现)很详细) PID控制算法的C语言实现一 ...
- C语言 · 整数平均值
编写函数,求包含n个元素的整数数组中元素的平均值.要求在函数内部使用指针操纵数组元素,其中n个整数从键盘输入,输出为其平均值. 样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以 ...
- 80 端口被占用 pid=4
80端口被pid=4的系统进程给占用的解决方法: 一般开发的时候我们都会安装sqlserver ,也会把Sql server Reporting Services 安装上去.原因就是这个服务占用了80 ...
随机推荐
- python 异步Web框架sanic
我们继续学习Python异步编程,这里将介绍异步Web框架sanic,为什么不是tornado?从框架的易用性来说,Flask要远远比tornado简单,可惜flask不支持异步,而sanic就是类似 ...
- ES6中对数值的扩展
上一节和大家学习了字符串的扩展,这一节轮到了数值,我们一起来学习数值的扩展. 剧透一下,这一节并不会很烧脑,都是介绍类的知识讲解,理解性的东西不多,初学者们也可以愉快地看完. 传统的写法 在介绍数值的 ...
- UDO、TCP、HTTP、websocket
如图:
- thinkphp5 不使用form,用input+ajax异步上传图片
不支持$this->request->file()获取图片 后台接收文件请使用$_FILE 正文开始: HTML <div class="upload"> ...
- [Inno Setup] 字符串列表,当要处理一长串文件时很有用
https://wiki.freepascal.org/TStringList-TStrings_Tutorial TStringList-TStrings Tutorial │ Deutsch (d ...
- vue项目中使用bpmn-为节点添加颜色
内容概述 本系列 “vue项目中使用bpmn-xxxx” 分为五篇,均为自己使用过程中用到的实例,手工原创,目前属于陆续更新中.主要包括vue项目中bpmn使用实例.应用技巧.基本知识点总结和需要注意 ...
- java中CyclicBarrier的使用
文章目录 CyclicBarrier的方法 CyclicBarrier的使用 java中CyclicBarrier的使用 CyclicBarrier是java 5中引入的线程安全的组件.它有一个bar ...
- POJ1077 八数码问题
题目:八数码 网址:http://poj.org/problem?id=1077 在一个3×3的网格中,1~8这8个数字和一个"X"恰好不重不漏地分布在这3×3的网格中. 例如: ...
- nodejs中httpserver的安装和使用
首先来看一下官方的介绍: 大概意思是说:命令行HTTP服务器工具,用于提供本地文件,类似于python -mSimpleHTTPServe. 直白点的意思就是通过命令行启动的一个http服务器工具,它 ...
- 小老板,我学的计算机组成原理告诉我半导体存储器都是断电后丢失的,为什么U盘SSD(固态硬盘)没事呢?
什么是闪存: 快闪存储器(英语:flash memory),是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器 存储原理 要讲解闪存的存储原理,还是要从EPROM和EEPROM ...