邰思銘,王紅平,張乂文
(長春理工大學 機電工程學院,長春 130022)
Plant Simulation(以下簡稱為“Plant”)是一款面向對象、圖形式集成的離散型生產系統建模仿真軟件,由德國西門子公司負責開發,主要應用于生產線的模型搭構及分析研究。
目前針對Plant仿真軟件大多文獻都致力于解決生產線平衡、生產系統布局、作業排序與調度、物料配送等相關問題[1-4],且其中大部分仿真項目都是基于二維模型來進行設計和實驗的,即使涉及到三維仿真也只通過軟件自帶的對象庫中的模型來進行轉換,目前還沒有針對Plant中三維設備仿真進行精細化操作的相關文獻研究。這就造成了兩點缺陷:1)雖然Plant主要以工廠仿真的數據分析為主,但自定義模型導入和精確的模型控制更能貼合實際產線的運轉,能夠給予工廠搭建更多的實際性參考意義;2)由于Plant本身的算法封閉不予以用戶展示,無法針對內置算法進行參考分析來實現三維模型的精確調控,這就造成實際設備模型在導入后的驅動過程中無法保證平穩運行且極易產生干涉現象,使其整體展示性并不形象直觀,不能夠搭建更為真實的“數字孿生工廠”。
本文針對現有三維仿真的不足,以其中結構較為復雜的六軸機器人三維模型作為研究對象,針對此機器人在復雜環境中無法有效避障及平穩運行的問題提出了一種新的研究方法及解決思路,從實際機器人模型設備的導入到精細化建模及運動控制都做了相應的分析及仿真實現。
直至最新版本,Plant中工具箱中自帶的原始機器人模型仍為四軸機器人。雖可替換官方自帶的3種六軸機器人模型的文件,但仍非產線中的實際設備,且由于不可控的原因,以機器人的取件置件操作為例,針對每個物料的拾取點,實際機器人都存在多組逆解所形成的多組姿態進行抓取,然而軟件默認只會給予一種姿態形式;在機器人取件到置件的運動過程中,運動路徑的形式也是固定的,無法對機器人各個關節加以調控來進行優化,極容易導致干涉現象的發生,原始機器人也無法在量程范圍內實現精確抓取,甚至容易出現隔空抓取的操作,與實際的生產線的設備運動相差甚遠。
針對仿真中機器人而言,一般有以下2種產生干涉的情況:一是機器人在取置件時由于自身結構或關節角選取問題自身姿態同上下料的設備產生干涉;二是機器人在運動過程中由于路徑的優化問題同周圍設備產生碰撞,具體干涉情況以圖1某區域為例。

圖1 原始機器人運動時的干涉現象
針對以上問題,本文以實際產線處的六軸機器人模型為例,通過逆解運算達成機器人多種取置件姿態并取其中一組最優的關節角解實現最短路徑驅動,針對運動過程易于產生干涉的問題,通過對干涉現象進行分析并以內置的Simtalk語言編程的方式來對各關節進行運動角度及運動順序調整,保證機器人的平穩運行及避障的效果,優化的流程步驟為:1)針對此六軸機器人進行運動學建模及逆解運算;2)通過Matlab對解析式編程及ActiveX接口完成數據交互;3)將實際產線的機器人模型導入Plant中進行建模;4)通過Simtalk語言編程實現運動控制及路徑優化;5)驅動自定義導入的機器人實現避障等操作。
本文以生產線的某區域處的六軸機器人為研究對象,此機器人實際型號為德國庫卡機器人KR210-R3100-ULTRA型,是六軸均為旋轉關節的串聯機器人,針對此機器人進行D-H運動學建模。
首先采用由Denavit和Hartenberg提出D-H建模法進行運動學建模,D-H建模方法主要有兩種:標準D-H方法和改進的D-H方法,這兩種方法的主要區別于連桿坐標系建立的位置不同,因為標準D-H方法的轉換矩陣只涉及到一個連桿的相關參數,更方便MATLAB 編程語言的實現[5]76-88。本文采用標準D-H方法進行建模。
通過標準D-H方法,建立的連桿坐標系如圖2所示。

