Matlab在六维腕力传感器系统标定中的应用
- 格式:pdf
- 大小:261.27 KB
- 文档页数:5
2001年9月 传 感 技 术 学 报 第3期Matlab在六维腕力传感器系统标定中的应用①吴涓,曹效英,宋爱国,黄惟一(东南大学,南京 210096)摘要:通过VC调用Matlab函数引擎,利用Matlab的有关函数和工具箱,对六维腕力传感器进行了静态解耦分析,并对动态特性做了研究.关键词:Matlab 静态解耦中国分类法:TP212.6 文献标识码:A 文章编号:100421699(2001)03201812051 概 述 Matlab是一个可视化的计算机程序,被广泛地使用于从个人计算机到超级计算机范围内的各种计算机上.它能够进行大量的科学计算和大量的工程运算.并且,通常这些运算人工难以实现,即使能够实现,其工作量也是非常可观的,其编程也是极其复杂.而Matlab工具能使这些计算变得简单而且准确有效,其产生的工作进程和效率是通常的编程方法所无法比拟的.Matlab具有以下的特点:(1) 功能强大.Matlab在迄今所有的三十几个工具包中还包括了功能性工具包和学科性工具包.功能性工具包主要用来扩充Matlab的符号计算功能、图形建模仿真功能、文字处理功能以及与硬件实时交互功能.这种功能性工具包能用于多种学科.而学科性工具包是专业性比较强的,如系统辨识工具箱,控制系统工具箱、模型预测工具箱等可用于各种特殊的应用领域.(2) 编程简单,具有良好的扩展性和开放性.Matlab有上百个预先定义好的命令和函数.这些函数能通过用户自定义函数进一步扩展.而且,Matlab能够和许多其他程序对话,如C,FORTRAN语言和Micros oft w ord等.在Matlab中,可以象调用Matlab自己的函数或命令一样调用编译了的C或FORTRAN的函数,同样的,C或FORTRAN的程序中,也可以调用M AT2 LAB的函数和命令,使得这些语言能充分利用Matlab强大的矩阵运算和方便的绘图功能,大大提高了工作效率.2 Matlab在传感器标定中的应用 我们所研究的六维腕力传感器是中科院合肥智能所和东南大学联合承担的八六三课题智能机器人主题中的一部分,获有上级主管部门颁发的型式批准证书.但由于技术资料的遗①来稿日期:2001201202基金项目:本课题受国家教育部博士点基金资助项目98028619281 传 感 技 术 学 报 2001年失,需要重新对其进行标定和解耦以及特性分析.六维腕力传感器的标定是提高六维腕力传感器精度的关键,原有的六维腕力传感器的标定及测试软件是用C语言编写的,软件工作量大,调试周期长,而且可读性差,缺少可维护性.Matlab语言的出现为六维腕力传感器的标定和测量提供了一个功能强大的软件工具.在原有硬件的基础上,我们对数据处理的软件部分做了很大的改进,采用VC和Matlab相结合的方法,大大提高了数据分析和处理的精度和效率,结果更为直观.2.1 腕力传感器的解耦原理六维腕力传感器弹性体的主梁上对称贴有16个应变片可以组成8个电桥,输出电压正比于应变片平面方向的分力.根据输出电压与力的线性关系,对应变片输出电压信号做适当的处理,就可得出力的三个分量和力矩的三个分量.首先假设传感器系统模型为线性系统,即V=H×F,F=C V,C=(H T H)-1H T其中V∈R6为输出电压信号,F∈R6为作用在传感器上的力和力矩,H∈R6×6为常数矩阵,其元素由传感器所决定.传感器标定实际就是求标定矩阵 C.也就是根据加载在传感器上的力(称为标定力)和传感器各通道输出测量传V由上式求解出H.其中C就是标定矩阵,或称传递系数矩阵.求解过程实际是多元函数的最小二乘法拟合.以往,解耦矩阵的计算,我们需要自己根据最小二乘法的原理用VC或C编制矩阵方程求转置和逆的程序,以及多项式拟合曲线(根据传感器模型,这里指线性拟合)以及拟合曲线显示程序.以上这些单纯用C或VC编写都有较大的工作量.现在,我们用VC编程,将从腕力传感器中得到的八路信号经数据采集卡采集到后,以文本文件的形式存储,这样,数据解耦和标定以及图形化显示的工作主要由Matlab来完成,我们只需要由VC直接调用这些Matlab函数文件就可以了,无需编制复杂的VC关于多元矩阵方程的求解和图形显示程序.Matlab关于线性方程求解、多项式拟合、以及图形显示都有现成的函数,关键是如何用VC调用Matlab的脚本文件.由于Matlab缺少如VC、C等直接读写I/O口的函数,这样不得不用VC或C读I/O的函数,先从数据采集卡中读取数据,供Matlab处理.2.2 用VC调用Matlab本文采用VC内部调用Matlab函数法.具体如下:(1)先建立一个新的项目,或者打开一个已有的项目,然后选择菜单:Project->Settings ->C/C++Categ ory:Precom piled Headers选择:Automatic use of precom piled headers,Through header:stdafx.h(2)生成几个连接库文件.在目录c:\Matlab\extern\include下找这几个文件:libeng. def libmx.def libmat.def在DOS行命令下生成三个库文件:c:\msdev\bin\lib/def:lib???. def/out:lib???.lib把生成的三个LI B文件加入到工程的LI NK项.(3)写包含engine功能的文件 可以参考:c:\Matlab\extern\exam plex\eng2mat\eng2 windem o.c但是一定要有包含具体路径的engine.h(4)设置其它编译连接选项.在I NC LUDE加上c:\Matlab\mxtern\include LI B加上c: \Matlab\bin.VC的格式如下#include <windows.h >#include <stdlib.h >#include <stdio.h >#include <string.h >#include ”C :\M AT LABR11\extern \include \engine.h ”v oid matlab ::draw (){extern Engine 3ep ;/33Start the M AT LAB engine 3/if (!(ep =engOpen (NU LL ))){MessageBox ((LPSTR )”Can ′t start M AT LAB engine ”,M B 2OK );exit (-1);}engEvalString (ep ,”draw ;”);//draw 是作者用Matlab 编写的函数engclose (ep );return ;}这种方法,Matlab 的函数和VC 的源程序一起被编译.Matlab 的函数库可以看作是VC 的外部函数库.VC 调用Matlab 的函数就象是调用自己的函数一样方便.值得注意的是,从VC 程序中调用Matlab ,头文件必须包含engine.h ,用engOpen ()打开一个引擎,在调用时须先用engOpen (NU LL )来初始化;Matlab 的命令要由engEvalString 来传递,此外,C 与Matlab 存储矩阵的方式不同,C 以行存储矩阵,而Matlab 是按列存储.这样,Matlab 与VC 通道就建立了.2.3 静态解耦运算和曲线拟合我们对每维力做加载实验,在量程范围内均匀采样11个点,测量数据采集卡对应电压输出值,测量多次取平均值.假设作用在传感器的力向量F 1=[F i 1F i 2…F i 6]T ,i ∈n ,测量出各通道的输出为V i =[V i 1V i 2…V i 6]T ,i ∈6,由式(1)可得关于矩阵H 的第j 行元素的线性方程组(j ∈6): V 1j =F 11H j 1+F 12H j 2+…+F 16H j 6 V 2j =F 21H j 1+F 22H j 2+…+F 26H j 6 … V nj =F n 1H j 1+F n 2H j 2+…+F n 6H j 6(6)亦即V j =FH j j ∈6-用Matlab 求解线性方程V =H ×F 非常简单.要求得H ,Matlab 有两种方法.一种方法是用除法运算来求即,H =V/ F.另一种是用广义逆来求H =V 3pinv (F ).这两种解都是最小二乘意义上的解,结果是一致的.在测量了单维力作用下负载逐渐变化时各通道输出电压值后,需要对全部测量数据做线性拟合,来了解各维力/力矩之间的影响即耦合作用.我们使用Matlab 多项式拟合函数plotfit (),由于存在维间耦合,在单方向上加力时,会对其他方向上产生力或力矩作用.因此,381第3期 吴涓,曹效英等:M atlab 在六维腕力传感器系统标定中的应用 解耦矩阵非主对角元不全为零.最终我们计算得到的解耦矩阵:C = 8.7001 0.0624-0.0184 0.2977 0.01150.5690 0.1162 8.2939 0.1455-0.0604 0.1992-0.6765-0.1431-0.0056 7.0509 0.0461 0.0200 0.4375 0.0594 8.5497 0.3974 9.8246 0.2200-1.4152-9.4495-0.1121-0.1419-0.308410.2482-0.7219 1.4838-0.0557-0.0436-0.3934-0.3367 8.5424 该矩阵中C 5,1、C 4,2较大,接近主对角元.说明Fx 对My ,Fy 对Mx 的耦合作用相对于其它分量要大.图1显示单方向逐渐加力时,各主通道的输出变化情况.从图上可以得知主通道上单维力/力矩线性度很好,并且关于零点对称.图2为测量六维力/力矩数据的三维立体图,用三维表面函数surf 实现.其中,X 轴1-6分别表示Fx 2Mz 六个方向输出,Y 轴表示分别在这六个方向加力或力矩,Z 轴表示各方向对应输出值大小.该图实际就是解耦矩阵C 的立体显示.对角线上的尖峰对应于解耦矩阵主对角元,分别加Fx 、Fy 方向力时,Vmy 、Vmx 上出现两个尖峰,对应于解耦矩阵C 5,1、C 4,2.这很直观的说明了力与力矩之间的耦合作用.与上面的理论分析是一致的.图1 六维力/力矩对应电压输出2.4 动态特性研究腕力传感器的动态标定是在完成静态标定的基础上进行的,Matlab 的系统工具是一个很有力的动态特性分析工具.它的辨识模型可以是非参数模型类中的频域描述模型、脉冲响481 传 感 技 术 学 报 2001年应模型,也可以是参数模型类中的ARX 模型、B J 模型等.非参数模型是由腕力传感器的实测频响曲线和单位阶跃响应曲线直接获得传感器的时、频域的特性参数.而参数模型则是用有限参数来描述对象模型,求出传递函数,进而获得时频域的特性参数.以spa 函数为例,spa 函数的功能是利用频谱分析方法估计对象的频率响应和噪声频谱,利用这个函数我们能直接得到频率响应估计和噪声频谱估计的波特图.具体方法是,[g ,[phiv ]]=spa [z ]其中,z ———指对象的输入输出数据向量z =[y u ],y 、u 分别是各主通道输出电压值和输入力值构成的列向量;g ———频率响应函数估计G (e ωi );[phiv]———噪声的频谱估计Φv (ω).3 结 论 (1)利用Matlab 矩阵运算、多项式拟合以及平面图形处理函数,能够非常简便的求解腕力传感器的解耦矩阵,并能提高静态耦合率的精度.(2)利用Matlab 系统辨识工具箱(System Identification T oolbox ),能够建立腕力传感器的动态参数和非参数数学模型,确定腕力传感器的动态时频域性能指标,为估计传感器的性能、改进传感器的设计提供了依据.参考文献[1] 许欣等.Matlab 工具箱应用指示———控制工程篇,电子工业出版社,2000[2] 齐波、董能力.通过VC ++实现对M AT LAB 的调用,编程爱好者,http ://w w 2000[3] 刘正士等,六维腕力传感器动态性的实验研究与参数辨识———非参数模型,智能机器人传感技术实,1994年第二卷The Application of Matlab in the Demarcationof Robot Wrist Force SensorWU Juan C AO Xiaoying SONG Aiguo HUANG Weiyi(Dept.of instrument Science and Engineering ,S outheast Univ.,Nanjing 210096P.R.China )Abstract :This paper introduces a method on how to use Matlab function engine in VC programming.In this system ,Matlab function and toolbox are used to decouple the matrix and analysis the static and dynamic characterstics of the wrist sens or.K ey w ords :wrist force sens ormatlabstatic decouple作者简介吴涓(1978-),女,硕士研究生.专业为测试测量技术及仪器,研究方向为机器人传感器、机器人虚拟建模技术.581第3期 吴涓,曹效英等:M atlab 在六维腕力传感器系统标定中的应用 。