最近刚开始了一个机器人的建模与控制方面的课题。其中要求机器人末端到达目标点后对其残留振动做一个抑制。按师兄的建议,去小学了一手工业中常用的输入整形(Input Shaping)的控制方法。
我们在抑制振动之前,首先要明确振动到底是什么。如果对控制原理有一定了解的话,我们知道,对于一个需要精确定位的系统,比如机械臂、塔吊、码头集装箱等,一般由于模型中存在着振荡模态,所以当其到达期望的位置时,并不能立刻停下来,而是会进行一段时间逐渐衰减的摆动,也就是我们所说的残留振动。
抑制振动的方法有很多,有通过增大零部件刚度、阻尼等通过改变系统模型而达到减小振动的被动控制的方法;有通过引入传感器形成闭环的反馈控制的方法;当然也有开环控制方法,我们这里重点探究的输入整形的方法便是开环控制的一种。
而提高零部件的刚度、阻尼势必会增大机构的重量,也会提高成本,而引入传感器不仅增加了系统的复杂性,还使控制难度也增大了。
什么是输入整形?
输入整形从字面意思就能够大致的理解了,就是把原本你期望的输入信号进行一步整形变换后再丢给后面的控制器。一个简单的控制系统是这样的:
而加入输入整形器后系统变成了这样:
显然,相当于只是在控制系统中加入了一个前馈环节。
输入整形器里面其实就是一系列的脉冲,它的作用就是把输入的信号与这一系列脉冲信号进行卷积后输出出来,成为整形信号再发给后面的系统。
输入整形的基本思想
试想有一辆小车放在桌上,车上用绳子挂了一个小球。我现在想让小车往前走1m,假如我直接给小车发的命令是走1m,那么根据常识我们很容易知道小车到1m停下来之后,小球并不会停下来,而是会来回摆动。
那么如果现在我换一种做法,我分两段走,先让小车走0.7m,看到小球摆到车前面时,再发命令让它走剩下的0.3m,这样一来,当小车停在1m的位置时,小球很有可能也就定住了。
其实从这个小例子可以看出输入整形的基本思想,就是一个输入信号不管怎么样都会在系统中产生一个振动,那么我就把原本的输入信号分几次给(最少两次),只要时间间隔合适,他们产生的振动通过线性叠加后,便可以实现相互抵消。比如下图,在0时刻处给一个A1脉冲信号,它产生的振动是红色线所示的衰减振荡,再在0.5s的时刻给一个A2的信号,它也会产生一个蓝色线所示的衰减震荡。然而当把它们俩产生的振动相加后,发现完美的抵消了。
输入整形器的实现
根据前面的介绍,输入整形器的关键就是计算出每一个脉冲信号的幅值以及它们各自的时滞。输入整形器的数学表示为
C ( s ) = ∑ A i e − t i s C(s)=\sum A_ie^{-t_is} C(s)=∑Aie−tis
输入整形器的计算方法有好几种,这里只介绍一种可以计算任意个脉冲的整形器的计算方法——脉冲响应法。
以二阶系统为例,下面是一个典型的二阶系统的传递函数
G ( s ) = ω n 2 s 2 + 2 ξ ω n s + ω n 2 (1) G(s)=\frac{\omega_n^2}{s^2+2\xi \omega_ns+\omega_n^2} \tag 1 G(s)=s2+2ξωns+ωn2ωn2(1)
它的单位脉冲响应为
g ( t ) = ω n 1 − ξ 2 e − ξ ω n t sin ω d t (2) g(t)=\frac{\omega_n}{\sqrt{1-\xi^2}}e^{-\xi\omega_nt}\sin\omega_dt \tag 2 g(t)=1−ξ2ωne−ξωntsinωdt(2)
其中 ω n \omega_n ωn为系统的自然频率, ω d \omega_d ωd为系统的阻尼振荡频率,二者关系为 ω d = ω n 1 − ξ 2 \omega_d=\omega_n\sqrt{1-\xi^2} ωd=ωn1−ξ2。
上文中提到的,整形器里面含有一系列的不同幅值和时滞的脉冲。假如一个脉冲的幅值和时滞分别为 A i A_i Ai和 t i t_i ti,那么它引起的响应为
y i ( t ) = A i ω n 1 − ξ 2 e − ξ ω n ( t − t i ) sin ω d ( t − t i ) (3) y_i(t)=\frac{A_i\omega_n}{\sqrt{1-\xi^2}}e^{-\xi\omega_n(t-t_i)}\sin\omega_d(t-t_i) \tag 3 yi(t)=1−ξ2Aiωne−ξωn(t−ti)sinωd(t−ti)(3)
系统总的响应为所有脉冲引起的响应之和:
y ( t ) = ∑ y i ( t ) = ∑ A i ω n 1 − ξ 2 e − ξ ω n ( t − t i ) sin ω d ( t − t i ) (4) y(t)=\sum y_i(t)=\sum \frac{A_i\omega_n}{\sqrt{1-\xi^2}}e^{-\xi\omega_n(t-t_i)}\sin\omega_d(t-t_i) \tag 4 y(t)=∑yi(t)=∑1−ξ2Aiωne−ξωn(t−ti)sinωd(t−ti)(4)
用三角函数差角公式展开
y ( t ) = ∑ A i ω n 1 − ξ 2 e − ξ ω