圖2 Kr210r3100機器人的D-H坐標系
其中PTarget表示為末端執行位置坐標、Oc表示腕關節的腕心位置坐標。建立好D-H坐標系后,根據相鄰連桿之間坐標系變換規則來確定各連桿的D-H參數,如表1所示。

表1 Kr210r3100機器人的D-H參數表
其中括號內的值為機器人初始狀態下所對應的初始值,關節角范圍為官方提供的各關節旋轉軸相對初始狀態的最小和最大旋轉角度范圍。
根據Pieper準則[6],六軸機器人存在解析解共有2個充分條件即:1)3個相鄰關節軸線交于一點;2)3個相鄰關節軸線互相平行。此機器人滿足Pieper準則的第一個充分條件,故可通過幾何法對解析解進行求解,因為機器人末端的3個關節軸線相交于同一點,該點通常稱之為腕點Oc,因此腕點存在,故可以通過對關節解耦的方式來極大地簡化求解過程。即前3個關節變量影響腕點的位置,后3個關節變量影響腕點的姿態[7]。
由于腕點和4、5號關節的坐標原點重合,而D-H坐標系中Z5和Z6軸共線,因此可以將Oc沿Z5軸平移d6個長度單位來獲取機器人末端位置的坐標PTarget,即有:




綜上,關節角θ1、θ2、θ5均存在兩組解,此解耦型六軸串聯機器人共有2×2×2=8組解。
通過MATLAB對上述運動學解析式進行編程后,再進行逆解正確性驗證。將求解出來的末端執行器的位姿矩陣的關節角代入進MATLAB的機器人工具箱(Robotics Toolbox)中,對比工具箱自動求解后的末端位置X、Y、Z和末端姿態所代表的RPY角是否和原始輸入的位姿矩陣一致,若一致則說明逆運動學無誤。
MATLAB 輸入的末端姿態矩陣TTarget如圖3所示。

圖3 輸入的姿態矩陣
設定機器人工具箱基本參數并進行驗證,在MATLAB中輸入的代碼內容如下:

設定初始參數后開啟機器人工具箱的示教窗口,將逆運動學求出來的解值輸入到示教欄各軸的關節角q1~q6中,驗證后的結果如圖4所示。

圖4 機器人工具箱逆運動學驗證
通過觀察可知,將示教欄中的X、Y、Z值乘上縮放系數1000,將其值對比輸入的位置矩陣即TTarget中第4列的前3行所構成的3×1矩陣可知無誤,將RPY角值通過矩陣轉換公式jiRxyz(γ,β,α)=R(Z,α)R(Y,β)R(X,γ)[5]66可以轉換成一個3×3矩陣對比輸入的姿態矩陣,即前3行、前3列所構成的3×3矩陣可知無誤,通過以上完成了逆運動學正確性的判定。
因為Plant的復雜函數運算和矩陣運算等能力較為薄弱,無法實現對上述解析式的編程表達,故需借助MATLAB強大的計算能力來實現,然后再與Plant進行數據交互,為了實現MATLAB和Plant之間的通信,就必須借助相應的通信工具,ActiveX是微軟公司提出的一種使用基于COM/DCOM通信,可以在本地環境中進行一種數據交互的技術,能夠使應用程序相互共享數據和共享功能[8],對于MATLAB和Plant軟件而言,均自帶COM端口,故可通過ActiveX進行通信和數據傳輸。
Plant需要從管理類庫的功能中找到信息流對象欄添加自帶的ActiveX插件,并要在打開此對象的窗口的類名欄中輸入MATLAB.application作為呼叫值,具體的添加方法如圖5(a)所示,呼叫方法如圖5(b)所示。

