2 Z) X8 N5 Y7 i6 R. O! y 稍微跑题说一下控制论,这是我在大学里唯一需要老师放水的科目(在那次考试后,据说杀手最后是用卷面分数开平方乘十来放水的)。其实只要进入了控制论的天地,哪怕我们采用的是最简单的比例控制也不可避免地要和高等数学打交道。说起来神秘,其实我们身边有大把例子可以套进控制论的范畴。比如我们伸手去拿一个杯子这个动作,就包含了许多控制的概念,首先我们用眼睛判断手和杯子的相对距离,这个相对距离就是系统的输入,然后我们的大脑会不断地调整手臂和手指的肌肉群,这相当于输入对系统的内部状态的改变,反映到实际就是手不断地接近杯子,最后拿起来。听起来挺玄,但是科学家就是通过找出了这些看似不相关的系统的共同点,发展出一套理论来研究它们。这样他们就可以在忽略实践约束的情况下推导各种系统的行为,并给出一大堆奇思妙想。而工程师则必须在现实世界里和误差、噪声、干扰等麻烦为伴。0 ?6 r( H: c( A9 K0 J
7 Q n. f* f3 s# w4 ~
那么这些八杆子打不到一块的系统都有些什么共同点呢?在控制论看来有很多,主要的一个是阻尼。阻尼解释起来比较抽象,还以拿杯子的例子来说:定性分析的话阻尼有三种状态:临界阻尼、过阻尼和欠阻尼。在过阻尼的情况下你拿杯子的动作是小心翼翼地慢得让人不可忍受,欠阻尼则会冲动些很有可能把杯子碰翻,临界阻尼则是恰到好处行云流水地拿起来。类似的,在自动操舵中欠阻尼系统修正会比较慢甚至一直无法消除误差,欠阻尼系统则表现为频繁操舵或干脆蛇形运动,临界阻尼的系统会很好地修正航向偏差不亏不盈。在大多数情况下我们都希望系统处在临界阻尼状态,不过临界阻尼状态是状态函数中的一个点,实际很难做到,另外,对于具体系统我们会在综合考虑了响应时间和稳定性后故意让系统稍微的欠阻尼或过阻尼。应用控制论的知识我们就知道如何计算一个系统的阻尼,并据此设计出一个接近临界阻尼的控制系统。应用到自动舵设计中,我们就可以在纸面上搞出一个合理的设计少走很多弯路。这就是理论的威力。( l0 J3 m/ O9 a: Y
6 ^; i; V/ G4 K* B3 |! O+ s7 l
回到自动舵系统中,依据上述理论我们还需要知道给定舵角下舰船是如何改变航向的,有了这个知识我们系统模型就完整了,可以动手调整前面那个公式中的各项参数来达到我们所需要的阻尼系数了。然而船在水里是怎么运动的又会进入一个很麻烦的科学领域——流体力学(我的专业干脆就把这个科目删除了)。因此在所有的计算中使用的都是一些工程上认为合理的简化模型。由于简化的模型和实际的区别导致许多问题。 + |* u7 v2 \3 E * l* r$ C. g r E" M 其中一个是波浪的影响,波浪是一种高频摆动(相对其他偏航因素),而PID控制对波浪是敏感的,所以悲剧了。因此在实践中需要采用一些手段屏蔽掉波浪的影响,然而这又反过来导致系统对低频相应迟钝,容易造成持续的周期性偏航(我们又看到蛇形运动了)。那么我们在模型加入波浪再进行计算又如何呢?这个想法遇到的第一个麻烦是计算量的问题,早期的自动舵系统出来的时候计算机还没影子,即使是现在的计算机其实也无法很好地完成流体力学中大部分问题的计算——想想悲剧的天气数值预报就明白了。其次,在实际环境中,除了波浪之外还有许多其它的干扰因素,由于船舶控制其实是一个非线性系统,很难将各种干扰因素单独考虑。也就是说即使加入了波浪模型也不保证得到的结果是正确的。好在现在的计算机足够强大,许多情况还是可以通过模拟计算得到。但实测数据是必须的,没有实测的数据是做不出好的自动舵系统的。经常看到许多原理上没难度,制造工艺上也没问题的东西,我们却无法做出来就是这个道理。另外,同一条船系统模型也是会变的,比如轻载和重栽舵效是不同的;浅水区和深水区舵效也不一样。这导致要让自动舵完美控制就需要不断地计算和修改这些系数。想象一下,舵手在控制台前不断输入莫名其妙的数据的场景,我想他还是宁可去转舵盘。在这种环境下,第三代自适应的自动舵系统问世。8 e9 {9 U6 @/ z. R t9 n8 S
: D5 ?* y. h: A' e
& i' [4 L. K M) T
讲到自适应控制突然发现这坑挖得有点深,快把自己给埋住了,所以赶紧填了。5 W" j. V: l! ], A+ k, E. S
, ?) e9 ?# I3 b3 \% X 其实基于PID的自动舵和其它工业领域的PID控制是一回事,麻烦的都在所谓的参数整定上,也就是那条公式中的几个参数怎么算出来。不过船舶运动相对要麻烦一些。简单的控制系统尤其是那些模型清晰的,参数完全可以通过纸面运算得到。而船舶在水中的运动其实和飞机在空气运动类似,因此某种意义上说自动舵系统是一个简化版的飞控系统。好在需要控制的舵面只有一个,运动速度也远小于飞机,而且环境变化也没飞机那么剧烈。然而不管怎么说,想把船舶在水中运动的模型完全搞出来几乎是不可能的。也就是说现在的问题是:在我们不知道舵盘转动后船会怎么动的情况下,如何通过转舵来控制一条船。) W1 q+ p5 j; ~. F+ w w c& L
$ ~6 x" O$ |2 l. S
听起来有两个不可思议的地方:首先我们怎么会不知道舵对船的作用;其次在不清楚系统运作机制的情况下怎么可能控制一个系统。 ' c( |$ j6 }. E1 T % R. A7 M( Y) m 第一个问题:绝大部分情况下船是很听舵的控制的,然而事情总有例外,不同的船型、不同的水深、不同的速度、不同载重情况下舵的作用是不一样的。比如船相对水静止的时候舵是不起作用的。除此之外还有一些令人意外的事情,比如一些船(可能大部分都是)转舵瞬间会船头会有一个相反的转动,我听父亲说过他们船上的舵手在满舵前会先向相反的方向压一下舵然后再转过来,这样可以让船更快地转向。4 N4 r6 R- N1 l; {( j; t
, O) F' H" s" s, Z) L
第二个问题就是自适应控制的威力了,某些系统即使我们不知道内部工作原理,也可以通过他们对输入的响应推算。最有名的就是所谓的线性时不变系统,线性的意思就是叠加的输入的到叠加的输出;时不变则表示系统内部工作机制不会随时间变化而变化。比如一个系统对1输出两个0.5,那么我们可以判定其对2的输入会输出两个1,而且任何时刻都是这样。说穿了并不复杂,其实就是在函数形态已知的条件下,根据函数的几个点推导函数的参数而已。只不过很多时候我们并不需要知道函数的解析式,而且许多系统无法用几个函数表达,我们更多的使用这些系统对特定信号的响应来表达罢了。有了这些理论工具我们就可以通过观测系统的历史来预测系统对特定输入的响应,然后再通过一些优化算法来调整我们的控制参数令其输出达到指定的性能指标。这就是自适应控制的基本原理。和模型已知的控制区别在于,我们无法得到一个全局最优的控制,但我们可以得到一个在大部分情况下都不错的控制。 9 Y4 u" M7 c: _7 H9 f7 W; B o0 y' [+ O; F" t7 }
对于自动舵系统来说这套理论还真能解决大部分问题。最給力的就是我们不再需要找出复杂的船舶运动方程。虽然在自适应自动舵系统里我们还需要增加诸如船舶内部参数配置(如载重)和一些传感器(如波浪测量等),但整个模型是大大简化了。目前成熟的自动舵系统大部分都是这类东西,同时结合现代定位技术,如 GPS。自动舵不但能保持航向还能保持船舶运动轨迹,这类能保持轨迹的自动舵我们称为轨迹舵,而保持航向的我们称为航向舵。在电子技术飞速进步的今天,驾驶室里的很多东西都转化为数字式的,并且在计算机的帮助下这些东西很容易结合起来发展出新的功能。比方和雷达配合自动舵可以完成自动避碰功能。配合电子海图和GPS定位系统现在航海部门的工作比以前要简单很多了。领航员可以直接在电子海图上画出航线,船舶就可以在自动舵的操控下自动开往目的地。以前需要在多个导航点测船位,再修改航向的工作现在变成后备作业。所以现代先进的驾驶室技术让菜鸟也可以开航空母舰,而且不会跑偏。 1 S2 D4 T1 n9 I5 v, M5 }5 q% \2 y6 L- b J' A7 J
最后,土鳖不土鳖呢?这是一个问题。因为这里还留了一个尾巴——智能自动舵,不过目前这个东西还在实验室里,有空再补吧。作者: 同文 时间: 2012-3-27 03:43
送葱花,可以炒鸡蛋(俺在日志里送的)。顺便捞个沙发。作者: MacArthur 时间: 2012-3-27 11:17