用一颗学美术的心来理解PID调节
用一颗学美术的心来理解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等,所有人都认为我是个没法学习的孩 ...
随机推荐
- 身份证号校验原理及JavaScript实现
在网站中,总有各种各样的表单,用户使用表单来向服务器发送数据,进行交互. 然而,代代相传的经验是,永远不要信任用户的输入,一定要对数据进行验证.如果使用不经验证的表单,轻则会有大量无效提交 ...
- WPF 未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项
1.检查代码不存在问题,最后找到问题,Nut管理包没有安装CefSharp.wpf. 2.安装对应的版本即可.
- mysql数据库报错:InnoDB: Operating system error number 13 in a file operation
环境:centos6.5 x86_64 启动mysql发现日志报错(日志路径可以查看/etc/my.cnf的配置) 160722 10:34:08 [Note] Found 42570716 of 4 ...
- idea 快键键
debug快键键 F9 resume programe 恢复程序 Alt+F10 show execution point 显示执行断点 F8 Step Over 相当于eclipse的f6 跳到下一 ...
- python 全栈开发,Day67(Django简介)
昨日内容回顾 1. socket创建服务器 2. http协议: 请求协议 请求首行 请求方式 url?a=1&b=2 协议 请求头 key:value 请求体 a=1&b=2(只有p ...
- python 全栈开发,Day8(文件操作)
一.文件操作流程 文件以什么编码存储的,就以什么编码打开 参数: 1.文件路径 2.编码方式,encode 3.执行动作(打开方式):只读,只写,追加,读写,写读... 打开一个已经存在的文件 f = ...
- Mac配置Node.js环境
打开终端输入命令:(安装brew) ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mast ...
- Oracle11g 创建数据库中问题处理(必须运行Netca以配置监听程序)
这两天学习<OCP/OCA认证考试指南>,要创建新的数据库,因为此前我的电脑上已经被折腾了好久的Mysql 和oracle10g ,所以可能导致很多环境都变了,创建数据库的过程中出现了一些 ...
- Oracle分区表删除分区数据时导致索引失效解决
https://blog.csdn.net/e_wsq/article/details/80896258
- Python list 函数
list 修改列表元素: 下标直接修改 list[下标]=值 列表添加元素: list.append(值)末尾追加 列表插入元素: list.insert(下标,元素) 列表删除元素: del li ...