圖5 ActiveX插件添加與呼叫
在安裝時MATLAB 會自動注冊成COM 服務器,MATLAB可作為自動化服務器窗口(MATLAB Command Window)直接調用。
具體調用程序通過Plant內置的Simtalk語言進行編程,并將調用程序(Method)命名為calmat,主要通過以下幾個函數實現本地姿態矩陣數據的傳遞及MATLAB中關節角變量值的提?。?)Excute函數。將Plant中相應的參數傳遞到MATLAB自動化服務器窗口并執行指定語句。如activex.execute ("run 'D:Program FilesMATLABR2014ain6dofmain.m'")—運行存儲在硬盤中的主函數文件。2)GetVariable函數。獲取MATLAB自動化服務器執行語句后求解出來的工作區變量值。如ThetaTab [i,1]:=activex.Getvariable (thetaX,"base")—把求解的關節角值存儲在Plant中的ThetaTab表格中。
兩款軟件具體的數據交互示意圖如圖6所示。

圖6 ActiveX接口的數據交互
雖然針對自定義模型的導入及驅動控制,西門子開發了這個方向的一定解決辦法,但更多的也僅限于關節少、運動簡單的三維設備,對于機器人這種多關節的復雜運動構件實現驅動較為麻煩,要從模型入手和編程角度加以實現,數模設定主要通過以下3點:1)模型導入先前的設定和格式轉換。首先對要導入的模型通過相關CAD軟件建立各關節坐標系,然后將模型文件轉化成.JT格式進行輸出保存,并在Plant中通過Import Graphics的命令選取該.JT文件進行導入,并設定好模型的對象屬性類別后以.s3d格式進行保存。2)建立模型的層次結構。通過Make Animatable Object命令對實體設置可動節點,從機器人第一軸至第六軸構建好模型裝配體的結構關系,創建完成的裝配結構,如圖7所示。3)設定各關節軸參數。以第五軸(Y5軸)為例,開啟其3D屬性欄,由于為旋轉關節,故只需設定旋轉軸(Rotation axis)、運動副類型(Joint Type)及關節角運動范圍,若導入模型前坐標系建立無誤,旋轉中心(Rotation center)默認為原點,角速度取默認值1°/s值,第五軸具體參數設定如圖8所示。通過以上3點,即完成了對該機器人整體模型的基本參數設定。

圖7 機器人裝配體結構創建

圖8 第五軸關節參數設定
實現運動仿真共有兩個方面:一是MU運動;二是機器人自身運動。前者較為簡單,可以直接從機器人模型內部進行屬性設定,后者則要通過Simtalk語言及相關函數進行實現。MU(MobileUnits)為可移動單元對象,包括實體、容器和運輸工具,本文中參與生產的MU為軟件內置的托盤對象,具體設定過程如下:開啟機器人的第六軸的3D窗口,添加托盤當MU對象,編輯、創建并更改運動路徑中的位置、角度和軸等3個參數,并通過測定路徑功能來調節紅色箭頭位置來將MU放在機器人法蘭盤的合適位置上,在機器人初始的3D屬性窗口中,在運動對象欄中添加機器人第六軸的層級結構名,以此機器人創建的裝配結構為例,第六軸的層級結構名即為Z1.Y2.Y3.X5.Y5.X6,并選擇MU的所在附加側,具體MU運動屬性設定如圖9所示。

圖9 設置MU運動屬性
Plant里提供機器人自身運動設定共有3種方法:一是通過Self Animation功能欄對路徑點進行設定來實現機器人運動;二是通過Pose功能欄對各關節運動副參數進行設定來實現運動;三是主要通過語言編程的方式來實現運動。對于前兩種只能通過手動來調試路徑,且只可以設定機器人一個固定的運動姿態,在取料或下料位置發生改變后,無法實現機器人的自動尋徑操作,故不作考慮。以下采用第三種方法來實現機器人的運動控制。
1)Plant內部的所有設備的位置和姿態數據都是相對于原點而言,主要通過以下2個關鍵語法來獲取機器人末端執行器取置件時的位置和姿態:a.<Path>._3D.Position。獲取由Path指定對象的當前位置,返回值為一個1×3矩陣(由于Plant在目前版本中并不支持Z方向投影長度,需要人為給予一個Z向的值)。b.<Path>._3D.transformationMatrix。獲取由Path指定對象的4×4的轉換矩陣,其中前三行三列即為對象的3×3姿態矩陣。
2)通過以下關鍵語法來執行機器人各關節的運動。


