前面的文章解决了收敛的问题。但是还没有解决我们的控制问题,因为很多时候我们不是要系统的状态收敛到零点,而是收敛到我们的指定值上去。
PART I
实际上,我们利用基础指数函数能直接做到的只是让一个变量向零点收敛,不能向其他点收敛。为了向目标点收敛,我们需要通过参数替换,使新替换的参数通过向零点收敛来达到目的。
假设系统的状态变量是x,目标值是c,最简单的想法就是,我们定义状态变量与目标值之间的差作为新的变量y,通过令y趋向于0,来实现控制目标,即令:
那么,我们有
将(2)带入系统的状态方程中,有:
我们现在来构造控制变量,令
,带入(3)中,有:
这个种形式的微分方程的解可以参见我的博客:DMP(Dynamic Movement Primitives)算法简介中的(2)式。但这里采用一种简便的方式,我们通过选取合适的参数,使项直接为0,这样就(4)式就变成了最简单的微风方程形式,我们知道
就成为了指数中时间的系数,令其小于0,
就能随时间收敛到零。即:选取参数,令:
选定参数后,我们再将参数带回(3)式,并将重新替换成
,就可以求得闭环控制时的状态方程了。
PART II
下面我们来基于状态方程
来说明整个过程。
首先,假设我们的控制目标值是常数c,令, 则
, ,带入上式,我们有
令,带入式子,得到
假设我们选择的配置极点为-1,则,将
带入可得
基于式(6)(8),simulink的仿真图如下:

其中黄线是目标值,蓝线是系统变量,我们可以看到,系统变量能很好的跟踪目标值。需要说明的是,我们的c是一个常数,因此体现在信号中,它是一个阶跃的。对于不同的参数跟踪,我们可以用不同的阶跃值来表示。
以上。
网友评论