用一颗学美术的心来理解PID调节

这种图(↑)大家都会画吧?什么?你不会?那这样的(↓)呢?
我的天?你还不会?那我降低要求,给你支笔,让你对上面那张图涂颜色好了。(一脸嫌弃)
什么?你就涂成这样?竟然还有留白?
好吧,我不怪你。给你一只细一点勾线笔的笔好了。
你就把图搞成这样啊?竟然还有涂到外面去的?再给你一块橡皮好了,这下总好了吧。
泡老师:嗯,我很满意。那么下课了!
同学心声:(啊?这就下课了啊)
泡老师:当然不是。
同学心声:(你怎么听到我的心声的???黑人问号)
泡老师:开玩笑的(hhhh)。
下面我们就来看看PID好了,我们上面是不是用了三种工具?
现在我们开始取名字。第一支粗的笔叫P,第二支细的笔叫I,橡皮擦叫D。
大家发现没有P其实是一个很粗的刷子,它可以帮助我们快速的把大面积的色块刷完,这样的话,我们画图的速度就会很快,但一个不小心就会超出本来应该画图的区域。I是一支细的笔,可以帮助我们完善由于P而造成的留白。D是一块橡皮擦,可以补救擦除那些超出画图区域的画笔。要完成这样的效果,我们会发现一个特点。为了快,P画刷必须大,I橡皮擦必须比P画刷小,同时D要比I小一点,这样效果才会比较好。对于不同的涂色区域,我们也会对三者有不同的要求,如果是一张很大很大的图,势必这三个工具本身绝对尺寸就需要很大。反之,如果图很小,三者也同时要求很小。对于不同的边界,我们也需要调节这三者的相对大小,来适应图的具体特点。
好,我们现在把刚才说的东西套到PID调节里,我们PID在控制里,P代表比例环节,I代表积分环节,D代表微分环节。比例环节可以使得我们的控制系统快速接近希望的性能附近(也就是上面说的希望把区域涂满色),这时候积分环节可以让操作更加精确,同时微分环节D可以把超过预定的量的部分(这个部分专业称为超调量)给消除。三者配合,就可以让我们的性能达到预期性能。由于每个任务要求不同(比如图太阳内部和外焰的绝对体积大小、涂色曲面差异),我们需要认真选择三个环节的大小,也就是工业上俗称的调参来适应复杂多变的任务。
比如:我们画图时候就可以选择粗笔的大小,勾线笔的大小,以及橡皮擦的大小。
这时候,我们发现对于有些系统控制对超调量要求不是很高的,可以采用PI(粗笔+勾线笔)控制。对于那些可以在预定值附近的,可以采用PD(粗笔+橡皮擦)控制。实际上,我们也可单独用P(粗笔,大不了不那么精确),单独用I(勾线笔,大不了慢一点),但不可以单独用D(橡皮擦,都没画怎么能擦呢?)
当然,用PID(粗笔+勾线笔+橡皮擦)肯定是最吼的。但是?穷画家也要考虑成本,工业上更需要根据需要权衡利弊(trade-off),所以一切要以技术性和经济性的综合考虑来选择控制方式。
所以,这里给大家看一副极为土豪的画。
看到这里相信大家应该对自动控制原理的核心——PID控制有了一个很清晰的认识。但是我们是否所有时候都需要让涂色都这么完美完成呢?比如第一幅图,人家就没有很严格的去涂色,但很好的视觉效果。所以,这里需要打一个问号(?)欲知后事如何,且听下回因式分解。
用一颗学美术的心来理解PID调节的更多相关文章
- 解决初学者学不懂android,不理解android的设计
最近在忙着搞一个小项目,所以没有来得及写一些原创性的东西,好容易今天中秋节,就趁现在写一些吧,今天仍然看了些老马的视频,尽管这些东西以前都用过,但是感觉仍然学到了不少东西,说给大家听希望大家也要不要不 ...
- 《通过C#学Proto.Actor模型》之PID
PID对象是代表Actor对象的进程,是能过Actor.Spawn(props)获取的:它有什么成员呢?既然代理Actor,首先有一个ID,标识自己是谁,Actor在Spawn时可以命名这个ID,否则 ...
- 小强学渲染之OpenGL状态机理解
状态机是理论上的一种机器,呃这个说法非常非常的抽象.通俗一点理解,状态机描述了一个对象在其生命周期内所经历的各种状态,状态间的转变,发生转变的动因,条件及转变中所执行的活动.或者说,状态机是一种行为, ...
- 【转】跟我一起学Spring 3(4)–深入理解IoC(控制反转)和DI(依赖注入)
在继续下面的章节之前,我们要先说说大名鼎鼎的IoC和DI. 我们经常会听说IoC,也就是Inversion of Controller,控制反转.事实上,IoC并不是一个新鲜的概念,最早可能是在198 ...
- 跟我学SharePoint 2013视频培训课程——理解SharePoint网站的体系结构(3)
课程简介 第三天,理解SharePoint 2013 网站的体系结构 视频 SharePoint 2013 交流群 41032413
- 由ES规范学JavaScript(二):深入理解“连等赋值”问题
var foo={rzx:1} var bar =foo; foo.x=foo={rzx:100} console.log(foo.x) console.log(bar.x) 有这样一个热门问题: ...
- 跟哥一起学python(3)- 理解“变量”
我们把前面的程序稍微改一下,来了解python中的变量. # file: ./4/4_1.py # 定义变量 hello_str = "hello, world!" # 字符串打印 ...
- RabbitMQ入门,我是动了心的
人一辈子最值得炫耀的不应该是你的财富有多少(虽然这话说得有点违心,呵呵),而是你的学习能力.技术更新迭代的速度非常快,那作为程序员,我们就应该拥有一颗拥抱变化的心,积极地跟进. 在 RabbitMQ ...
- 第一份开发工作,边学边做android
我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...
随机推荐
- freeRTOS中文实用教程4--资源管理互斥
1.前言 访问一个被多任务共享,或是被任务与中断共享的资源时,需要采用”互斥”技术以保证数据在任何时候都保持一致性.这样做的目的是要确保任务从开始访问资源就具有排它性,直至这个资源又恢复到完整状态 F ...
- MCS-51单片机存储地址空间划分
1.前言 MCS-51的存储器有片内RAM.片外RAM 和 ROM 三个空间. MCS-51单片机在物理结构上有四个存储空间 1.片内程序存储器(片内ROM)2.片外程序存储器(片外ROM)3.片内数 ...
- Linux内存管理1---内存寻址
1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理. 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础.虚拟地址空间的管理.物理地址空间的管理. 本 ...
- jQuery 实现添加表格行,删除行,调用日期控件
$(function () { getdatepicker(); getdatetimepicker(); }); $(document).on('click','#addTable',addTr); ...
- 数据库的连接使用——使用ADO.NET连接数据库
一.ADO.NET简介 ADO.NET是由很多类组成的一个类库,这些类库提供了很多对象,用来完成数据的连接.查询.插入.更新和删除等操作.其中主要包括以下对象: 1.Connection对象:用来连接 ...
- windows环境用python修改环境变量的注意点(含代码)
1.部分环境变量字段需要保留原来的值,只是做添加,不可以替换 2.Path和PATH对于python来说是一样的,也就是说存在名为Path的环境变量时,添加PATH的环境变量,会覆盖原有的Path环境 ...
- pl sql 存储过程 执行sql 锁死状态
背景 这是在一个不知如何表达的项目中,我在这个项目中做的就是不知如何表达的事情.只是想着技术,到是通过这个项目把存储过程基本能用的都用了,oracle开发的技术我感觉基本都全活了.别人没搞定的我搞定了 ...
- php封装的sqlite操作类
sqlite在php中是默认安装的本地小型化数据库,类似于xml的小型数据库,但sqlite功能更强. sqlite.class.php文件: <?php class sqliteDB{ pri ...
- lnmp环境下piwiki网站流量分析工具的安装及配置
piwiki统计网站的安装 Piwik是一个PHP和MySQL的开放源代码的Web统计软件. 它给你一些关于你的网站的实用统计报告,比如网页浏览人数, 访问最多的页面, 搜索引擎关键词等等- Piwi ...
- Android OAuth认证
OAuth认证 为了安全地访问在线服务,用户需要在服务上进行身份验证,即要提供他们的身份的证明.对于一个要访问第三方服务的程序来说,安全问题甚至更复杂.不仅仅是用户需要在访问服务前要进行身份验证,而且 ...