控制算法手记-认识你的被控系统

写在前面:

在设计控制算法时,工程师通常面临着许多困惑:

  • 名称各异、种类繁多的控制算法,到底选用哪一种算法或哪一种算法适合我的应用场合?
  • 我是否有必要一一掌握这些控制算法?以便用到的能够随时运用,但控制理论看起来都是一大堆复杂的数学公式,看起来很枯燥,而且学不下去。
  • 即使我学了这些控制算法,在实际中是否能够真正用到?说不定还是PID好用。

针对以上问题,先说下作者个人的观点:

  • 没有一种控制算法能够适用于所有场合,各种控制算法提出之初都针对一类特定问题。因此,先认真分析自己的被控对象,看能够归类到哪一类或哪几类特定问题下,然后再了解哪种控制算法是针对你所面临的特定问题,自然就能很快地选择合适的控制算法;

  • 个人认为对于工程师而言,并没有必要一一掌握这些控制算法背后的数学推导,通常也没有这么多精力。控制算法工程师只需要理解各类控制算法提出的目的、针对的问题、做出的假设、基本思路和框架以及典型的应用场合即可,这也是控制算法手记系列所要达到的目的;

  • 虽然PID在90%以上的应用场合能够取得相对合理的性能,简单、基本思路具有普适应,但也过于粗糙。对于一些高性能应用场合,PID可能根本无法达到性能要求,超越PID是必须的,也是必要的。实际中,很多先进控制算法得到了成功运用,且性能指标远超PID。因此了解其他类型的控制算法仍是必要的,可以帮助工程师认识到用什么样的思路设计算法可以超越PID,真正实现高性能控制系统。关于PID基本思路的普适应参见作者知乎回答:

在选择合适的控制算法时,在深入控制算法设计的技术细节之前,必须进行的工作是认识、描述、分析你自己的被控系统,然后总结被控系统可以归为哪一类问题,具体又是如何表现。用英文表达就是,先有Problem description, Statement, 然后再做Formulation. 如果你的问题经过Formulation后,能够转化为某一类标准问题,剩下的问题就是利用数学工具解决你的问题了。

图1. 被控系统组成

直观、清楚地描述被控系统

应该认识到,控制算法设计所面临的对象是整个被控系统。这个被控系统包含了具体工作过程、机械、电气、信号(采集、传输、处理)、数值计算、软件实现等一系列因素。因此,控制算法设计不仅仅是控制算法工程师的事情,而应该放在系统层面的角度去看待。很多时候,被控系统的硬件就决定了软件层面上的控制算法所能达到的性能上限,比如一些大惯量/长时滞被控系统不可能实现快速动态响应,低性能的控制器硬件也不太可能实施运算量大的高性能控制算法。在这个认知基础上,被控系统的分析应该涉及到以上各个层面。

被控系统对应的工作过程是什么,你想让被控系统干什么:

被控系统是什么工作/工艺过程,是物理的(机械、电气、液压、磁、声、光、温度等)还是化学(反应)过程?这一过程是如何实施的?在整个工作过程/装置中处于什么位置(是否和其他子系统交互,接受来自其他系统的信号)?

为保证这一工作过程的能够自动化实现,被控系统需要干什么?是控制运动位置/力,是控制温度/液位?控制指令是一个固定值还是一个变化的指令,具体控制指标是什么(稳态精度还是动态响应,跟踪还是抗扰)。

被控系统由哪些部件组成,各个部件的特性以及相互联系:

一般意义上说,完整的控制系统包含控制对象、执行器、感知系统以及控制器(硬件)四个部分,如图1所示,其中实线为真实物理硬件,虚线为软件层面的各种控制以及信号处理算法和逻辑流程。图1中每一个部件、部件之间的联结、以及与环境之间的互动在实际中都存在着多种可能性,必须认真进行描述和分析。

被控对象:即具体的物理/化学过程,如机器臂控制系统中被控对象就是多连杆组成的机械运动系统,温度控制系统中被控对象就是热传导/对流/辐射的过程。工程师应具备系统动力学分析和建模的相关知识,分析被控对象的特性:系统是低阶/高阶(一般阶数为系统中独立储能元件的个数),不同工况下主导动态特性是什么,是否还有未知部分或者难以解释/用数学语言描述的动态;是单输入单输出还是多输入多输出系统,还是无穷维系统(如一些物理场控制问题);输入输出之间关系表现为线性还是非线性(死区、滞环等因素),参数是否随时间变化(如有变化,快变还是慢变);是否有外部干扰因素影响系统,如何影响系统,该干扰是确定/有一定规律,还是未知/复杂非线性;是一个快速/慢变系统(时间常数大小);是否是最小相位系统(即传递函数具有不稳定零点)等;

