都看过舞龙吧?如果这是一条眼睛看不见的盲龙,只能通过一个人捏着龙尾巴在后面指挥,再通过龙身体里的人一个接一个地传递控制指令,Zui后使龙头咬住绣球。这显然是一个动态系统,龙身越长,人越多,动态响应越迟缓。如果只看龙头的位置,只操控龙尾巴,而忽略龙身子的动态,那就是所谓的输入-输出系统。经典控制理论就是建立在输入-输出系统的基础上的。对于很多常见的应用,这就足够了。
卡尔曼不满足于“足够”。龙头当然要看住,龙尾巴当然要捏住,但龙身体为什么就要忽略呢?要是能够看住龙身体,甚至操纵龙身体,也就是说,不光要控制龙头龙尾巴,还要控制整个龙身体,那不更好?这就是状态空间的概念:将一个系统分解为输入、输出和状态。输出本身也是一个状态,或者是状态的一个组合。在数学上,卡尔曼的状态空间方法就是将一个高阶微分方程分解成一组联立的一阶微分方程,这样可以使用很多线性代数的工具,在表述上也比较简洁、明了。
本来龙尾巴这一头的控制指令可以通过一个人、一个人往前传,控制整个舞龙动作的,但中间有两个人开小差,这龙就舞不起来了,不可控了
还是回过来看这条龙。现在,龙头、龙尾巴、龙身体都要看,不光要看还要直接拿捏住每一个环节。这龙不是想看就看得了的,不是想舞就舞得了的。说到“看”,直接能够测量/观测的状态在实际上是不多的,所谓看,实际上是估算。要是知道龙身体有多少节(就是有多少个人在下面撑着啦),龙身体的弹性/韧性有多少,那么捏住龙尾巴抖一抖,再看看龙头Zui后落到哪里,是可以估算出龙身体每一节的位置的,这叫作状态观测。那么,要是这龙中间有几个人开小差,手不好好拉住,那再捏住龙尾巴乱抖也没用,这时系统中的部分状态就是不可观测的。如果你一声令下,部分人充耳不闻根本不理会你的指挥,或者说控制命令根本传不到这些人这里,那这些状态就是不可控制的。卡尔曼从数学上推导出不可控和不可观的条件,在根本上解决了什么时候才不耽误工夫的问题。这是控制理论的一个重要里程碑。
再来看这条龙。如果要看这条龙整齐不整齐,排成纵列的容易看清楚。如果要清点人数,看每一个人的动作,排成横列更容易看清楚。无论怎么排,这条龙还是这条龙,只是看的角度不同。早些年中国的春节舞龙还没有在美国的中国城里闹腾起来,不知道卡尔曼有没有看到过舞龙,反正他把数学上的线性变换和线性空间的理论搬到控制里面,从此,搞控制的人有了新工具:一个系统横着看不顺眼的话,可以竖着看。兴趣来了,还可以斜着看、倒着看、拧着看,因为无论怎么看,系统的本质是一样的。不同的角度有不同的用处,有的角度设计控制器容易一点,有的角度分析系统的稳定性容易一点,诸如此类。在控制理论里,有各种特征的形式就叫这个那个“标准型”。这是控制理论的又一个里程碑。
同样一条龙,要看整齐不整齐,竖着看zuihao
要看每个人的动作,横着看zuihao,但龙还是这条龙
观测状态的Zui终目的还是控制。只用输出的反馈叫作输出反馈,经典控制理论里的反馈都可以归到输出反馈里,用状态进行反馈的就叫状态反馈了。输出反馈对常见系统已经很有效了,但状态反馈要猛得多,可以对所有零极点jingque配置,而不是像经典方法那样,只配置主要零极点,其他的只是“赶”到左半平面(稳定区域)足够远的地方就行了。想象一下,一个系统的所有状态都被牢牢地瞄住,所有状态都乖乖地听从调遣,那是何等的威风?
学控制的人都要学现代控制理论,但大多数人记得卡尔曼还是因为那个卡尔曼滤波器(KalmanFilter)。说它是滤波器,其实是一个状态观测器(StateObserver),是用来从输入和输出“重构”系统状态的。这重构听着玄妙,其实不复杂。不是有系统的数学模型吗?只要模型jingque,给它和真实系统一样的输入,它不就乖乖地把系统状态给复现出来了吗?且慢,微分方程的解不光由微分方程本身决定,还有一个初始条件,要是初始条件不对,微分方程的解的形式是正确的,数值永远差一拍。卡尔曼在系统模型的微分方程后再加了一个尾巴,把实际系统输出和模型计算的理论输出相比较,再乘上一个校正因子,形成一个实际上的状态反馈,把状态重构的偏差渐进地消除,解决了未知或者不确定初始条件和其他的系统误差问题。卡尔曼滤波器Zui精妙之处,在于卡尔曼推导出一个系统的方法,可以考虑进测量噪声和系统内在的随机噪声,根据信噪比来决定上述校正因子的大小。如果测量噪声主导,那Zui优状态估计主要基于从系统模型重构;如果系统本质噪声主导,那Zui优状态估计主要依赖输出测量的校正。这是符合实际生活经验的。在战斗中,如果“战争之雾”浓重,无法得到及时、确切的敌人情报,有经验的指挥官会根据先前已知的确切情报和对敌人通常行为的了解,来凭经验对当前敌人的状态进行推断;如果敌人根本没有章法,打仗时还常常会莫名其妙乱跑,串个门、叙个旧什么的,那就只有根据当前战线位置反过来推断了。
根据经验(数学模型)推断,根据断断续续的情报(实际测量)修正,来推测系统状态,这就是卡尔曼滤波的基本思路
这个“预估-校正”的构型其实不是卡尔曼的独创,卡尔·隆伯格(CarlLuenburg)也得出了类似的结构,但他是从系统稳定性角度出发的,用极点配置的办法来决定校正因子,并不直接考虑测量噪声和系统噪声的问题。
同样的结构大量用于各种“预测-校正”模型结构,在工业上也得到很多应用。比如聚合反应器的分子重量分布可以用反应器的温度、进料配比、催化剂等来间接计算,但不够jingque,也无法把林林总总的无法测量的干扰因素统统包括进数学模型里。这时用定时采样、中心分析室测定的真实值来定期与模型估计值相比较,计入校正因子(业内也称为“信任因子”,代表对模型计算和分析结果的相对信任程度)后,就可以结合数学模型及时的特点和分析结果jingque的特点,满足实时控制的要求,这或许可以算作简易的卡尔曼滤波器。
卡尔曼滤波器Zui早的应用还是在雷达上。所谓边扫描边跟踪,就是用卡尔曼滤波器根据飞机的动态模型估计敌机的位置,再由雷达的间隙扫描结果来实际校正。实际应用中还有一个典型的问题:有时候,对同一个变量可以有好几个测量值可用,比如有的比较间接不甚jingque,但很快捷;有的是直接测量,很jingque但有很大的滞后,这时可以用卡尔曼滤波器把不同来源的数据按不同的信噪比加权“整合”起来,也算是简化版的“信息融合”。关于信息融合,后面还会更多地谈到。
除了卡尔曼滤波器外,卡尔曼的理论在实际中用得不多,卡尔曼建立了一个出色的理论框架,对理解和研究控制问题有极大的作用。
顺便说一句,卡尔曼的理论基本局限于线形系统,也就是说,十块大洋买一袋米,二十块大洋就买两袋米,都是成比例的。实际系统中有很多非线性的问题,两千块大洋还能买两百袋米,但两千万大洋就要看米仓有没有货了,不是钱越多,买的米越多,有一个“饱和”的问题。另一方面,要是米仓有足够的货,两千万大洋的集团购买力强,或许就可以讨价还价出一个折扣价,买三百万袋米了。这些只是非线性的简单例子。所有偏离线性的问题都是非线性的。非线性的问题研究起来要复杂得多。实际系统还有其他特性,有的是所谓时变系统,像宇宙火箭,其重量随时间和燃料的消耗而变,系统特性当然也就变了。很多问题都是多变量的,像汽车转弯,不光方向盘的转动是一个输入,加速和制动也是输入变量。状态空间的理论在数学表述上为线性、非线性、单变量、多变量、时变、时不变系统提供了一个统一的框架,这是卡尔曼Zui大的贡献。
在实用中,可以把非线性系统按当前条件用泰勒级数展开,取线性项作为近似,这样又可以把卡尔曼的经典线性理论用上了。在实际使用中,随当前条件的漂移,重新计算近似的线性项,与时俱进,这就是简单的自适应卡尔曼滤波,也叫作增广卡尔曼滤波。其是否有效取决于很多因素,本来就接近线性的容易成功,但这也不需要费自适应这个事,锁定个近似线性项就差不多了:高度本质非线性的就比较难,但这恰恰是需要自适应的地方。没办法,世界上的事情常常就是这么拧:好做的不需要,难做的做不了。