缔冠期刊网

基于Lua的工业机器人解释器实现的研究

2022-06-09

张茂玲1 杨锦涛2

(1.镇江中船现代发电设备有限公司,江苏 镇江 212009;

2.上海擎宝机器人有限公司,中国 上海 201600)

【摘 要】针对机器人编程语言和控制程序模块化的发展需求,提出一种基于Lua脚本语言的机器人语言解释器的实现方法。用Lua作为整个系统的构建者,对机器人语言进行词法、语法分析,调用控制代码完成对机器人的控制,具有扩充性和维护性强,系统开发效率高,解释效率高的特点。该解释器结合vs2008运行,利用robotic toolbox for matlab仿真验证,证明该解释器可以很好地解释工业机器人语言,为解释器的构建提供了一种新的模式。

教育期刊网 http://www.jyqkw.com
关键词 Lua;机器人语言;解释器;模块化

0 引言

工业机器人的快速发展,逐渐使人类从繁重、单调或是危险的工作中解放出来。为了缩短机器人的开发周期,需要一种简单易懂的语言对机器人进行编程,这就是机器人语言产生的初衷[1],它更符合人的语言习惯和思维方式,即使不懂编程语言的工作人员也能够很快的理解和运用。这就需要把这种类人思维的指令语言解析成为C/C++能够理解和运用的语言。机器人语言解释器的主要功能就是将文本形式的简单的机器人语言,也就是指令代码转换为程序需要的数据结构或格式,以控制机器人的运行,所以解释器在机器人软件系统中起到非常重要的作用,其解释效率将直接影响工业机器人的工作效率。

Lua的设计目的就是为了嵌入到应用程序中,从而为应用程序提供灵活的扩展和定制功能。轻量级Lua语言的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快,在目前所有脚本引擎中,Lua的速度是最快的[2]。这一切都决定了Lua是作为嵌入式脚本的最佳选择。因此选用Lua脚本语言构建解释器。

与文[3][4]中的解释器不同的是Lua不仅仅是把参数传递给主程序。基于Lua的解释器用Lua整合现有资源,构造整个系统的框架,调用控制模块来实现具体功能,降低模块之间耦合程度,其优势在于扩展性、复用性较强,并且方便实现更复杂的结构和逻辑,为将来更高级的机器人语言解析提供了可能。脚本语言无需编译,在解释器的开发阶段可以实现快速、实时的修改调试,缩短开发周期。

1 工业机器人控制系统及编程语言设计

1.1 工业机器人控制系统

操作者在界面利用规定的机器人语言指令编写程序,用解释器对机器人语言进行解析,调用相应的控制模块,控制模块包括路径规划模块、速度规划模块、运动学模块和动力学模块,完成轨迹规划、插补、逆运动学等运算,最后Lua把伺服电机需要的关节角度、关节角速度和加速度参数传递给运动控制器,实现对机器人的控制。

1.2 工业机器人编程语言设计

机器人编程语言需要运动指令和流程控制指令,解释器的任务是要对指令进行解析,控制机器人完成指令动作。

2 基于Lua的解释器设计

2.1 Lua简介

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不仅是传统解释器的作用,而是整个系统的调度者,有利于机器人控制系统的模块化,这样一来,假如速度规划模块需要优化,我们可以直接把这个模块替换成优化后的模块。

例如解释器对下面一段机器人语言进行解析:

MOVC P002 P003 P004 V010 Z0

MOVL P005 V010 Z0

MOVC P005 P006 P007 V010 Z0

MOVC P007 P006 P005 V010 Z0

需要注意的是圆弧运动(MOVC)至少要给出三个点,解释器把这三个点传递给控制模块,控制模块按照圆弧规划的方式进行插补;直线运动(MOVJ)需给出目标点,控制模块根据传感器得出的机器人此刻所处位置信息,根据两点间直线进行插补;采用样条插补(MOCS)时需要说明是使用三次样条、五次样条或B样条方式进行插补。

解释器读取机器人语言存入字符串a。Lua分析程序,把每一句指令存入table b[i]。通过string.find()函数查找换行符的位置,然后用string.sub()函数提取中间字符串,从而分割出每一句代码。把每一句代码存入b[i],b为一个table类型。再把b[i]分解成单个关键字存入c[j],c[1]存放指令字符串,c[2],c[3]等存放参数。

在此定义了一个存放指令的table cmd[]

cmd={

MOVJ={“P”, “V”,“Z”,cfunc=cmovj},

MOVL={“P”, “V”,“Z”,cfunc=cmovl},

……

}

这里table的使用体现了Lua的灵活之处,用指令直接作为table的索引,使用cmd[c[1]]可以直接索引到相应指令对应的参数和控制函数,进而进行参数检测和函数调用。这个技巧使得逻辑简单清晰,类似数组的索引方式提高了解析效率,并且在进行增加或更改指令等后期维护时,只需在cmd[]中添加或更改就可以了,具有很好的可维护性。

用cmd[c[1]][j]匹配参数,检测参数格式是否正确,格式错误时,输出错误类型。

在C++代码中使用注册函数Lua_register(L,“lname”,cname),便可以在Lua中直接使用cmd[c[1]].cfunc(c[2],c[3],c[4])用来调用不同的控制模块并传递参数,控制模块中通过Lua_tostring(),Lua_tonumber()等来得到传递的参数。

