平 原,张连东,宋雪萍,张博闻
(大连交通大学,大连 116028)
集装箱运输是一种现代化的先进运输方式。为保证集装箱运输中集装箱堆叠的稳固性,需要对集装箱加装稳固措施,限制集装箱的运动。扭锁主要用于甲板与集装箱以及集装箱上下层的连接锁闭,用于防止集装箱倾覆和滑移[1]。近年来,随着集装箱装载率的不断增加,对集装箱扭锁装卸及解锁技术的快速化、自动化的要求也日益迫切[2]。
目前集装箱码头的集装箱装锁拆锁工艺均由人工完成,效率低下且无法保证操作人员的安全。因此,通过二次开发技术在虚拟环境中模拟工业机器人代替人工安装扭锁,对进一步实现集装箱扭锁安装技术的快速化、自动化有着重要意义。
RoboStudio是ABB机器人公司的一款离线机器人编程与仿真工具,能够针对ABB工业机器人进行离线编程与控制。基于RobotStudio平台,通过二次开发软件,针对海港集装箱装卸的实际情况进行仿真,模拟、测试海港集装箱扭锁的自动安装过程。
本文中RobotStudio的二次开发主要用到了ABB SDK(software development kit)中的Controller API。这是一个由上至下的多层次树型网络结构,若要调用控制器的某个功能,则必须进行逐级访问。其结构如图1所示。
二次开发工具则选用C#语言,基于Microsoft Visual Studio平台来进行对RobotStudio的二次开发。
图1 Controller API对象结构图
在RobotStudio中,机器人的运动轨迹是由若干个目标点按次序的连线组成。因此分析目标点的构成对机器人的轨迹规划十分重要。
以目标点P为例:
目标点的位置信息分为四个部分。1表示TCP(Tool Center Point,工具中心点)的位置;2表示机器人的工具的姿态,以四元数来表示;3表示机械臂的轴配置;4表示附加轴的位置。其中,第二部分的四元数决定了机器人工具的姿态方位,因此需在目标坐标系中将工具旋转的欧拉角转换为四元数。
四元数由矢量部分和标量部分组成,可表示成如下形式:
由于欧拉角到四元数的转换与欧拉角的转动顺序有关[3],以Z-Y-X的转动顺序为例,定义分别为绕Z轴、Y轴、X轴旋转角度,欧拉角到四元数的转换可表示为:
将式(2)展开,得到:
将该式用于计算控制工具方位的四元数,可实现欧拉角到四元数的转换。
在RobotStudio已有的基础功能之上,设计了目标点设置模块以及轨迹优化模块用以解决机器人运行过程中对目标点性质判断难的问题。
在常规的机器人运动轨迹规划中,机器人的控制程序需要详细规划到每一个目标点,若涉及到的目标点数量较大,则十分耗费人力物力。通过分析机器人在不同目标点的实际动作来对目标点进行分类,可大幅提升工作效率。该模块为适应多变的应用环境,灵活设置机器人轨迹,将机器人目标点分为抓取点、安装点和过渡点三种类型。其中,抓取点为机器人抓取扭锁时,TCP的位置;安装点为机器人开始向集装箱角件安装扭锁时,TCP的位置;过渡点则为机器人携带扭锁运动时,TCP的目标位置。
在设置时,可设置一个抓取点,一个安装点,以及若干个过渡点。多个过渡点的设置可使机器人躲避实际应用环境中的障碍物。在设置完毕后可对目标点的个数及参数进行修改或重置。如果设置过程中出现错误,该模块会弹窗提醒操作者修改数据或设置内容。该模块的效果如图2所示。
图2 目标点设置模块
该模块的主要作用是对输入的目标点数据进行整理、优化。数据在录入程序之后,会进行列队以构成机器人的运动轨迹。一直到程序开始运行前都可以对已输入的目标点进行编辑。在开始运行程序后,程序会根据最后的目标点次序控制机器人进行移动。
由于目标点的次序直接影响着机器人最终的运动轨迹,因此在程序中利用Queue队列对输入目标点数据进行储存。该方法对数据的处理方法为“先进先出,后进后出”。这样既可保证机器人的运动轨迹与输入的数据相一致。该模块的效果如图3所示。
图3 轨迹优化模块
在利用二次开发程序控制RobotStudio时,最主要的是机器人运动信息的交换,即二次开发程序的数据可以传递给RobotStudio自带的Rapid程序,同时RobotStudio中的数据也能反馈给控制程序。
读取Rapid程序数据,可以选择Direct Access,即直接进入Rapid程序,获取想要的数据信息。这种方法节省内存而且信息获取更加迅速[4]。如下示例即为获取Rapid程序中T_ROB1任务的Module1组件的P1点数据的程序语句:
将数据写入Rapid程序,则是利用IRapidData.FillFromString方法来实现。如下示例为将Rapid程序中的Bool值zhuaqu的值改为Ture:
控制机器人运动的难点在于对目标点的分析,需要通过程序来判断目标点的性质。不同性质的目标点则对应着不同的机器人动作。之前介绍的目标点分为三类,即抓取点、安装点和过渡点,将目标点的性质跟随目标点的数据一同加入Queue队列,在数据出列时对目标点的性质进行判断,即达到程序对目标点的分析效果。
二次开发程序对机器人运动的控制主要通过循环嵌套和分支结构的条件语句来实现。首先,在RobotStudio的Rapid程序中对应三类目标点的后续控制程序之前添加一个“开关”,“开关”由Bool值控制,True代表打开,False代表关闭。然后,在二次开发程序中,根据Queue队列中出列的每一个目标点数据附加的目标点性质,将Bool值传递给Rapid程序。最后,Rapid程序根据接收到的Bool值来判断该点的分类。Rapid控制程序如下。
举例来说,在Rapid程序中,分别在抓取点、安装点、过渡点的控制程序之前添加了zhuaqu、shifang、waitloop三个Bool值,默认值都是False。当被标注为抓取点的p1点从数据队列中出列的同时,二次开发程序将zhuaqu的True值发送给Rapid程序,Rapid即启动抓取动作的控制程序。
在二次开发程序中,对目标点性质的判断是通过循环结构和分支结构来实现的。首先将录入的目标点数据加入到Queue队列中,当每一个目标点出列时,对其性质进行判断,若为抓取点,即向Rapid程序发送“zhuaqu”的True值,打开Rapid程序中的抓取点控制程序的“开关”。同样的过程也适用于安装点和过渡点。每一次判断完目标点的性质之后,二次开发程序会对Queue队列中的剩余的目标点数据个数进行核算,若还有剩余,即继续进行出列操作。当Queue队列中所有的目标点数据均已出列,则结束循环,程序停止。若有目标点未被标记分类,既不是抓取点、安装点,也不是过渡点,则程序会进行报错,由操作人员检查目标点的录入或程序设置是否存在问题。该算法的逻辑流程如图4所示。
图4 目标点性质判断的算法逻辑流程图
为验证此次二次开发程序的适用性,在RobotStudio中建立虚拟仿真试验室。该实验室构成如图5所示。
建立好虚拟仿真实验室后,打开二次开发程序,录入目标数据,本次仿真试验共录入四个点,分别为:
图5 虚拟仿真实验室构成
图6 完成目标点数据录入
图7 机器人运行轨迹
点1:坐标值[500,0,100],工具方位为绕Z轴旋转90°,绕Y轴旋转0°,绕X轴旋转180°,该点为抓取点。
点2:坐标值[500,0,200],工具方位为绕Z轴旋转90°,绕Y轴旋转0°,绕X轴旋转180°,该点为过渡点。
点3:坐标值[300,-300,200],工具方位为绕Z轴旋转90°,绕Y轴旋转0°,绕X轴旋转180°,该点为过渡点。
点4:坐标值[0,-450,200],工具方位为绕Z轴旋转90°,绕Y轴旋转0°,绕X轴旋转180°,该点为安装点。
录入完成效果如图6所示。
点击“运行”,程序开始向RobotStudio发送数据,机器人开始运动。机器人运动轨迹如图7所示。
0段为机器人从初始点到达点1;1段为点1到点2;2段为机械手爪抓取扭锁;3段为点2到点3;4段为机器人到达点3后等待程序相应;5段为点3到点4;6段为机器人等待扭锁安装指令;7段为机器人安装扭锁;8段为安装完毕后机器人回到初始点等待下次循环。
机器人运行过程平稳,均按照二次开发程序中的目标点数据进行运动,达到预期目标。
本文阐述了对RobotStudio进行二次开发的思路以及开发方法,通过该二次开发程序,可对不同目标点进行判断,并根据判断结果决定机器人的运动。该二次程序可一次性添加多个目标点,避免在RobotStudio中设定目标点的繁琐过程。根据仿真的结果来看,此次二次开发的结果是值得肯定的,并可以在日后的扭锁抓取研究中发挥作用。
[1]Dr. Yvo Saanen, Peter Walker, et al.An operations perspective on new twist lock handling in terminals[J].Chemosphere,2015,42(3):861-872.
[2]谢琛,张攀攀,费海波.集装箱扭锁技术的现状及发展趋势[J].中国水运,2015.7(15):38-40.
[3]张帆,曹喜滨,邹经湘.一种新的全角度四元数与欧拉角的转换算法[J].南京理工大学学报,2002.26(4):376-380.
[4]ABB.技术参考手册-RAPID语言概览[CP/OL].2015.10:11-12.