平 原,張連東,宋雪萍,張博聞
(大連交通大學(xué),大連 116028)
集裝箱運(yùn)輸是一種現(xiàn)代化的先進(jìn)運(yùn)輸方式。為保證集裝箱運(yùn)輸中集裝箱堆疊的穩(wěn)固性,需要對(duì)集裝箱加裝穩(wěn)固措施,限制集裝箱的運(yùn)動(dòng)。扭鎖主要用于甲板與集裝箱以及集裝箱上下層的連接鎖閉,用于防止集裝箱傾覆和滑移[1]。近年來,隨著集裝箱裝載率的不斷增加,對(duì)集裝箱扭鎖裝卸及解鎖技術(shù)的快速化、自動(dòng)化的要求也日益迫切[2]。
目前集裝箱碼頭的集裝箱裝鎖拆鎖工藝均由人工完成,效率低下且無法保證操作人員的安全。因此,通過二次開發(fā)技術(shù)在虛擬環(huán)境中模擬工業(yè)機(jī)器人代替人工安裝扭鎖,對(duì)進(jìn)一步實(shí)現(xiàn)集裝箱扭鎖安裝技術(shù)的快速化、自動(dòng)化有著重要意義。
RoboStudio是ABB機(jī)器人公司的一款離線機(jī)器人編程與仿真工具,能夠針對(duì)ABB工業(yè)機(jī)器人進(jìn)行離線編程與控制?;赗obotStudio平臺(tái),通過二次開發(fā)軟件,針對(duì)海港集裝箱裝卸的實(shí)際情況進(jìn)行仿真,模擬、測(cè)試海港集裝箱扭鎖的自動(dòng)安裝過程。
本文中RobotStudio的二次開發(fā)主要用到了ABB SDK(software development kit)中的Controller API。這是一個(gè)由上至下的多層次樹型網(wǎng)絡(luò)結(jié)構(gòu),若要調(diào)用控制器的某個(gè)功能,則必須進(jìn)行逐級(jí)訪問。其結(jié)構(gòu)如圖1所示。
二次開發(fā)工具則選用C#語言,基于Microsoft Visual Studio平臺(tái)來進(jìn)行對(duì)RobotStudio的二次開發(fā)。
圖1 Controller API對(duì)象結(jié)構(gòu)圖
在RobotStudio中,機(jī)器人的運(yùn)動(dòng)軌跡是由若干個(gè)目標(biāo)點(diǎn)按次序的連線組成。因此分析目標(biāo)點(diǎn)的構(gòu)成對(duì)機(jī)器人的軌跡規(guī)劃十分重要。
以目標(biāo)點(diǎn)P為例:
目標(biāo)點(diǎn)的位置信息分為四個(gè)部分。1表示TCP(Tool Center Point,工具中心點(diǎn))的位置;2表示機(jī)器人的工具的姿態(tài),以四元數(shù)來表示;3表示機(jī)械臂的軸配置;4表示附加軸的位置。其中,第二部分的四元數(shù)決定了機(jī)器人工具的姿態(tài)方位,因此需在目標(biāo)坐標(biāo)系中將工具旋轉(zhuǎn)的歐拉角轉(zhuǎn)換為四元數(shù)。
四元數(shù)由矢量部分和標(biāo)量部分組成,可表示成如下形式:
由于歐拉角到四元數(shù)的轉(zhuǎn)換與歐拉角的轉(zhuǎn)動(dòng)順序有關(guān)[3],以Z-Y-X的轉(zhuǎn)動(dòng)順序?yàn)槔?,定義分別為繞Z軸、Y軸、X軸旋轉(zhuǎn)角度,歐拉角到四元數(shù)的轉(zhuǎn)換可表示為:
將式(2)展開,得到:
將該式用于計(jì)算控制工具方位的四元數(shù),可實(shí)現(xiàn)歐拉角到四元數(shù)的轉(zhuǎn)換。
在RobotStudio已有的基礎(chǔ)功能之上,設(shè)計(jì)了目標(biāo)點(diǎn)設(shè)置模塊以及軌跡優(yōu)化模塊用以解決機(jī)器人運(yùn)行過程中對(duì)目標(biāo)點(diǎn)性質(zhì)判斷難的問題。
在常規(guī)的機(jī)器人運(yùn)動(dòng)軌跡規(guī)劃中,機(jī)器人的控制程序需要詳細(xì)規(guī)劃到每一個(gè)目標(biāo)點(diǎn),若涉及到的目標(biāo)點(diǎn)數(shù)量較大,則十分耗費(fèi)人力物力。通過分析機(jī)器人在不同目標(biāo)點(diǎn)的實(shí)際動(dòng)作來對(duì)目標(biāo)點(diǎn)進(jìn)行分類,可大幅提升工作效率。該模塊為適應(yīng)多變的應(yīng)用環(huán)境,靈活設(shè)置機(jī)器人軌跡,將機(jī)器人目標(biāo)點(diǎn)分為抓取點(diǎn)、安裝點(diǎn)和過渡點(diǎn)三種類型。其中,抓取點(diǎn)為機(jī)器人抓取扭鎖時(shí),TCP的位置;安裝點(diǎn)為機(jī)器人開始向集裝箱角件安裝扭鎖時(shí),TCP的位置;過渡點(diǎn)則為機(jī)器人攜帶扭鎖運(yùn)動(dòng)時(shí),TCP的目標(biāo)位置。
在設(shè)置時(shí),可設(shè)置一個(gè)抓取點(diǎn),一個(gè)安裝點(diǎn),以及若干個(gè)過渡點(diǎn)。多個(gè)過渡點(diǎn)的設(shè)置可使機(jī)器人躲避實(shí)際應(yīng)用環(huán)境中的障礙物。在設(shè)置完畢后可對(duì)目標(biāo)點(diǎn)的個(gè)數(shù)及參數(shù)進(jìn)行修改或重置。如果設(shè)置過程中出現(xiàn)錯(cuò)誤,該模塊會(huì)彈窗提醒操作者修改數(shù)據(jù)或設(shè)置內(nèi)容。該模塊的效果如圖2所示。
圖2 目標(biāo)點(diǎn)設(shè)置模塊
該模塊的主要作用是對(duì)輸入的目標(biāo)點(diǎn)數(shù)據(jù)進(jìn)行整理、優(yōu)化。數(shù)據(jù)在錄入程序之后,會(huì)進(jìn)行列隊(duì)以構(gòu)成機(jī)器人的運(yùn)動(dòng)軌跡。一直到程序開始運(yùn)行前都可以對(duì)已輸入的目標(biāo)點(diǎn)進(jìn)行編輯。在開始運(yùn)行程序后,程序會(huì)根據(jù)最后的目標(biāo)點(diǎn)次序控制機(jī)器人進(jìn)行移動(dòng)。
由于目標(biāo)點(diǎn)的次序直接影響著機(jī)器人最終的運(yùn)動(dòng)軌跡,因此在程序中利用Queue隊(duì)列對(duì)輸入目標(biāo)點(diǎn)數(shù)據(jù)進(jìn)行儲(chǔ)存。該方法對(duì)數(shù)據(jù)的處理方法為“先進(jìn)先出,后進(jìn)后出”。這樣既可保證機(jī)器人的運(yùn)動(dòng)軌跡與輸入的數(shù)據(jù)相一致。該模塊的效果如圖3所示。
圖3 軌跡優(yōu)化模塊
在利用二次開發(fā)程序控制RobotStudio時(shí),最主要的是機(jī)器人運(yùn)動(dòng)信息的交換,即二次開發(fā)程序的數(shù)據(jù)可以傳遞給RobotStudio自帶的Rapid程序,同時(shí)RobotStudio中的數(shù)據(jù)也能反饋給控制程序。
讀取Rapid程序數(shù)據(jù),可以選擇Direct Access,即直接進(jìn)入Rapid程序,獲取想要的數(shù)據(jù)信息。這種方法節(jié)省內(nèi)存而且信息獲取更加迅速[4]。如下示例即為獲取Rapid程序中T_ROB1任務(wù)的Module1組件的P1點(diǎn)數(shù)據(jù)的程序語句:
將數(shù)據(jù)寫入Rapid程序,則是利用IRapidData.FillFromString方法來實(shí)現(xiàn)。如下示例為將Rapid程序中的Bool值z(mì)huaqu的值改為Ture:
控制機(jī)器人運(yùn)動(dòng)的難點(diǎn)在于對(duì)目標(biāo)點(diǎn)的分析,需要通過程序來判斷目標(biāo)點(diǎn)的性質(zhì)。不同性質(zhì)的目標(biāo)點(diǎn)則對(duì)應(yīng)著不同的機(jī)器人動(dòng)作。之前介紹的目標(biāo)點(diǎn)分為三類,即抓取點(diǎn)、安裝點(diǎn)和過渡點(diǎn),將目標(biāo)點(diǎn)的性質(zhì)跟隨目標(biāo)點(diǎn)的數(shù)據(jù)一同加入Queue隊(duì)列,在數(shù)據(jù)出列時(shí)對(duì)目標(biāo)點(diǎn)的性質(zhì)進(jìn)行判斷,即達(dá)到程序?qū)δ繕?biāo)點(diǎn)的分析效果。
二次開發(fā)程序?qū)C(jī)器人運(yùn)動(dòng)的控制主要通過循環(huán)嵌套和分支結(jié)構(gòu)的條件語句來實(shí)現(xiàn)。首先,在RobotStudio的Rapid程序中對(duì)應(yīng)三類目標(biāo)點(diǎn)的后續(xù)控制程序之前添加一個(gè)“開關(guān)”,“開關(guān)”由Bool值控制,True代表打開,F(xiàn)alse代表關(guān)閉。然后,在二次開發(fā)程序中,根據(jù)Queue隊(duì)列中出列的每一個(gè)目標(biāo)點(diǎn)數(shù)據(jù)附加的目標(biāo)點(diǎn)性質(zhì),將Bool值傳遞給Rapid程序。最后,Rapid程序根據(jù)接收到的Bool值來判斷該點(diǎn)的分類。Rapid控制程序如下。
舉例來說,在Rapid程序中,分別在抓取點(diǎn)、安裝點(diǎn)、過渡點(diǎn)的控制程序之前添加了zhuaqu、shifang、waitloop三個(gè)Bool值,默認(rèn)值都是False。當(dāng)被標(biāo)注為抓取點(diǎn)的p1點(diǎn)從數(shù)據(jù)隊(duì)列中出列的同時(shí),二次開發(fā)程序?qū)huaqu的True值發(fā)送給Rapid程序,Rapid即啟動(dòng)抓取動(dòng)作的控制程序。
在二次開發(fā)程序中,對(duì)目標(biāo)點(diǎn)性質(zhì)的判斷是通過循環(huán)結(jié)構(gòu)和分支結(jié)構(gòu)來實(shí)現(xiàn)的。首先將錄入的目標(biāo)點(diǎn)數(shù)據(jù)加入到Queue隊(duì)列中,當(dāng)每一個(gè)目標(biāo)點(diǎn)出列時(shí),對(duì)其性質(zhì)進(jìn)行判斷,若為抓取點(diǎn),即向Rapid程序發(fā)送“zhuaqu”的True值,打開Rapid程序中的抓取點(diǎn)控制程序的“開關(guān)”。同樣的過程也適用于安裝點(diǎn)和過渡點(diǎn)。每一次判斷完目標(biāo)點(diǎn)的性質(zhì)之后,二次開發(fā)程序會(huì)對(duì)Queue隊(duì)列中的剩余的目標(biāo)點(diǎn)數(shù)據(jù)個(gè)數(shù)進(jìn)行核算,若還有剩余,即繼續(xù)進(jìn)行出列操作。當(dāng)Queue隊(duì)列中所有的目標(biāo)點(diǎn)數(shù)據(jù)均已出列,則結(jié)束循環(huán),程序停止。若有目標(biāo)點(diǎn)未被標(biāo)記分類,既不是抓取點(diǎn)、安裝點(diǎn),也不是過渡點(diǎn),則程序會(huì)進(jìn)行報(bào)錯(cuò),由操作人員檢查目標(biāo)點(diǎn)的錄入或程序設(shè)置是否存在問題。該算法的邏輯流程如圖4所示。
圖4 目標(biāo)點(diǎn)性質(zhì)判斷的算法邏輯流程圖
為驗(yàn)證此次二次開發(fā)程序的適用性,在RobotStudio中建立虛擬仿真試驗(yàn)室。該實(shí)驗(yàn)室構(gòu)成如圖5所示。
建立好虛擬仿真實(shí)驗(yàn)室后,打開二次開發(fā)程序,錄入目標(biāo)數(shù)據(jù),本次仿真試驗(yàn)共錄入四個(gè)點(diǎn),分別為:
圖5 虛擬仿真實(shí)驗(yàn)室構(gòu)成
圖6 完成目標(biāo)點(diǎn)數(shù)據(jù)錄入
圖7 機(jī)器人運(yùn)行軌跡
點(diǎn)1:坐標(biāo)值[500,0,100],工具方位為繞Z軸旋轉(zhuǎn)90°,繞Y軸旋轉(zhuǎn)0°,繞X軸旋轉(zhuǎn)180°,該點(diǎn)為抓取點(diǎn)。
點(diǎn)2:坐標(biāo)值[500,0,200],工具方位為繞Z軸旋轉(zhuǎn)90°,繞Y軸旋轉(zhuǎn)0°,繞X軸旋轉(zhuǎn)180°,該點(diǎn)為過渡點(diǎn)。
點(diǎn)3:坐標(biāo)值[300,-300,200],工具方位為繞Z軸旋轉(zhuǎn)90°,繞Y軸旋轉(zhuǎn)0°,繞X軸旋轉(zhuǎn)180°,該點(diǎn)為過渡點(diǎn)。
點(diǎn)4:坐標(biāo)值[0,-450,200],工具方位為繞Z軸旋轉(zhuǎn)90°,繞Y軸旋轉(zhuǎn)0°,繞X軸旋轉(zhuǎn)180°,該點(diǎn)為安裝點(diǎn)。
錄入完成效果如圖6所示。
點(diǎn)擊“運(yùn)行”,程序開始向RobotStudio發(fā)送數(shù)據(jù),機(jī)器人開始運(yùn)動(dòng)。機(jī)器人運(yùn)動(dòng)軌跡如圖7所示。
0段為機(jī)器人從初始點(diǎn)到達(dá)點(diǎn)1;1段為點(diǎn)1到點(diǎn)2;2段為機(jī)械手爪抓取扭鎖;3段為點(diǎn)2到點(diǎn)3;4段為機(jī)器人到達(dá)點(diǎn)3后等待程序相應(yīng);5段為點(diǎn)3到點(diǎn)4;6段為機(jī)器人等待扭鎖安裝指令;7段為機(jī)器人安裝扭鎖;8段為安裝完畢后機(jī)器人回到初始點(diǎn)等待下次循環(huán)。
機(jī)器人運(yùn)行過程平穩(wěn),均按照二次開發(fā)程序中的目標(biāo)點(diǎn)數(shù)據(jù)進(jìn)行運(yùn)動(dòng),達(dá)到預(yù)期目標(biāo)。
本文闡述了對(duì)RobotStudio進(jìn)行二次開發(fā)的思路以及開發(fā)方法,通過該二次開發(fā)程序,可對(duì)不同目標(biāo)點(diǎn)進(jìn)行判斷,并根據(jù)判斷結(jié)果決定機(jī)器人的運(yùn)動(dòng)。該二次程序可一次性添加多個(gè)目標(biāo)點(diǎn),避免在RobotStudio中設(shè)定目標(biāo)點(diǎn)的繁瑣過程。根據(jù)仿真的結(jié)果來看,此次二次開發(fā)的結(jié)果是值得肯定的,并可以在日后的扭鎖抓取研究中發(fā)揮作用。
[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]謝琛,張攀攀,費(fèi)海波.集裝箱扭鎖技術(shù)的現(xiàn)狀及發(fā)展趨勢(shì)[J].中國(guó)水運(yùn),2015.7(15):38-40.
[3]張帆,曹喜濱,鄒經(jīng)湘.一種新的全角度四元數(shù)與歐拉角的轉(zhuǎn)換算法[J].南京理工大學(xué)學(xué)報(bào),2002.26(4):376-380.
[4]ABB.技術(shù)參考手冊(cè)-RAPID語言概覽[CP/OL].2015.10:11-12.