执行器:即执行控制指令,施加作用于被控对象的机构。对于机器人控制系统来说,执行器一般为由电机/电磁/电液作动器以及传动机构组成的关节执行器,对于温度控制系统,执行器可能为加热丝、冷却器、热交换器等。需要分析:执行器的输出如何影响到输出/被控制量(直接还是通过中间的传动/传递机构?作用位置?);执行器接受什么样的输入、输出特性如何以及输入输出如何关联(比如执行器频率响应/带宽,有无死区、饱和、滞环等非线性特性,具体参数是否容易变化等);

感知系统:即能够实时感知系统状态/变化的部件,通常为各类传感器以及相应信号采集、传输及处理系统。需要分析:被控系统中哪些信号能够采集、与被控制量有什么关系(直接/间接相关、中间关联变量),是不是所有状态都能采集;采集信号的传感器是什么,安装在什么位置,测量精度/分辨率和动态响应如何;信号如何采样(A/D转换位数)、采样率如何、怎么传输(总线还是I/O),噪声水平如何(工频干扰还是随机干扰)等;

控制器:即实时运行控制算法并计算控制指令的部件,主要为各类控制芯片(如单片机、PLC、DSP、FPGA等)。需要分析:控制器具体硬件配置以及相应的运算和存储能力,比如是否支持浮点运算、运算速度及时间;控制算法实施具体形式,是否采用多采样;如何与执行器和感知系统连接,这些连接是否引入噪声和延迟等因素;

工程师应该从以上维度直观(不带任何预设立场和假设)、清晰地描述被控系统(建议可以形成一个checklist的文档),这是设计出适合的控制算法第一步,也是十分关键的一步。

分析被控系统特点,选择匹配的控制算法

在直观、清晰描述被控系统的基础上,深入分析被控系统的特点,总结被控系统的主要问题(即抓事物的主要矛盾、矛盾的主要方面)。如果有可能的话,可以用数学语言描述,这个主要问题在数学上可以归结成哪类问题。进一步根据所面临的主要问题,选用/设计出合适的控制算法。总的原则是被控系统的特点和控制算法基本思路、结构相匹配。比如,被控系统主要问题是约束条件下的非线性控制问题,且系统模型相对精确,且可以选用模型预测控制;如果主要问题是高频未建模动态引起,但频段信息相对明确,则可以选用环路整形等鲁棒性控制方法。

遗憾的是,由于控制算法涉及的领域众多,被控系统的具体情况和主要问题也多种多样,性能要求也有所差别,解决某一特定问题的控制算法也有多种类型,很难严格地根据被控系统所面临的主要问题去匹配相应的控制算法(如果有相应的想法,欢迎积极交流与讨论)。 

 做了很好的举例说明。

另一方面,为解决某一问题,通常需要多种控制算法之间的相互配合。比如鲁棒自适应和自适应鲁棒等将自适应方法和鲁棒控制方法结合起来处理系统抗扰(模型不确定性和参数变化)问题;为同时保证系统跟踪和抗扰性能,可能需要在二自由度控制的框架下融合多种算法,如将模型预测控制和干扰观测器结合起来。

一种粗略的分类方法是根据被控系统是否容易获得精确模型,将控制算法分为基于模型和数据驱动两种方法体系(Methodology),具体可参见下面专栏文章,里面介绍了什么时候选用数据驱动/基于模型的控制算法:

总结

控制算法设计第一步应该是认识并深入分析被控系统,然后根据所面临的问题选择/设计合适的控制算法。也就是从实际问题出发,而不是反过来从控制理论中各种复杂的概念/算法出发,去假设/简化实际问题,从而导致设计出来的控制算法无法落地的尴尬现状。实际中,由于控制算法面临的是一个系统层面上的问题,面临的情况多种多样,工程师也不应该受限于各种概念,问题是什么,算法就设计成什么样子,尽管理论上可能并没有类似的概念/用法。

另一方面,也不应该忽略理论研究所具备的价值和严谨性,轻视数学工具的运用和理论分析,回到控制理论无用论和万事PID上来。受读博期间导师的影响,作者认为好的理论研究和实践应该是强大物理概念和数学工具的完美结合,即在对实际物理世界中的问题深刻理解的基础上,找到合适的数学工具去描述和解决。具体到控制算法的设计,系统动力学分析和建模作为联结物理世界和数学世界的工具显得尤为重要。很多人在初学控制理论时,觉得难学/就是记公式/不知道学了怎么用,个人认为一个很重要的原因就在于课程体系设置得不合理,缺少了系统动力学的先导课程,参考以下作者的知乎回答:

以上。

后续会有第二部分通过具体例子说明

【备注】个人公众号定期更新传感、执行及控制方面的机电和自动化研究进展,欢迎关注!