3)為了實現可移植性、便攜性和封裝性,在編程過程中應遵循可替換原則和便于移植原則,即:a.將語法中能使用匿名標識符的地方統一使用,使用相對地址盡量不使用絕對地址;b.將全部程序、標志位以及相關表格都封裝在對象的內部屬性中,機器人的前后設備可根據具體工藝來進行替換,不用對程序代碼做過度改動。
4.4.1 涉及機器人運動的3個對象的封裝程序
1)機器人(kr210r3100)封裝的內容如下,具體封裝如圖10所示:

圖10 機器人的封裝程序一覽
a. 程 序(Method)對象。執行加載/卸載具體運動所涉及到的程序,包含機器人復位程序(reset)、機器人加載程序(loading)、機器人卸 載 程 序(unloading)。
b. 表 格(Table)對象。存儲機器人初始、加載、卸載等3個狀態的關節角值(CurPos)。除了初次機器人加載卸載需要調用MATLAB獲取關節角外,后續直接通過該表格進行獲取,防止多次外部調用拖累仿真運行速度。
c.標志位(boolean)對象。通過3個布爾量來設定標志位,執行程序運行過程中判斷操作,其中包含:判斷是否為第一次加載過程(first_load);判斷是否為第一次卸載(first_unload);判斷是否處于卸載狀態(unloaded)。
2)取件位置。傳送帶(Line)封裝的內容為程序(Method)對象:輸出傳送帶上的傳感器相對于機器人的位置矩陣PTarget和姿態矩陣RTarget,并調用機器人加載程序(OnSensor)。
3)置件位置。緩沖區(Buffer)封裝的內容為程序(Method) 對象:輸出緩沖區相對于機器人的位置矩陣PTarget和姿態矩陣RTarget,并調用機器人卸載程序(unloadPOS)。
除了3個設備內部封裝好的表格、布爾量和程序外,外部還有6個信息對象,其中包括2個程序,reset程序用于對3個表格進行復位,clamat程序用于同MATLAB進行通信,詳情可看第2節;3個表格中Ptab和Rtab等2個表格分別用于記錄末端位置及姿態矩陣,ThetaTab表格用于記錄和展示MATLAB返回的關節角值;一個通信接口對象ActiveX。這6個對象用來與MATLAB 構成外部通信,具體布置如圖11所示。

圖11 外部通信接口程序及表格
4.4.2 具體執行流程
1)加載系統調用。MU進料后,在傳送帶上運動并觸發傳感器,調用傳送帶上的程序OnSensor,輸出當前的MU相對于機器人的位姿矩陣到Ptab和Rtab表格中,并調用機器人加載程序loading,在加載過程中通過first_load標志位來判斷是否處于初次加載狀態,若為初次加載則調用calmat程序返回MATLAB計算后的一組關節角值到ThetaTab 表格中,并且機器人內部表格CurPos 讀取ThetaTab表格中的數值,若非初次加載則直接調用內部CurPos表格取件時的關節角值并完成加載運動,再將卸載標志位unloaded置為真,此時若還有MU進料亦無法呼叫加載程序,防止機器人加載和卸載過程中產生沖突。
2)卸載系統調用。由于是先取件后置件操作,故在機器人加載完成后,機器人開始執行卸載程序,首先調用緩沖區的程序unloadPOS,輸出當前緩沖區相對于機器人的位姿矩陣到Ptab和Rtab表格中,并調用機器人的卸載程序unloading,在卸載過程中通過first_unload標志位來判斷是否處于初次卸載狀態,若為初次卸載則調用calmat程序返回MATLAB計算后的一組關節角值到ThetaTab表格中,并且機器人內部表格CurPos讀取ThetaTab表格中的數值,若非初次卸載則直接調用內部CurPos表格中置件的關節角值并完成卸載運動,再將卸載標志位unloaded置為否,MU出料并執行下一次加載循環。
以上就是機器人加載和卸載的循環執行流程,具體流程圖如圖12所示。

