邰思銘,王紅平,張乂文
(長春理工大學 機電工程學院,長春 130022)
Plant Simulation(以下簡稱為“Plant”)是一款面向?qū)ο?、圖形式集成的離散型生產(chǎn)系統(tǒng)建模仿真軟件,由德國西門子公司負責開發(fā),主要應用于生產(chǎn)線的模型搭構(gòu)及分析研究。
目前針對Plant仿真軟件大多文獻都致力于解決生產(chǎn)線平衡、生產(chǎn)系統(tǒng)布局、作業(yè)排序與調(diào)度、物料配送等相關(guān)問題[1-4],且其中大部分仿真項目都是基于二維模型來進行設計和實驗的,即使涉及到三維仿真也只通過軟件自帶的對象庫中的模型來進行轉(zhuǎn)換,目前還沒有針對Plant中三維設備仿真進行精細化操作的相關(guān)文獻研究。這就造成了兩點缺陷:1)雖然Plant主要以工廠仿真的數(shù)據(jù)分析為主,但自定義模型導入和精確的模型控制更能貼合實際產(chǎn)線的運轉(zhuǎn),能夠給予工廠搭建更多的實際性參考意義;2)由于Plant本身的算法封閉不予以用戶展示,無法針對內(nèi)置算法進行參考分析來實現(xiàn)三維模型的精確調(diào)控,這就造成實際設備模型在導入后的驅(qū)動過程中無法保證平穩(wěn)運行且極易產(chǎn)生干涉現(xiàn)象,使其整體展示性并不形象直觀,不能夠搭建更為真實的“數(shù)字孿生工廠”。
本文針對現(xiàn)有三維仿真的不足,以其中結(jié)構(gòu)較為復雜的六軸機器人三維模型作為研究對象,針對此機器人在復雜環(huán)境中無法有效避障及平穩(wěn)運行的問題提出了一種新的研究方法及解決思路,從實際機器人模型設備的導入到精細化建模及運動控制都做了相應的分析及仿真實現(xiàn)。
直至最新版本,Plant中工具箱中自帶的原始機器人模型仍為四軸機器人。雖可替換官方自帶的3種六軸機器人模型的文件,但仍非產(chǎn)線中的實際設備,且由于不可控的原因,以機器人的取件置件操作為例,針對每個物料的拾取點,實際機器人都存在多組逆解所形成的多組姿態(tài)進行抓取,然而軟件默認只會給予一種姿態(tài)形式;在機器人取件到置件的運動過程中,運動路徑的形式也是固定的,無法對機器人各個關(guān)節(jié)加以調(diào)控來進行優(yōu)化,極容易導致干涉現(xiàn)象的發(fā)生,原始機器人也無法在量程范圍內(nèi)實現(xiàn)精確抓取,甚至容易出現(xiàn)隔空抓取的操作,與實際的生產(chǎn)線的設備運動相差甚遠。
針對仿真中機器人而言,一般有以下2種產(chǎn)生干涉的情況:一是機器人在取置件時由于自身結(jié)構(gòu)或關(guān)節(jié)角選取問題自身姿態(tài)同上下料的設備產(chǎn)生干涉;二是機器人在運動過程中由于路徑的優(yōu)化問題同周圍設備產(chǎn)生碰撞,具體干涉情況以圖1某區(qū)域為例。
圖1 原始機器人運動時的干涉現(xiàn)象
針對以上問題,本文以實際產(chǎn)線處的六軸機器人模型為例,通過逆解運算達成機器人多種取置件姿態(tài)并取其中一組最優(yōu)的關(guān)節(jié)角解實現(xiàn)最短路徑驅(qū)動,針對運動過程易于產(chǎn)生干涉的問題,通過對干涉現(xiàn)象進行分析并以內(nèi)置的Simtalk語言編程的方式來對各關(guān)節(jié)進行運動角度及運動順序調(diào)整,保證機器人的平穩(wěn)運行及避障的效果,優(yōu)化的流程步驟為:1)針對此六軸機器人進行運動學建模及逆解運算;2)通過Matlab對解析式編程及ActiveX接口完成數(shù)據(jù)交互;3)將實際產(chǎn)線的機器人模型導入Plant中進行建模;4)通過Simtalk語言編程實現(xiàn)運動控制及路徑優(yōu)化;5)驅(qū)動自定義導入的機器人實現(xiàn)避障等操作。
本文以生產(chǎn)線的某區(qū)域處的六軸機器人為研究對象,此機器人實際型號為德國庫卡機器人KR210-R3100-ULTRA型,是六軸均為旋轉(zhuǎn)關(guān)節(jié)的串聯(lián)機器人,針對此機器人進行D-H運動學建模。
首先采用由Denavit和Hartenberg提出D-H建模法進行運動學建模,D-H建模方法主要有兩種:標準D-H方法和改進的D-H方法,這兩種方法的主要區(qū)別于連桿坐標系建立的位置不同,因為標準D-H方法的轉(zhuǎn)換矩陣只涉及到一個連桿的相關(guān)參數(shù),更方便MATLAB 編程語言的實現(xiàn)[5]76-88。本文采用標準D-H方法進行建模。
通過標準D-H方法,建立的連桿坐標系如圖2所示。
圖2 Kr210r3100機器人的D-H坐標系
其中PTarget表示為末端執(zhí)行位置坐標、Oc表示腕關(guān)節(jié)的腕心位置坐標。建立好D-H坐標系后,根據(jù)相鄰連桿之間坐標系變換規(guī)則來確定各連桿的D-H參數(shù),如表1所示。
表1 Kr210r3100機器人的D-H參數(shù)表
其中括號內(nèi)的值為機器人初始狀態(tài)下所對應的初始值,關(guān)節(jié)角范圍為官方提供的各關(guān)節(jié)旋轉(zhuǎn)軸相對初始狀態(tài)的最小和最大旋轉(zhuǎn)角度范圍。
根據(jù)Pieper準則[6],六軸機器人存在解析解共有2個充分條件即:1)3個相鄰關(guān)節(jié)軸線交于一點;2)3個相鄰關(guān)節(jié)軸線互相平行。此機器人滿足Pieper準則的第一個充分條件,故可通過幾何法對解析解進行求解,因為機器人末端的3個關(guān)節(jié)軸線相交于同一點,該點通常稱之為腕點Oc,因此腕點存在,故可以通過對關(guān)節(jié)解耦的方式來極大地簡化求解過程。即前3個關(guān)節(jié)變量影響腕點的位置,后3個關(guān)節(jié)變量影響腕點的姿態(tài)[7]。
由于腕點和4、5號關(guān)節(jié)的坐標原點重合,而D-H坐標系中Z5和Z6軸共線,因此可以將Oc沿Z5軸平移d6個長度單位來獲取機器人末端位置的坐標PTarget,即有:
綜上,關(guān)節(jié)角θ1、θ2、θ5均存在兩組解,此解耦型六軸串聯(lián)機器人共有2×2×2=8組解。
通過MATLAB對上述運動學解析式進行編程后,再進行逆解正確性驗證。將求解出來的末端執(zhí)行器的位姿矩陣的關(guān)節(jié)角代入進MATLAB的機器人工具箱(Robotics Toolbox)中,對比工具箱自動求解后的末端位置X、Y、Z和末端姿態(tài)所代表的RPY角是否和原始輸入的位姿矩陣一致,若一致則說明逆運動學無誤。
MATLAB 輸入的末端姿態(tài)矩陣TTarget如圖3所示。
圖3 輸入的姿態(tài)矩陣
設定機器人工具箱基本參數(shù)并進行驗證,在MATLAB中輸入的代碼內(nèi)容如下:
設定初始參數(shù)后開啟機器人工具箱的示教窗口,將逆運動學求出來的解值輸入到示教欄各軸的關(guān)節(jié)角q1~q6中,驗證后的結(jié)果如圖4所示。
圖4 機器人工具箱逆運動學驗證
通過觀察可知,將示教欄中的X、Y、Z值乘上縮放系數(shù)1000,將其值對比輸入的位置矩陣即TTarget中第4列的前3行所構(gòu)成的3×1矩陣可知無誤,將RPY角值通過矩陣轉(zhuǎn)換公式jiRxyz(γ,β,α)=R(Z,α)R(Y,β)R(X,γ)[5]66可以轉(zhuǎn)換成一個3×3矩陣對比輸入的姿態(tài)矩陣,即前3行、前3列所構(gòu)成的3×3矩陣可知無誤,通過以上完成了逆運動學正確性的判定。
因為Plant的復雜函數(shù)運算和矩陣運算等能力較為薄弱,無法實現(xiàn)對上述解析式的編程表達,故需借助MATLAB強大的計算能力來實現(xiàn),然后再與Plant進行數(shù)據(jù)交互,為了實現(xiàn)MATLAB和Plant之間的通信,就必須借助相應的通信工具,ActiveX是微軟公司提出的一種使用基于COM/DCOM通信,可以在本地環(huán)境中進行一種數(shù)據(jù)交互的技術(shù),能夠使應用程序相互共享數(shù)據(jù)和共享功能[8],對于MATLAB和Plant軟件而言,均自帶COM端口,故可通過ActiveX進行通信和數(shù)據(jù)傳輸。
Plant需要從管理類庫的功能中找到信息流對象欄添加自帶的ActiveX插件,并要在打開此對象的窗口的類名欄中輸入MATLAB.application作為呼叫值,具體的添加方法如圖5(a)所示,呼叫方法如圖5(b)所示。
圖5 ActiveX插件添加與呼叫
在安裝時MATLAB 會自動注冊成COM 服務器,MATLAB可作為自動化服務器窗口(MATLAB Command Window)直接調(diào)用。
具體調(diào)用程序通過Plant內(nèi)置的Simtalk語言進行編程,并將調(diào)用程序(Method)命名為calmat,主要通過以下幾個函數(shù)實現(xiàn)本地姿態(tài)矩陣數(shù)據(jù)的傳遞及MATLAB中關(guān)節(jié)角變量值的提?。?)Excute函數(shù)。將Plant中相應的參數(shù)傳遞到MATLAB自動化服務器窗口并執(zhí)行指定語句。如activex.execute ("run 'D:Program FilesMATLABR2014ain6dofmain.m'")—運行存儲在硬盤中的主函數(shù)文件。2)GetVariable函數(shù)。獲取MATLAB自動化服務器執(zhí)行語句后求解出來的工作區(qū)變量值。如ThetaTab [i,1]:=activex.Getvariable (thetaX,"base")—把求解的關(guān)節(jié)角值存儲在Plant中的ThetaTab表格中。
兩款軟件具體的數(shù)據(jù)交互示意圖如圖6所示。
圖6 ActiveX接口的數(shù)據(jù)交互
雖然針對自定義模型的導入及驅(qū)動控制,西門子開發(fā)了這個方向的一定解決辦法,但更多的也僅限于關(guān)節(jié)少、運動簡單的三維設備,對于機器人這種多關(guān)節(jié)的復雜運動構(gòu)件實現(xiàn)驅(qū)動較為麻煩,要從模型入手和編程角度加以實現(xiàn),數(shù)模設定主要通過以下3點:1)模型導入先前的設定和格式轉(zhuǎn)換。首先對要導入的模型通過相關(guān)CAD軟件建立各關(guān)節(jié)坐標系,然后將模型文件轉(zhuǎn)化成.JT格式進行輸出保存,并在Plant中通過Import Graphics的命令選取該.JT文件進行導入,并設定好模型的對象屬性類別后以.s3d格式進行保存。2)建立模型的層次結(jié)構(gòu)。通過Make Animatable Object命令對實體設置可動節(jié)點,從機器人第一軸至第六軸構(gòu)建好模型裝配體的結(jié)構(gòu)關(guān)系,創(chuàng)建完成的裝配結(jié)構(gòu),如圖7所示。3)設定各關(guān)節(jié)軸參數(shù)。以第五軸(Y5軸)為例,開啟其3D屬性欄,由于為旋轉(zhuǎn)關(guān)節(jié),故只需設定旋轉(zhuǎn)軸(Rotation axis)、運動副類型(Joint Type)及關(guān)節(jié)角運動范圍,若導入模型前坐標系建立無誤,旋轉(zhuǎn)中心(Rotation center)默認為原點,角速度取默認值1°/s值,第五軸具體參數(shù)設定如圖8所示。通過以上3點,即完成了對該機器人整體模型的基本參數(shù)設定。
圖7 機器人裝配體結(jié)構(gòu)創(chuàng)建
圖8 第五軸關(guān)節(jié)參數(shù)設定
實現(xiàn)運動仿真共有兩個方面:一是MU運動;二是機器人自身運動。前者較為簡單,可以直接從機器人模型內(nèi)部進行屬性設定,后者則要通過Simtalk語言及相關(guān)函數(shù)進行實現(xiàn)。MU(MobileUnits)為可移動單元對象,包括實體、容器和運輸工具,本文中參與生產(chǎn)的MU為軟件內(nèi)置的托盤對象,具體設定過程如下:開啟機器人的第六軸的3D窗口,添加托盤當MU對象,編輯、創(chuàng)建并更改運動路徑中的位置、角度和軸等3個參數(shù),并通過測定路徑功能來調(diào)節(jié)紅色箭頭位置來將MU放在機器人法蘭盤的合適位置上,在機器人初始的3D屬性窗口中,在運動對象欄中添加機器人第六軸的層級結(jié)構(gòu)名,以此機器人創(chuàng)建的裝配結(jié)構(gòu)為例,第六軸的層級結(jié)構(gòu)名即為Z1.Y2.Y3.X5.Y5.X6,并選擇MU的所在附加側(cè),具體MU運動屬性設定如圖9所示。
圖9 設置MU運動屬性
Plant里提供機器人自身運動設定共有3種方法:一是通過Self Animation功能欄對路徑點進行設定來實現(xiàn)機器人運動;二是通過Pose功能欄對各關(guān)節(jié)運動副參數(shù)進行設定來實現(xiàn)運動;三是主要通過語言編程的方式來實現(xiàn)運動。對于前兩種只能通過手動來調(diào)試路徑,且只可以設定機器人一個固定的運動姿態(tài),在取料或下料位置發(fā)生改變后,無法實現(xiàn)機器人的自動尋徑操作,故不作考慮。以下采用第三種方法來實現(xiàn)機器人的運動控制。
1)Plant內(nèi)部的所有設備的位置和姿態(tài)數(shù)據(jù)都是相對于原點而言,主要通過以下2個關(guān)鍵語法來獲取機器人末端執(zhí)行器取置件時的位置和姿態(tài):a.<Path>._3D.Position。獲取由Path指定對象的當前位置,返回值為一個1×3矩陣(由于Plant在目前版本中并不支持Z方向投影長度,需要人為給予一個Z向的值)。b.<Path>._3D.transformationMatrix。獲取由Path指定對象的4×4的轉(zhuǎn)換矩陣,其中前三行三列即為對象的3×3姿態(tài)矩陣。
2)通過以下關(guān)鍵語法來執(zhí)行機器人各關(guān)節(jié)的運動。
3)為了實現(xiàn)可移植性、便攜性和封裝性,在編程過程中應遵循可替換原則和便于移植原則,即:a.將語法中能使用匿名標識符的地方統(tǒng)一使用,使用相對地址盡量不使用絕對地址;b.將全部程序、標志位以及相關(guān)表格都封裝在對象的內(nèi)部屬性中,機器人的前后設備可根據(jù)具體工藝來進行替換,不用對程序代碼做過度改動。
4.4.1 涉及機器人運動的3個對象的封裝程序
1)機器人(kr210r3100)封裝的內(nèi)容如下,具體封裝如圖10所示:
圖10 機器人的封裝程序一覽
a. 程 序(Method)對象。執(zhí)行加載/卸載具體運動所涉及到的程序,包含機器人復位程序(reset)、機器人加載程序(loading)、機器人卸 載 程 序(unloading)。
b. 表 格(Table)對象。存儲機器人初始、加載、卸載等3個狀態(tài)的關(guān)節(jié)角值(CurPos)。除了初次機器人加載卸載需要調(diào)用MATLAB獲取關(guān)節(jié)角外,后續(xù)直接通過該表格進行獲取,防止多次外部調(diào)用拖累仿真運行速度。
c.標志位(boolean)對象。通過3個布爾量來設定標志位,執(zhí)行程序運行過程中判斷操作,其中包含:判斷是否為第一次加載過程(first_load);判斷是否為第一次卸載(first_unload);判斷是否處于卸載狀態(tài)(unloaded)。
2)取件位置。傳送帶(Line)封裝的內(nèi)容為程序(Method)對象:輸出傳送帶上的傳感器相對于機器人的位置矩陣PTarget和姿態(tài)矩陣RTarget,并調(diào)用機器人加載程序(OnSensor)。
3)置件位置。緩沖區(qū)(Buffer)封裝的內(nèi)容為程序(Method) 對象:輸出緩沖區(qū)相對于機器人的位置矩陣PTarget和姿態(tài)矩陣RTarget,并調(diào)用機器人卸載程序(unloadPOS)。
除了3個設備內(nèi)部封裝好的表格、布爾量和程序外,外部還有6個信息對象,其中包括2個程序,reset程序用于對3個表格進行復位,clamat程序用于同MATLAB進行通信,詳情可看第2節(jié);3個表格中Ptab和Rtab等2個表格分別用于記錄末端位置及姿態(tài)矩陣,ThetaTab表格用于記錄和展示MATLAB返回的關(guān)節(jié)角值;一個通信接口對象ActiveX。這6個對象用來與MATLAB 構(gòu)成外部通信,具體布置如圖11所示。
圖11 外部通信接口程序及表格
4.4.2 具體執(zhí)行流程
1)加載系統(tǒng)調(diào)用。MU進料后,在傳送帶上運動并觸發(fā)傳感器,調(diào)用傳送帶上的程序OnSensor,輸出當前的MU相對于機器人的位姿矩陣到Ptab和Rtab表格中,并調(diào)用機器人加載程序loading,在加載過程中通過first_load標志位來判斷是否處于初次加載狀態(tài),若為初次加載則調(diào)用calmat程序返回MATLAB計算后的一組關(guān)節(jié)角值到ThetaTab 表格中,并且機器人內(nèi)部表格CurPos 讀取ThetaTab表格中的數(shù)值,若非初次加載則直接調(diào)用內(nèi)部CurPos表格取件時的關(guān)節(jié)角值并完成加載運動,再將卸載標志位unloaded置為真,此時若還有MU進料亦無法呼叫加載程序,防止機器人加載和卸載過程中產(chǎn)生沖突。
2)卸載系統(tǒng)調(diào)用。由于是先取件后置件操作,故在機器人加載完成后,機器人開始執(zhí)行卸載程序,首先調(diào)用緩沖區(qū)的程序unloadPOS,輸出當前緩沖區(qū)相對于機器人的位姿矩陣到Ptab和Rtab表格中,并調(diào)用機器人的卸載程序unloading,在卸載過程中通過first_unload標志位來判斷是否處于初次卸載狀態(tài),若為初次卸載則調(diào)用calmat程序返回MATLAB計算后的一組關(guān)節(jié)角值到ThetaTab表格中,并且機器人內(nèi)部表格CurPos讀取ThetaTab表格中的數(shù)值,若非初次卸載則直接調(diào)用內(nèi)部CurPos表格中置件的關(guān)節(jié)角值并完成卸載運動,再將卸載標志位unloaded置為否,MU出料并執(zhí)行下一次加載循環(huán)。
以上就是機器人加載和卸載的循環(huán)執(zhí)行流程,具體流程圖如圖12所示。
圖12 程序調(diào)用流程圖
機器人的姿態(tài)尋優(yōu)涉及到關(guān)節(jié)角最優(yōu)解選取,首先將圖1區(qū)域處的原始四軸機器人替換到實際的六軸機器人來進行分析研究,針對上述章節(jié)流程進行建模和編程后開始仿真的運行,在Plant中可以自動計算出機器人在加載和卸載狀態(tài)下的末端位置矩陣表格Ptab和姿態(tài)矩陣表格Rtab,分別如圖13(a)和圖13(b)所示。
圖13 加載/卸載時的末端位置和姿態(tài)表格
通過表格即可得到末端執(zhí)行器的位姿矩陣,再通過ActiveX接口將其值傳遞到MATLAB進行解算得到8組關(guān)節(jié)角值,如圖14(a)和圖14(b)所示。
圖14 加載/卸載時解算出的八組關(guān)節(jié)角弧度值
從8組解中尋求機器人的最優(yōu)關(guān)節(jié)角,主要通過以下幾點進行選取:1)解算后的機器人關(guān)節(jié)角要在值域范圍內(nèi),對于角度值在[-180°,180°]之外的值進行加減360°運算來補償出值域內(nèi)的其他可行解并可避免大關(guān)節(jié)運動,最后通過rad2deg函數(shù)將該解由弧度值轉(zhuǎn)化成角度值;2)盡量避開奇異點,因為奇異位形大多都是某些關(guān)節(jié)共線或者產(chǎn)生運動抵消的情況,會導致機器人的自由度個數(shù)下降,從而產(chǎn)生無數(shù)組解和無法求解的情況;3)機器人取件和置件時的姿態(tài)不能同上下料設備進行干涉。滿足以上三點后,再采用機器人取最優(yōu)逆解的通用原則,即“最短行程”原則[9]:對于此機器人滿足前3個關(guān)節(jié)大而后3個關(guān)節(jié)小的特點,根據(jù)“多移動小關(guān)節(jié),少移動大關(guān)節(jié)”策略,以機器人初始狀態(tài)的各軸關(guān)節(jié)角初值為基準,選取求解出的關(guān)節(jié)角與該初值距離最近的可能解為最優(yōu)解,具體求解順序為:先取關(guān)節(jié)角1與上一狀態(tài)最接近的關(guān)節(jié)值作為最優(yōu)解進行選取,再取的關(guān)節(jié)角2的值,依此類推直到關(guān)節(jié)角6,最后所得的這組解即為最優(yōu)關(guān)節(jié)角,并可調(diào)用MATLAB輸出圖形進行各關(guān)節(jié)位姿判斷(如圖15(a)和圖15(b)),可以保證機器人的快速響應。
圖15 加載/卸載時最優(yōu)執(zhí)行姿態(tài)及圖像輸出
根據(jù)最優(yōu)關(guān)節(jié)角得到最佳姿態(tài)后,由于沒有對機器人路徑進行尋優(yōu)操作,在仿真運行的過程中仍會同周圍設備產(chǎn)生干涉。利用MATLAB通過蒙特卡洛法[10]對此機器人進行工作空間區(qū)域分析可知,參考圖16(a)、圖16(b)、圖16(c)的3種二維平面投影和圖16(d)的三維投影圖,如果機器人保持逆時針運動,不論以何種姿態(tài)都必然會與路徑中的單處理器進行碰撞,故必須針對機器人的關(guān)節(jié)角度進行優(yōu)化,使其進行順時針運動,Plant中針對機器人的默認旋轉(zhuǎn)方向是負角度逆時針、正角度順時針運動,故只需將機器人卸載狀態(tài)下的一軸關(guān)節(jié)角減去360°,即可實現(xiàn)順時針運動且卸載姿態(tài)保持不變,優(yōu)化后的加載及卸載角度如表1所示。
表1 優(yōu)化后的機器人加載/卸載角度 (°)
圖16 機器人的工作空間分析
在關(guān)節(jié)角度優(yōu)化后,機器人會保持逆時針運動,雖不會與右側(cè)的單處理器發(fā)生碰撞,但由于關(guān)節(jié)順序的影響,反而會與左側(cè)的2個buffer之間產(chǎn)生碰撞,具體原因是機器人在加載到卸載運動過程中二軸及三軸的動作順序過于超前,導致機器人會快速保持一個俯身位進行運動,相反機器人在卸載到加載的運動過程中,機器人二軸和三軸動作順序則過于遲緩,亦會以俯身位狀態(tài)同左側(cè)buffer 進行碰撞。針對以上問題,優(yōu)化后的關(guān)節(jié)順序如圖17所示。
圖17 機器人的運動優(yōu)化流程
本文針對系統(tǒng)仿真軟件Plant Simualtion中自定義導入的實際產(chǎn)線處六軸機器人的復雜三維模型,提供了一個新的控制策略及驅(qū)動方法。即通過ActiveX接口與MATLAB聯(lián)調(diào)的方式對此機器人進行姿態(tài)解算,提供相應運算及圖形技術(shù)支持,再應用本身自帶的函數(shù)程序及Simtalk語言編程來實現(xiàn)機器人模型的驅(qū)動,對運動具體參數(shù)的細節(jié)化調(diào)整實現(xiàn)了避障等效果。相比原始默認的四軸機器人模型而言,實現(xiàn)了各關(guān)節(jié)的優(yōu)化選取和具體運動路徑的操作控制,對于今后搭建更為真實的3D化數(shù)字工廠具有重要的參考意義。