用一颗学美术的心来理解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. Python爬虫-爬取糗事百科段子

    闲来无事,学学python爬虫. 在正式学爬虫前,简单学习了下HTML和CSS,了解了网页的基本结构后,更加快速入门. 1.获取糗事百科url http://www.qiushibaike.com/h ...

  2. SIFT feature

    转载:http://www.cnblogs.com/wangguchangqing/p/4853263.html 1.SIFT概述 SIFT的全称是Scale Invariant Feature Tr ...

  3. linux中结构体对齐【转】

    转自:https://blog.csdn.net/suifengpiao_2011/article/details/47260085 linux中定义对齐字节 typedef struct  sdk_ ...

  4. python脚本发送邮件

    #!/usr/bin/python #_*_ coding:utf-8 _*_ from email.MIMEText import MIMEText from email.MIMEMultipart ...

  5. Android 工程中各种文件的介绍

    一:Android.mk     Android.mk 内部定义了一个或者多个源代码的模块,该文件的产生是和NDK相关的,NDK 是Android提供的一种工具,可以为编译mk文件内部的源代码提供依赖 ...

  6. OCM_第十天课程:Section5—》数据仓库

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  7. python之类中的super函数

    作用 实现代码重用 思考:super真的只是调用父类么? super函数是按照mro算法去调用的,不bb上代码: class A: def __init__(self): print('A') cla ...

  8. 从html页面中抽取table表格数据

    /** * [getDataFromTrElems 获取表格行元素数据] * @param {[Object]} trElems [trs dom] * @param {[String]} type ...

  9. 将模型.pb文件在tensorboard中展示结构

    本文介绍将训练好的model.pb文件在tensorboard中展示其网络结构. 1. 从pb文件中恢复计算图 import tensorflow as tf model = 'model.pb' # ...

  10. 性能测试十:jmeter进阶之webService与socket

    一.webService 1.添加http post请求2.添加header:Conent-type:text/xml Post请求的body中填写<soapenv:Envelope  xmln ...