前几日写了一篇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要平均值吗?的更多相关文章

  1. HDU 2376 树形dp|树上任意两点距离和的平均值

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=2376 经典问题,求的是树上任意两点和的平均值. 这里我们不能枚举点,这样n^2的复杂度.我们可以枚举每一条 ...

  2. 记录一个多核CPU负载不均衡问题(动态绑定进程到指定cpu:taskset -pc $CPU $PID)

    昨晚和一位读者朋友讨论了一个问题:在一台多核 CPU 的 Web 服务器上,存在负载不均衡问题,其中 CPU0 的负载明显高于其它 CPUx,进一步调查表明 PHP-FPM 的嫌疑很大.话说以前我曾经 ...

  3. 漫谈PID——实现与调参

    闲话: 作为一个控制专业的学生,说起PID,真是让我又爱又恨.甚至有时候会觉得我可能这辈子都学不会pid了,但是经过一段时间的反复琢磨,pid也不是很复杂.所以在看懂pid的基础上,写下这篇文章,方便 ...

  4. SIMATIC PID温度控制

    SIMATIC PID温度控制 // VAR_INPUT ------------------------------------------------------------------- #if ...

  5. 移动端测试===PROC系列之---/proc/pid/stat 如何准确取cpu的值【转】

         /proc/ /stat 包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻. [root@localhost ~]# cat /proc/6873/stat 68 ...

  6. 自整定模糊PID算法的理论

    模糊控制系统的构成与与常规的反馈控制系统的主要区别在于控制器主要是由模糊化,模糊推理机和精确化三个功能模块和知识库(包括数据库和规则库)构成的.具体实现过程如下所示: (1)预处理: 输入数据往往是通 ...

  7. PID控制算法的C语言实现

    参考: PID控制器开发笔 浅谈位置式PID 专家PID控制在快速系统中的仿真及应用(这篇了论文介绍的积分分离PID.专家PID(脚本实现和simulink实现)很详细) PID控制算法的C语言实现一 ...

  8. C语言 · 整数平均值

    编写函数,求包含n个元素的整数数组中元素的平均值.要求在函数内部使用指针操纵数组元素,其中n个整数从键盘输入,输出为其平均值. 样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以 ...

  9. 80 端口被占用 pid=4

    80端口被pid=4的系统进程给占用的解决方法: 一般开发的时候我们都会安装sqlserver ,也会把Sql server Reporting Services 安装上去.原因就是这个服务占用了80 ...

随机推荐

  1. Java 解析 xml 常见的4中方式:DOM SAX JDOM DOM4J

    Java 四种解析 XML 的特点 1.DOM 解析: 形成了树结构,有助于更好的理解.掌握,且代码容易编写. 解析过程中,树结构保存在内存中,方便修改. 2.SAX 解析: 采用事件驱动模式,对内存 ...

  2. 使用openmp进行并行编程

    预处理指令pragma 在系统中加入预处理器指令一般是用来允许不是基本c语言规范部分的行为.不支持pragma的编译器会忽略pragma指令提示的那些语句,这样就允许使用pragma的程序在不支持它们 ...

  3. 在项目中部署redis的读写分离架构(包含节点间认证口令)

    #### 在项目中部署redis的读写分离架构(包含节点间认证口令) ##### 1.配置过程 ---  1.此前就是已经将redis在系统中已经安装好了,redis utils目录下,有个redis ...

  4. 防止html标签转义

    function htmlDecode ( str ) { var ele = document.createElement('span'); ele.innerHTML = str; return ...

  5. python学习07列表

    '''列表''''''列表:是可变的序列,也是一种可以存储各种数据类型的集合 用[]中括号表示列表的开始和结束:元素之间用,逗号隔开 '''l1=[] #空列表print(len(l1))l2=[&q ...

  6. Visual Studio 添加图标和版本

    在Visual Studio中,如果你创建的是纯C语言的工程,那么给可执行程序添加图标就没有便捷的入口. 但也只是入口不好找了,添加步骤还是比较简单的,以下为具体操作方法:     1. 右键点击C工 ...

  7. Tomcat系列教材 (一)- 教程

    Tomcat系列教材 (一)- 教程 Tomcat是常见的免费的web服务器. Tomcat 这个名字的来历,Tomcat是一种野外的猫科动物,不依赖人类,独立生活. Tomcat的作者,取这个名字的 ...

  8. socket编程-多个客户端向服务器发送人脸照片,服务器返回识别结果(服务器使用多线程)...

    recognition.py import numpy as np import face_recognition import os class recognition: def __init__( ...

  9. 从实践出发:微服务布道师告诉你Spring Cloud与Boot他如何选择

    背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架 ...

  10. 第 43 章 Baidu Map

    43.1. BMap.Circle var point = new BMap.Point(22.111, 114.111); var styleCircleF = { strokeColor:&quo ...