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

泡利

3 个月前
相信大家小时候都画过美术作品吧?(什么?你还是宝宝?)没关系,不管你是文科、理科、工科、艺术还是家里蹲的,这篇文章对你来说一定会简单到爆炸的。

这种图(↑)大家都会画吧?什么?你不会?那这样的(↓)呢?

我的天?你还不会?那我降低要求,给你支笔,让你对上面那张图涂颜色好了。(一脸嫌弃)

什么?你就涂成这样?竟然还有留白?

好吧,我不怪你。给你一只细一点勾线笔的笔好了。

你就把图搞成这样啊?竟然还有涂到外面去的?再给你一块橡皮好了,这下总好了吧。

泡老师:嗯,我很满意。那么下课了!

同学心声:(啊?这就下课了啊)

泡老师:当然不是。

同学心声:(你怎么听到我的心声的???黑人问号)

泡老师:开玩笑的(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调节的更多相关文章

  1. 解决初学者学不懂android,不理解android的设计

    最近在忙着搞一个小项目,所以没有来得及写一些原创性的东西,好容易今天中秋节,就趁现在写一些吧,今天仍然看了些老马的视频,尽管这些东西以前都用过,但是感觉仍然学到了不少东西,说给大家听希望大家也要不要不 ...

  2. 《通过C#学Proto.Actor模型》之PID

    PID对象是代表Actor对象的进程,是能过Actor.Spawn(props)获取的:它有什么成员呢?既然代理Actor,首先有一个ID,标识自己是谁,Actor在Spawn时可以命名这个ID,否则 ...

  3. 小强学渲染之OpenGL状态机理解

    状态机是理论上的一种机器,呃这个说法非常非常的抽象.通俗一点理解,状态机描述了一个对象在其生命周期内所经历的各种状态,状态间的转变,发生转变的动因,条件及转变中所执行的活动.或者说,状态机是一种行为, ...

  4. 【转】跟我一起学Spring 3(4)–深入理解IoC(控制反转)和DI(依赖注入)

    在继续下面的章节之前,我们要先说说大名鼎鼎的IoC和DI. 我们经常会听说IoC,也就是Inversion of Controller,控制反转.事实上,IoC并不是一个新鲜的概念,最早可能是在198 ...

  5. 跟我学SharePoint 2013视频培训课程——理解SharePoint网站的体系结构(3)

    课程简介 第三天,理解SharePoint 2013 网站的体系结构 视频 SharePoint 2013 交流群 41032413

  6. 由ES规范学JavaScript(二):深入理解“连等赋值”问题

    var foo={rzx:1} var bar =foo; foo.x=foo={rzx:100} console.log(foo.x) console.log(bar.x)   有这样一个热门问题: ...

  7. 跟哥一起学python(3)- 理解“变量”

    我们把前面的程序稍微改一下,来了解python中的变量. # file: ./4/4_1.py # 定义变量 hello_str = "hello, world!" # 字符串打印 ...

  8. RabbitMQ入门,我是动了心的

    人一辈子最值得炫耀的不应该是你的财富有多少(虽然这话说得有点违心,呵呵),而是你的学习能力.技术更新迭代的速度非常快,那作为程序员,我们就应该拥有一颗拥抱变化的心,积极地跟进. 在 RabbitMQ ...

  9. 第一份开发工作,边学边做android

    我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...

随机推荐

  1. 身份证号校验原理及JavaScript实现

          在网站中,总有各种各样的表单,用户使用表单来向服务器发送数据,进行交互. 然而,代代相传的经验是,永远不要信任用户的输入,一定要对数据进行验证.如果使用不经验证的表单,轻则会有大量无效提交 ...

  2. WPF 未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项

    1.检查代码不存在问题,最后找到问题,Nut管理包没有安装CefSharp.wpf. 2.安装对应的版本即可.

  3. 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 ...

  4. idea 快键键

    debug快键键 F9 resume programe 恢复程序 Alt+F10 show execution point 显示执行断点 F8 Step Over 相当于eclipse的f6 跳到下一 ...

  5. python 全栈开发,Day67(Django简介)

    昨日内容回顾 1. socket创建服务器 2. http协议: 请求协议 请求首行 请求方式 url?a=1&b=2 协议 请求头 key:value 请求体 a=1&b=2(只有p ...

  6. python 全栈开发,Day8(文件操作)

    一.文件操作流程 文件以什么编码存储的,就以什么编码打开 参数: 1.文件路径 2.编码方式,encode 3.执行动作(打开方式):只读,只写,追加,读写,写读... 打开一个已经存在的文件 f = ...

  7. Mac配置Node.js环境

    打开终端输入命令:(安装brew) ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mast ...

  8. Oracle11g 创建数据库中问题处理(必须运行Netca以配置监听程序)

    这两天学习<OCP/OCA认证考试指南>,要创建新的数据库,因为此前我的电脑上已经被折腾了好久的Mysql 和oracle10g ,所以可能导致很多环境都变了,创建数据库的过程中出现了一些 ...

  9. Oracle分区表删除分区数据时导致索引失效解决

    https://blog.csdn.net/e_wsq/article/details/80896258

  10. Python list 函数

    list 修改列表元素: 下标直接修改  list[下标]=值 列表添加元素: list.append(值)末尾追加 列表插入元素: list.insert(下标,元素) 列表删除元素: del li ...