2.3 基于Lua的解释器界面实现

常用的界面实现形式是Qt,基于Lua的解释器研究采用一种新颖的实现形式——Qtlua,Qtlua库旨在用Lua脚本语言使Qt应用程序可脚本化,为QtScript模式提供一种新的选择,因此它具有脚本的特点[2]。很多脚本语言都可以实现对Qt的封装,之所以选择Lua是因为Lua的小巧,可以将解释器模块式的嵌入到其他机器人平台中,并且可以方便的进行在线维护和升级。

Qtlua中的部分函数介绍:

信号与槽

——connect signal and slot of given Qt objects

qt.connect(qobject1, “qt_signal_signature()”, qobject2, “qt_slot_sign

ature()”)

——connect slot to given lua function

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利用Qt designer可视化的构建界面,用Lua实现具体的功能。这种嵌入式的界面模块可以方便的扩展原有应用程序的功能。编译器可以实现打开、新建、保存程序文件;单步、全速、终止运行等操作。

3 实验及结果

用自己开发的解释器软件RLI(Robot Language Interpreter)结合vs2008来解析文本,调用控制模块生成数据,利用robotic toolbox for matlab进行仿真验证。在编辑时加入一些不必要的空格和换行、替换控制模块,以测试解释解析的正确性。大量的测试表明,解释器能够正确的解析机器人语言,调用相应函数,执行循环结构,控制机器人执行相应动作等。当机器人程序编写有错误时,可以对其中的错误进行提示。图1中的程序描述了工作流程:机器人从位置点P001移动到位置点P002,然后按照弧线-直线-弧线对工件喷涂,等待工件底座旋转,再次喷涂,反复几次后停止于位置点P007,移动到位置点P008待命。运行仿真结果如图2所示。

4 结论

通过Lua脚本语言,可以准确、快速的解析机器人语言,可以使机器人语言的编写简单化,使非专业人员也可以对机器人进行编程。Lua脚本语言在机器人中的运用可以实现机器人控制程序的模块化,降低模块间的耦合度,方便实现模块的替换、升级和扩充;可以的大大缩短机器人解释器开发时调试的时间;解释器可以便捷的添加或删除指令,简化了后期的升级维护,实现了解释器的开放性;Lua具有良好的可移植性,根据不同平台修改cmd中的内容后就可以在其他机器人控制平台运行,具有广泛的应用范围。

教育期刊网 http://www.jyqkw.com
参考文献

[1]John J.Craig. 机器人学导论[M].3版.贠超,等,译.北京:机械工业出版社,2006.

[2]Roberto Ierusalimschy. Programming in Lua[M]. Lua.org, 2013.

[3]曾国.利用LEX与YACC实现数控线切割的加工程序编译器[J].机电工程,2004(1):58-61.

[4]王浩,谢存禧.工业机器人解释器的研究[J].机械设计与制造,2010(3):146-149.

[责任编辑:邓丽丽]

论文中心更多

期刊百科
期刊投稿 期刊知识 期刊审稿 核心期刊目录 录用通知 期刊版面费 投稿期刊推荐 学术问答
基础教育
小学语文 中学语文 小学数学 中学数学 小学英语 中学英语 物理教学 化学教学 生物教学 政治教学 历史教学 地理教学 科学教学 音乐教学 美术教学 体育教学 信息技术 班主任管理 校长管理 幼教 教育管理 微课教学 作文教学 德育教学 教学设计
医学论文
内科医学 外科医学 预防医学 妇科医学 检测医学 眼科医学 临床医学 药学论文 口腔医学 中西医 中医学 外科 护理 基础医学 急救医学 老年医学 医学实验 儿科医学 神经医学 兽医学 肿瘤医学 综合医学
职业教育
教育学原理 电影文学教育 学前教育 教育学管理 高等教育学 教育技术学 职业技术教育 成人教育学 特殊教育学 教育心理学 家庭教育 教育毕业 中专中职教育 教学设计 国学教育 学术研究 大学教育
药学卫生
社区门诊 医药学 医患关系 医院管理 疾病预防 保健医学 公共卫生 医学教育
文科论文
农业经济 工商管理毕业 会计毕业 行政管理 法律毕业 市场营销 经济毕业 汉语言文学 财务管理 物流管理 人力资源 旅游管理 国际贸易 物业管理 新闻学 企业管理 金融银行 社会科学 食品安全 办公档案 审计学 税务税收学 外国文学 哲学
理科论文
机电毕业 土木工程 计算机毕业 电气毕业 建筑毕业 电子商务 工程毕业 设计毕业 机械制造 汽车毕业 园林毕业 农学毕业 数控毕业 软件技术 水利工程 环境生态 畜牧渔业 化工毕业 科技创新 石油矿藏
论文格式
开题报告 论文题目 摘要关键词 目录提纲 论文致谢 参考文献 附录其他 论文答辩
职业论文
教育论文 经济论文 科技论文 财会论文 管理论文 医学论文 法学论文 文学论文 工业论文 建筑论文 农业论文 水利论文 计算机论文 社科论文 机械论文 生态环境 中西文化

先发表后付款 不成功可退款

权威机构认证 专注期刊10余年 1000余家杂志社长期合作

缔冠期刊网

首页 网站地图 返回顶部
Copyright © 1998- 缔冠期刊网