基于Eclipse的多传感器数据融合算法仿真系统(1)(2)
2014-03-06 01:13
导读:图2 系统结构图4 关键实现技术4.1 Java/Matlab多语言混编技术 为了使多传感器数据融合仿真软件开发效率高、结构灵活、易于使用,本文引入了Eclipse平台。但

图2 系统结构图4 关键实现技术4.1 Java/Matlab多语言混编技术 为了使多传感器数据融合仿真软件开发效率高、结构灵活、易于使用,本文引入了Eclipse平台。但Eclipse是基于Java语言的,数值计算并不是Java的强项,若使用它来直接实现复杂的数据融合算法并不可取,而Matlab则在数值分析、矩阵运算、信号处理和图形显示方面有很大的优势。我们需要将这两种平台的优势综合起来,使得用户既能使用一个集成的仿真系统来执行仿真任务,又能充分发挥Matlab的优势,将更多的精力花在算法的设计和改进上。所以,如何将Matlab的数值计算能力与Java的软件构建能力结合起来,就成了一个十分关键的问题。 经过调查和研究,本文找到了合适的方案,即通过多语言混编技术来解决这个问题,具体来说,就是用mcc编译器将算法的M文件编译成dll(动态链接库)文件,然后让Java通过JNI接口来调用这些算法模块。然而,目前应用比较广泛的是VC和Matlab之间的调用,由于Java程序是通过虚拟机来解释执行的,并不是原生(native)程序,所以Java与Matlab之间的跨语言调用实例还很鲜见,实现起来更加复杂,其中主要涉及以下两个技术。4.1.1 mcc编译器 Matlab以其强大的功能而享有盛誉,然而仅仅使用Matlab桌面的话,却存在一些缺点:Matlab语言是解释执行的,效率比较低;程序不能脱离其环境运行,不能被用于开发通用性较强的软件;算法和数据的保密性差等等。以上问题有若干种解决方案,其中一种就是使用mcc,它是MATLAB自带的一个编译器,能将m文件转化成 C、C 或p等各种类型的源代码,并根据需要生成可执行文件、lib文件(库文件)、dll文件或S函数文件等。编译后M文件里的内容被加密压缩存放在一个CTF(Component Technology File)的文档里。而具体计算工作由一个名为MCR(MATLAB Component Runtime)的共享库集合工具提供,如果目标机器中没有Matlab环境,则需要将MCR一起部署。mcc编译器可以在命令行通过mcc命令来调用,该命令有众多参数可供选择,开发者可以在Matlab帮助中找到使用方法。4.1.2 JMatlab/Link JstatCom[6]是一个开放源代码的Java数值计算框架,通过它我们可以在Java程序中直接与外部的数值计算软件/模块通讯,目前它提供了Matlab、R、Gauss and the Gauss Runtime Engine、Ox的调用引擎。而JMatlab/Link[7]是JStatCom的一个扩展,它在JStatCom提供的Matlab引擎之上实现了一个更完善的Matlab调用方案。通过这套方案创建的Java程序可拥有完善的Matlab数值计算和图形绘制功能、能方便地控制计算任务的执行过程、获取所有的输出信息。JMatlab/Link还可以直接整合Matlab程序运行所需的MCR(Matlab Component Runtime)到程序中,使得没有Matlab运行环境的用户也无需单独安装运行库,简化了程序的部署。JStatCom和JMatlab/Link的最新版本可以在找到。 JMatlab/Link是由若干动态链接库和配置文件组成的,使用也很简单,只要把它放到Java程序的根目录下即可。如果目标环境没有Matlab运行环境,或者其Matlab版本与当前版本不符,则需要将当前版本的Matlab提供的MCR放置在该目录中。 通过JStatCom与JMatlab/Link的结合使用,Java程序可以直接向Matlab计算模块传递参数和接收返回值,并控制计算任务的运行。JStatCom提供的PCall类将计算任务进行了良好的封装,使得我们可以启动一个单独的线程来执行计算任务,让系统主界面在运算期间仍然保持响应。另外,为了方便与Matlab之间的参数传递和数据处理,JStatCom还提供了UMatrix工具类来简化Java中的矩阵操作。4.2 插件技术 Eclipse平台是基于插件的,而插件具有明确定义的结构和规范,所以Eclipse专门提供了PDE(插件开发环境,Plug Development Environment)来辅组用户创建、开发、测试、调试和部署插件,并确保用户创建的新插件遵循规范、能被平台正确地识别和调用。以下通过系统中的M文件编辑和编译插件为例,来说明插件开发的一般流程。 首先在Eclipse中新建一个插件项目,按照新建向导,填充插件的标识、版本、名称等信息。点击“完成”之后,得到的项目结构如图3所示。