圖12 程序調用流程圖
機器人的姿態尋優涉及到關節角最優解選取,首先將圖1區域處的原始四軸機器人替換到實際的六軸機器人來進行分析研究,針對上述章節流程進行建模和編程后開始仿真的運行,在Plant中可以自動計算出機器人在加載和卸載狀態下的末端位置矩陣表格Ptab和姿態矩陣表格Rtab,分別如圖13(a)和圖13(b)所示。

圖13 加載/卸載時的末端位置和姿態表格
通過表格即可得到末端執行器的位姿矩陣,再通過ActiveX接口將其值傳遞到MATLAB進行解算得到8組關節角值,如圖14(a)和圖14(b)所示。

圖14 加載/卸載時解算出的八組關節角弧度值
從8組解中尋求機器人的最優關節角,主要通過以下幾點進行選?。?)解算后的機器人關節角要在值域范圍內,對于角度值在[-180°,180°]之外的值進行加減360°運算來補償出值域內的其他可行解并可避免大關節運動,最后通過rad2deg函數將該解由弧度值轉化成角度值;2)盡量避開奇異點,因為奇異位形大多都是某些關節共線或者產生運動抵消的情況,會導致機器人的自由度個數下降,從而產生無數組解和無法求解的情況;3)機器人取件和置件時的姿態不能同上下料設備進行干涉。滿足以上三點后,再采用機器人取最優逆解的通用原則,即“最短行程”原則[9]:對于此機器人滿足前3個關節大而后3個關節小的特點,根據“多移動小關節,少移動大關節”策略,以機器人初始狀態的各軸關節角初值為基準,選取求解出的關節角與該初值距離最近的可能解為最優解,具體求解順序為:先取關節角1與上一狀態最接近的關節值作為最優解進行選取,再取的關節角2的值,依此類推直到關節角6,最后所得的這組解即為最優關節角,并可調用MATLAB輸出圖形進行各關節位姿判斷(如圖15(a)和圖15(b)),可以保證機器人的快速響應。

圖15 加載/卸載時最優執行姿態及圖像輸出
根據最優關節角得到最佳姿態后,由于沒有對機器人路徑進行尋優操作,在仿真運行的過程中仍會同周圍設備產生干涉。利用MATLAB通過蒙特卡洛法[10]對此機器人進行工作空間區域分析可知,參考圖16(a)、圖16(b)、圖16(c)的3種二維平面投影和圖16(d)的三維投影圖,如果機器人保持逆時針運動,不論以何種姿態都必然會與路徑中的單處理器進行碰撞,故必須針對機器人的關節角度進行優化,使其進行順時針運動,Plant中針對機器人的默認旋轉方向是負角度逆時針、正角度順時針運動,故只需將機器人卸載狀態下的一軸關節角減去360°,即可實現順時針運動且卸載姿態保持不變,優化后的加載及卸載角度如表1所示。

表1 優化后的機器人加載/卸載角度 (°)

圖16 機器人的工作空間分析
在關節角度優化后,機器人會保持逆時針運動,雖不會與右側的單處理器發生碰撞,但由于關節順序的影響,反而會與左側的2個buffer之間產生碰撞,具體原因是機器人在加載到卸載運動過程中二軸及三軸的動作順序過于超前,導致機器人會快速保持一個俯身位進行運動,相反機器人在卸載到加載的運動過程中,機器人二軸和三軸動作順序則過于遲緩,亦會以俯身位狀態同左側buffer 進行碰撞。針對以上問題,優化后的關節順序如圖17所示。

圖17 機器人的運動優化流程
本文針對系統仿真軟件Plant Simualtion中自定義導入的實際產線處六軸機器人的復雜三維模型,提供了一個新的控制策略及驅動方法。即通過ActiveX接口與MATLAB聯調的方式對此機器人進行姿態解算,提供相應運算及圖形技術支持,再應用本身自帶的函數程序及Simtalk語言編程來實現機器人模型的驅動,對運動具體參數的細節化調整實現了避障等效果。相比原始默認的四軸機器人模型而言,實現了各關節的優化選取和具體運動路徑的操作控制,對于今后搭建更為真實的3D化數字工廠具有重要的參考意義。