基于Lua的工业机器人解释器实现的研究.doc_第1页
基于Lua的工业机器人解释器实现的研究.doc_第2页
基于Lua的工业机器人解释器实现的研究.doc_第3页
基于Lua的工业机器人解释器实现的研究.doc_第4页
基于Lua的工业机器人解释器实现的研究.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Lua的工业机器人解释器实现的研究 张茂玲1杨锦涛2 (1.镇江中船现代发电设备有限公司,江苏镇江21xx; 2.上海擎宝机器人有限公司,中国上海xx00) 【摘要】针对机器人编程语言和控制程序模块化的发展需求,提出一种基于Lua脚本语言的机器人语言解释器的实现方法。用Lua作为整个系统的构建者,对机器人语言进行词法、语法分析,调用控制代码完成对机器人的控制,具有扩充性和维护性强,系统开发效率高,解释效率高的特点。该解释器结合vsxx运行,利用robotictoolboxformatlab仿真验证,证明该解释器可以很好地解释工业机器人语言,为解释器的构建提供了一种新的模式。 关键词lua;机器人语言;解释器;模块化 引言 工业机器人的快速发展,逐渐使人类从繁重、单调或是危险的工作中解放出来。为了缩短机器人的开发周期,需要一种简单易懂的语言对机器人进行编程,这就是机器人语言产生的初衷1,它更符合人的语言习惯和思维方式,即使不懂编程语言的工作人员也能够很快的理解和运用。这就需要把这种类人思维的指令语言解析成为C/C+能够理解和运用的语言。机器人语言解释器的主要功能就是将文本形式的简单的机器人语言,也就是指令代码转换为程序需要的数据结构或格式,以控制机器人的运行,所以解释器在机器人软件系统中起到非常重要的作用,其解释效率将直接影响工业机器人的工作效率。 Lua的设计目的就是为了嵌入到应用程序中,从而为应用程序提供灵活的扩展和定制功能。轻量级Lua语言的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快,在目前所有脚本引擎中,Lua的速度是最快的2。这一切都决定了Lua是作为嵌入式脚本的最佳选择。因此选用Lua脚本语言构建解释器。 与文34中的解释器不同的是Lua不仅仅是把参数传递给主程序。基于Lua的解释器用Lua整合现有资源,构造整个系统的框架,调用控制模块来实现具体功能,降低模块之间耦合程度,其优势在于扩展性、复用性较强,并且方便实现更复杂的结构和逻辑,为将来更高级的机器人语言解析提供了可能。脚本语言无需编译,在解释器的开发阶段可以实现快速、实时的修改调试,缩短开发周期。 1工业机器人控制系统及编程语言设计 1.1工业机器人控制系统 操作者在界面利用规定的机器人语言指令编写程序,用解释器对机器人语言进行解析,调用相应的控制模块,控制模块包括路径规划模块、速度规划模块、运动学模块和动力学模块,完成轨迹规划、插补、逆运动学等运算,最后Lua把伺服电机需要的关节角度、关节角速度和加速度参数传递给运动控制器,实现对机器人的控制。 1.2工业机器人编程语言设计 机器人编程语言需要运动指令和流程控制指令,解释器的任务是要对指令进行解析,控制机器人完成指令动作。 2基于Lua的解释器设计 2.1Lua简介 Lua是一种嵌入式语言,Lua具有与C/C+良好的交互能力,十分简洁的API,可以说是目前脚本语言中做的最好的1。我们可以把Lua作为C/C+的一个库,同样也可以把C/C+作为Lua的一个库。Lua与C/C+可以通过一个虚拟栈来进行数据交互,十分简洁,这一点对实现工程的模块化非常重要。解释器将C+作为Lua的一个库来使用; Lua提供了丰富的字符串处理函数; 灵活的table和function,table是Lua中一种特别的结构,类似数组,但它其中的元素可以是任意类型的,甚至可以是一个函数。Function具有参数变长机制,这些为解析工作提供了极大的方便; Lua具有可移植性,Lua可以运行在任何平台上,包括:PlayStation、Xbox等等。 由于Lua具有的这些特点,它可以作为一种高效便捷的解析工具。 2.2基于Lua解释器的体系结构 首先机器人程序,完成后,调用Lua读取文本中的机器人程序,解析每一句代码,检测词法语法错误,有错误时抛出错误类型,无错误时分解成指令和参数,根据不同的指令调用不同的控制模块:把示教点位置姿态信息传递给路径规划模块,得到路径参数,把速度参数和路径参数传递给速度规划模块,把速度规划参数和路径参数传递给插补模块,得到笛卡尔空间末端执行器插补状态参数,最后调用逆运动学求解模块,推出六个关节运行时间对应的位置、速度、加速度信息,传递给伺服驱动控制器完成动作。在这里Lua不仅是传统解释器的作用,而是整个系统的调度者,有利于机器人控制系统的模块化,这样一来,假如速度规划模块需要优化,我们可以直接把这个模块替换成优化后的模块。 例如解释器对下面一段机器人语言进行解析: MOVCP002P003P004V010Z0 MOVLP005V010Z0 MOVCP005P006P007V010Z0 MOVCP007P006P005V010Z0 需要注意的是圆弧运动(MOVC)至少要给出三个点,解释器把这三个点传递给控制模块,控制模块按照圆弧规划的方式进行插补;直线运动(MOVJ)需给出目标点,控制模块根据传感器得出的机器人此刻所处位置信息,根据两点间直线进行插补;采用样条插补(MOCS)时需要说明是使用三次样条、五次样条或B样条方式进行插补。 解释器读取机器人语言存入字符串a。Lua分析程序,把每一句指令存入tablebi。通过string.find()函数查找换行符的位置,然后用string.sub()函数提取中间字符串,从而分割出每一句代码。把每一句代码存入bi,b为一个table类型。再把bi分解成单个关键字存入cj,c1存放指令字符串,c2,c3等存放参数。 在此定义了一个存放指令的tablecmd cmd= MOVJ=“P”,“V”,“Z”,cfunc=cmovj, MOVL=“P”,“V”,“Z”,cfunc=cmovl, 这里table的使用体现了Lua的灵活之处,用指令直接作为table的索引,使用cmdc1可以直接索引到相应指令对应的参数和控制函数,进而进行参数检测和函数调用。这个技巧使得逻辑简单清晰,类似数组的索引方式提高了解析效率,并且在进行增加或更改指令等后期维护时,只需在cmd中添加或更改就可以了,具有很好的可维护性。 用cmdc1j匹配参数,检测参数格式是否正确,格式错误时,输出错误类型。 在C+代码中使用注册函数Lua_register(L,“lname”,ame),便可以在Lua中直接使用cmdc1.cfunc(c2,c3,c4)用来调用不同的控制模块并传递参数,控制模块中通过Lua_tostring(),Lua_tonumber()等来得到传递的参数。 2.3基于Lua的解释器界面实现 常用的界面实现形式是Qt,基于Lua的解释器研究采用一种新颖的实现形式Qtlua,Qtlua库旨在用Lua脚本语言使Qt应用程序可脚本化,为QtScript模式提供一种新的选择,因此它具有脚本的特点2。很多脚本语言都可以实现对Qt的封装,之所以选择Lua是因为Lua的小巧,可以将解释器模块式的嵌入到其他机器人平台中,并且可以方便的进行在线维护和升级。 Qtlua中的部分函数介绍: 信号与槽 connectsignalandslotofgivenQtobjects qt.connect(qobject1,“qt_signal_signature()”,qobject2,“qt_slot_sign ature()”) connectslottogivenluafunction qt.connect(qobject,“qt_signal_signature()”,lua_function) 文件操作函数 filename=qt.dialog.get_open_filename(“caption”,“directory”,“filter”,QFileDialog:Option) filename=qt.dialog.get_save_filename(“caption”,“directory”,“filter”,QFileDialog:Option) 标准消息框(关于,警告,错误等等) qt.dialog.msg_about(“text”,“title”) button=qt.dialog.msg_critical(“text”,“title”,QMessageBox:StandardButtons, QMessageBox:StandardButton) button=qt.dialog.msg_information(“text”,“title”,QMessageBox:StandardButtons, QMessageBox:StandardButton) Qtlua利用Qtdesigner可视化的构建界面,用Lua实现具体的功能。这种嵌入式的界面模块可以方便的扩展原有应用程序的功能。编译器可以实现打开、新建、保存程序文件;单步、全速、终止运行等操作。 3实验及结果 用自己开发的解释器软件RLI(RobotLanguageInterpreter)结合vsxx来解析文本,调用控制模块生成数据,利用robotictoolboxformatlab进行仿真验证。在时加入一些不必要的空格和换行、替换控制模块,以测试解释解析的正确性。大量的测试表明,解释器能够正确的解析机器人语言,调用相应函数,执行循环结构,控制机器人执行相应动作等。当机器人程序编写有错误时,可以对其中的错误进行提示。图1中的程序描述了工作流程:机器人从位置点P001移动到位置点P002,然后按照弧线-直线-弧线对工件喷涂,等待工件底座旋转,再次喷涂,反复几次后停止于位置点P007,移动到位置点P008待命。运行仿真结果如图2所示。 4结论 通过Lua脚本语言,可以准确、快速的解析机器人语言,可以使机器人语言的编写简单化,使非专业人员也可以对机器人进行编程。Lua脚本语言在机器人中的运用可以实现机器人控制程序的模块化,降低模块间的耦合度,方便实现模块的替换、升级和扩充;可以的大大缩短机器人解释器开发时调试的时间;解释器可以便捷的添加或删除指令,简化了后期的升级维护,实现了解释器的开放性;Lua具有良好的可移植性,根据不同平台修改cmd中的内容后就可以在其他机器人控制平台运行,具有广泛的应用范围。 参考文献 JohnJ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论