如何通过系统辨识获得伺服系统精确模型,在此基础上设计满足性能的控制器?

作者从系统辨识和控制器设计2方面回答。
标题1

楼主邀请:

如何通过系统辨识获得伺服系统精确模型,在此基础上设计满足性能的控制器?


桂凯回答:

感谢邀请。

我之前做的辨识主要是关于机器人动力学参数方面的辨识,比如惯量,重力等,感觉你问的应该是关于伺服系统模型辨识,比如电机内的电阻电感什么的。

首先,给楼主泼点冷水。国内伺服做了这么多年,一直做不上去,还处于低端伺服的水平,这里面原因很多。而伺服系统这套理论已经很成熟,我认为很多难点还在于硬件实现上,比如电流环频率上不去。我们交大这边机器人所也有好几个团队在做伺服驱动器,但性能上不够好,成品率一般。接下来我分别从系统辨识和控制器设计分享自己的一点小心得。

 系统辨识

不管是机器人惯性参数辨识,还是伺服参数辨识,当建完模型后,对于系统辨识来说,都是一样的。所以,这里用我做的一个单连杆系统辨识为例,分享下我的心得。系统的动力学方程如下(这应该是最简单的机器人方程了,里面都是1*1矩阵) 。其中Tm是电机输出力矩(Tm可通过读取电流获得),J是转动惯量,B是粘滞系数,G是重力矩,F是库伦摩擦力,theta是关节角度。
公式1
系统辨识方法有很多种,最好用地当然还是最小二乘,它要求方程能写成矩阵相乘的形式即可,上面方程我们可以写成
公式2
这样形式的方程有一个很大的特点,向量phi跟杆件运动状态无关,它是我们要辨识的参数,向量omega全是跟运动状态相关的,它都是可以通过传感器反馈得到的(Tm可通过读取电流获得)。于是乎,我们可以从中总结到由方程1到方程2是个什么样的过程。当我们把Tm和omega都获得,那phi就可以很容易的套最小二乘公式获得。

剩下的问题是如何确定 omega。一般机器人中有的传感器是精度非常高的位置传感器,也即theta可以直接获得,想当然dot(theta) 和ddot(theta)可以通过数值差分获得,但不幸的是,这种运算带来的噪声实在是太大了,ddot(theta)的噪声大到你会以为获得的加速度信号真的是噪声。请看下图(关注蓝线,忽略掉红线^-^)


所以这里滤波就很重要,然而,滤波又会带来延时的问题。于是,我们要把方程两边都分别输入到同一个滤波器中(向量phi为常数,经由滤波器处理后无影响)。


得到我们的最终方程(3), 再套入到最小二乘公式中,即可轻松获得辨识参数phi。
公式3
最后有几点说明下 :1. 上述系统辨识是基于连续时间模型的。很多教材中都会用离散模型作为例子去做系统辨识(离散的发展地也更为成熟)。过程如下:将方程1通过差分离散化,这样连续模型中的系统参数Ac变为离散模型中的Ad,再用很多现成的方法去(matlab系统辨识工具箱)辨识离散模型,得到辨识结果Ad1,最终在反向计算得到连续模型参数的估计值Ac1。


这种方式有个较大的问题:Ad和Ad1结果非常接近,但不能保证Ac与Ac1页非常接近。简单举例,Ac=100*Ad,那如果Ad与Ad1相差0.1,则Ac与Ac1会相差到10。这种方法并不好用,现在大家趋向于直接对连续系统进行辨识。G.P.Rao and H.Unbehauen, Identification of continuous-time systems Identification of continuous-time systems.

如果楼主的模型不能写成线性形式,那最好找找文献,有什么大家常用的方法。上述的这种方法很实用,得到的结果物理意义也明确。

2. 3rd Butterworth filter转到状态空间中进行计算,这方便编程。

3.辨识中采样周期为500Hz,结果如下表(相关物理量是折算到连杆低速端,即减速器输出端)。这个周期并不是越大越好,我们选取的这个值也是参照别人的。最小二乘大多情况下都能输出结果,而辨识参数是否正确,还得根据参数的物理意义来判断。比如,整个系统惯量的数量级我们大致能估计出来,重力矩,摩擦力也是能有较准确的预估。我们试过在200Hz下的结果与500Hz的完全不同,最终我们是根据所辨识参数的物理意义来判断200Hz下的结果不对。


4.最终我们用辨识到的参数去计算Tm,再与实际测量的Tm对比,如下图。在一些拐角区域,结果并不算非常理想,这主要是由于电机这会在换向,此时的摩擦力(减速器引入的)较为复杂,我们库伦摩擦力的模型不够描述真实的模型。


综上所述,楼主建完伺服系统模型后(这类模型的资料网上非常多),将其换成线性形式,再注意滤波和采样频率的选择,另外,电机最好运行一些较复杂的曲线(多个频率叠加),应该就可以得到一组较好的结果。 分享一本好书《动态系统辨识——导论与应用》。

 控制器

设计我的控制工作主要是关于自适应控制,一般只要建立物理模型,不需要基于系统辨识的结果再去设计控制器......所以这方面我实践地较少,只能分享一些阅读文献的心得。

1. 获得系统物理模型和相关参数,转换成线性状态空间的形式,再通过状态反馈设计控制律。在计算控制律时,需要像我们之前说的,获取系统的状态变量(omega),可以通过滤波实现,也可以通过更高级的Kalman滤波器去估计这些状态变量。

2.更一般的方法是联立物理模型和控制律,从中若能找到李雅普诺夫方程,则这个控制律就是对的,否则就更换控制律,继续找。这种需要有敏锐的直觉能力,因为寻找李雅普诺夫方程没有固定的方法,很多时候只能靠瞎猜。

只要我们研究的物理模型不是全新的,那能找到很多现成的控制器算法。就比如楼主说的伺服系统,相关文章也是铺天盖地,甚至都写进教科书了,楼主没必要自己去推控制律,可以找到现成的。
 
相关标签:
  • 伺服系统
  • 精确模型

参与评论

桂凯

上海交通大学 机械与动力工程学院 机器人研究所博士生,研究方向:机械电子,研究具体内容:生机电一体化、机器外骨骼、机器人动力学与控制、柔顺控制等,擅长领域:机器人动力学,柔顺控制、人机交互控制等。

推荐文章

为什么我们在机器人运动控制中一直在强调力控? 机器人控制该怎么入门? 机械设计(课程)——丝杆传动系统结构设计 浅谈阻抗 经典SEA线性动力学模型及其简化与力矩求导