羅 捷
(廣西機(jī)電工業(yè)學(xué)校,廣西 南寧 530023)
機(jī)械手在工業(yè)生產(chǎn)中的應(yīng)用日益廣泛,在機(jī)械手的研發(fā)、應(yīng)用和相關(guān)課程教學(xué)中往往希望能夠通過機(jī)械仿真技術(shù)幫助驗(yàn)證、調(diào)試和展示機(jī)械手。進(jìn)行機(jī)械仿真,通常有三種方法:
第一:使用機(jī)械仿真軟件,如:ADAMS、Solidworks、Pro/E等。這些軟件的的優(yōu)點(diǎn)是精度高,能真實(shí)的反映機(jī)械的受力、運(yùn)動情況,缺點(diǎn)是開發(fā)難度較大,交互性有限,難以通過網(wǎng)絡(luò)、跨平臺應(yīng)用,不利于教學(xué)應(yīng)用[1]。
第二:使用虛擬現(xiàn)實(shí)建模語言VRML。文獻(xiàn)[2][3]提供了使用VRML仿真機(jī)械手的方法。使用此方法雖然可以在網(wǎng)絡(luò)上發(fā)布,且交互性較強(qiáng),但VRML本身不具備機(jī)械動力的分析能力,也無物理引擎,要進(jìn)行機(jī)械仿真需要編寫大量代碼。
第三:使用虛擬現(xiàn)實(shí)引擎或游戲引擎,如:Virtools、Unity3D等。使用虛擬現(xiàn)實(shí)引擎進(jìn)行機(jī)械仿真,可以方便的發(fā)布在網(wǎng)絡(luò)上,有很強(qiáng)的交互性,且虛擬現(xiàn)實(shí)引擎自帶物理引擎,可以很好的仿真各種機(jī)械、物理現(xiàn)象,其精度可以滿足大多數(shù)情況的要求。Unity3D是一個可以讓開發(fā)者輕松創(chuàng)建諸如三維游戲、建筑可視化、實(shí)時三維動畫等類型互動內(nèi)容的跨平臺的專業(yè)虛擬現(xiàn)實(shí)引擎。文獻(xiàn)[1]使用Unity3D對齒輪等簡單機(jī)械進(jìn)行了仿真嘗試。
機(jī)械手是可以在自動生產(chǎn)線上搬運(yùn)物料的一種典型自動化設(shè)備。研究使用Unity3D仿真機(jī)械手這一新的機(jī)器人仿真實(shí)現(xiàn)手段,對機(jī)械人的開發(fā)、應(yīng)用以及相關(guān)課程的教學(xué)有十分重要的現(xiàn)實(shí)意義。
本平臺仿真的搬運(yùn)機(jī)械手結(jié)構(gòu)如圖 1所示。其主要部件包括:機(jī)架、底座、物料槽、機(jī)械手臂、氣缸、電機(jī)、接線端口盒等組成。此機(jī)械手為氣壓式三自由度機(jī)械手。
該搬運(yùn)機(jī)械手臂可由電機(jī)驅(qū)動進(jìn)行水平移動,機(jī)械手臂和手爪可由氣缸驅(qū)動完成手臂上升、下降,手爪張、合的運(yùn)動,從而對物料槽中的物料(小球)實(shí)施搬運(yùn)。機(jī)械手臂水平運(yùn)動范圍受左右兩個限位開關(guān)限制,依靠三個行程開關(guān)進(jìn)行定位,自右向左分別對應(yīng)工位 1、2、3三個位置。機(jī)械手到達(dá)對應(yīng)工位時,對應(yīng)行程開關(guān)的接線端輸出低電平。手臂上升、下降到位和手爪夾緊都會觸發(fā)對應(yīng)的光電傳感器,使得對應(yīng)接線端輸出低電平。工位1、2底部的靈敏度可調(diào)紅外光電傳感器,用檢測物料的反射光強(qiáng)。當(dāng)反射光超過閥值時,輸出低電平。手爪處的光纖傳感器用于檢測手爪處物料的反射光強(qiáng),光強(qiáng)超過閥值時同樣輸出電平。
圖1 搬運(yùn)機(jī)械手結(jié)構(gòu)
要呈現(xiàn)真實(shí)的搬運(yùn)機(jī)械手,幾何和物理模型都要盡可能貼近實(shí)物,并輔以模型材質(zhì)、場景光照、聲音效果以及場景的配合,才能讓使用者能夠產(chǎn)生更強(qiáng)臨場感。然而,由于現(xiàn)有設(shè)備的運(yùn)算、顯示能力的限制,這種想法不可能完全實(shí)現(xiàn),必須在質(zhì)量和效率之間進(jìn)行權(quán)衡。
創(chuàng)建可由 Unity3D使用的搬運(yùn)機(jī)械手的三維模型,需要經(jīng)過以下三個步驟:
步驟一:零件模型的創(chuàng)建和裝配。
由于 Unity3D本身建模功能較弱,使用其他工具創(chuàng)建三維模型會更為方便。本例中選用了Solidworks作為建模工具。根據(jù)搬運(yùn)機(jī)械手的結(jié)構(gòu),將搬運(yùn)機(jī)械手劃分為底座(包括斜槽)、支架、電機(jī)架、機(jī)械臂支架、機(jī)械臂和手爪6個零件。通過對實(shí)物的外形尺寸測量,按照實(shí)物尺寸對各個部件分別建模,最終在Solidworks中將各個零件裝配為完整的搬運(yùn)機(jī)械手模型。
步驟二:模型調(diào)整和美化。
三維機(jī)械手模型在創(chuàng)建時產(chǎn)生了許多不必要的面,需將裝配好的機(jī)械手模型導(dǎo)入 3ds Max中,對模型各部分進(jìn)行塌陷處理,以減少不必要的面,提高顯示效率。為模型添加材質(zhì)、貼圖增加顯示的真實(shí)感。同時對各個部件的原點(diǎn)、坐標(biāo)軸進(jìn)行調(diào)整,以方便在Unity3D中對部件運(yùn)動的控制。
步驟三:導(dǎo)入。
在3Ds MAX中將模型導(dǎo)出為Unity3D官方推薦的FBX格式,導(dǎo)入到 Unity3D場景中。為了在保持模型的尺寸,在導(dǎo)入后應(yīng)將模型尺寸按比例放大100倍。
Unity3D內(nèi)置NVIDIA PhysX物理引擎,不同于在VRML環(huán)境中依靠純代碼實(shí)現(xiàn)虛擬機(jī)械動力效果的方法,在 Unity中可以不用或只需少量代碼即可實(shí)現(xiàn)機(jī)械動力仿真效果。
3.2.1 零件連接方式的配置
在 Unity3D中提供了“關(guān)節(jié)”用于仿真零件間的連接方式。Unity3D中的關(guān)節(jié)分固定關(guān)節(jié)(FixedJoint)、鉸鏈(Hinge Joint)、角色關(guān)節(jié)(Character Joint)和可配置關(guān)節(jié)(Configurable Joint)三種。由于以可配置關(guān)節(jié)的各項(xiàng)參數(shù)可以由開發(fā)者自行配置,因此用途最為廣泛。
由前文可知,該機(jī)械手可以完成手臂平移、手臂升降、手爪張合三個動作。這三個動作分別涉及到手臂支架和電機(jī)架的連接、手臂支架和手臂的連接、手臂和手爪的連接。在本例中這三個連接均使用可配置關(guān)節(jié)實(shí)現(xiàn)?,F(xiàn)以搬運(yùn)機(jī)械手的手爪為例,說明Unity中活動關(guān)節(jié)的配置方法。
手爪與機(jī)械手臂連接處為鉸鏈結(jié)構(gòu),在氣缸驅(qū)動下,圍繞轉(zhuǎn)軸旋轉(zhuǎn),最大張開角度為30°。手爪可以將物料槽中的小球夾起、搬運(yùn)。為了讓手爪與機(jī)械臂連接,需將手爪和機(jī)械手臂設(shè)為剛體(Rigidbody),使用可配置關(guān)節(jié)連接。因?yàn)槭肿ο鄬κ直鄄恍枰M(jìn)行平移,而只需要繞鉸鏈軸旋轉(zhuǎn),所以需鎖定三軸平移,鎖定y軸和z軸旋轉(zhuǎn)。同時,兩爪分別限制繞x軸旋轉(zhuǎn)角度為0°~30°和-30°~0°。由于此鉸鏈結(jié)構(gòu)彈性極小,因此將Projection Mode設(shè)為Position and Rotation,且彈性距離和角度均為0。配置完成后手爪則會受到關(guān)節(jié)的限制,與手臂連接,只能在限制的范圍內(nèi)運(yùn)動。
對于固定于底座上的零件:底座、支架、電機(jī)架都以固定關(guān)節(jié)連接。
3.2.2 碰撞和摩擦的實(shí)現(xiàn)
為了能夠?qū)崿F(xiàn)碰撞和摩擦帶來的物理效果,Unity3D在其物理組建中提供了多種碰撞器組件:盒碰撞器、膠囊碰撞器、球碰撞器、車輪碰撞器、網(wǎng)格碰撞器。前三種碰撞器分別可模擬立方體、膠囊體、球體形狀物體的碰撞與摩擦作用。車輪碰撞器則用于模擬車輪的碰撞與摩擦。網(wǎng)格碰撞器則根據(jù)三維模型的網(wǎng)格外形模擬碰撞與摩擦效果。網(wǎng)格碰撞器是最為復(fù)雜的碰撞器,其碰撞運(yùn)算復(fù)雜,因此 Unity3D中不檢測兩個網(wǎng)格碰撞器之間的碰撞。
在該搬運(yùn)機(jī)械手運(yùn)行中存在多個剛體間的碰撞與摩擦,現(xiàn)以小球與手爪間、小球與軌道間和手爪與軌道間的碰撞與摩擦為例,說明其配置方法。
小球外形是標(biāo)準(zhǔn)的球體,應(yīng)添加與其幾何外形相同的球碰撞器組件。由于小球是塑料球,因此設(shè)置其物質(zhì)材質(zhì)為塑料,質(zhì)量為實(shí)測的 0.46kg。軌道外形復(fù)雜,應(yīng)選用網(wǎng)格碰撞器,其物質(zhì)材質(zhì)為金屬。手爪外形也較為復(fù)雜,本應(yīng)選擇網(wǎng)格碰撞器,但由于網(wǎng)格碰撞器間無法實(shí)現(xiàn)碰撞,且本例中需要模擬機(jī)械手臂在誤操作時與導(dǎo)軌的碰撞,因而手爪不可選用網(wǎng)格碰撞器,而是使用了盒碰撞器進(jìn)行近似模擬。手爪物質(zhì)材質(zhì)設(shè)置為金屬。
3.2.3 驅(qū)動的實(shí)現(xiàn)
經(jīng)過關(guān)節(jié)和碰撞器的設(shè)置,三維搬運(yùn)機(jī)械手模型已經(jīng)具備了仿真所需的物理參數(shù),但沒有電機(jī)和氣泵的驅(qū)動力,還不能完整的仿真機(jī)械手。
在機(jī)械手實(shí)物上,機(jī)械手臂的平移是由電動機(jī)通過蝸桿驅(qū)動的,可近似看做勻速運(yùn)動。因此,手臂的平移運(yùn)動可由添加到手臂支架的腳本中的移位方法GameObject.transform.Translate()實(shí)現(xiàn)。
在機(jī)械手實(shí)物上,機(jī)械手臂的升降以及手爪的張合則是氣動,可近似看做恒力驅(qū)動和恒力矩驅(qū)動。因此,機(jī)械手臂的升降由添加到手臂腳本中的施加恒力方法GameObject.rigidbody.AddForce()實(shí)現(xiàn),手爪的張合運(yùn)動由添加到手臂中腳本中的施加恒力矩方法GameObject.rigidbody.AddRelativeTorque()實(shí)現(xiàn)。
為了在仿真時與使用者交互,讓使用者操作三維仿真機(jī)械手完成各項(xiàng)功能,GUI界面上設(shè)置了可操作機(jī)械手臂左右平移、升降和手爪張合的按鈕。使用者可以通過這些按鈕操作機(jī)械手臂完成各種動作,如搬運(yùn)小球。同時,為了讓使用者能夠了解機(jī)械手上各種傳感器的輸出,GUI界面上以顏色和文字標(biāo)注了各個端口輸出的電平。創(chuàng)建好的虛擬機(jī)械手模型場景及GUI界面如圖2所示。
圖2 虛擬機(jī)械手模型場景及GUI界面
本文則以某型搬運(yùn)機(jī)械手為仿真原型,通過分析其機(jī)械結(jié)構(gòu),創(chuàng)建其三維零件模型,解決Unity3D組裝零件模型為完整機(jī)械的連接問題,利用物理引擎實(shí)現(xiàn)碰撞與摩擦的仿真,通過編寫腳本仿真了電動機(jī)驅(qū)動和氣動的驅(qū)動方式,最終使用Unity3D仿真了搬運(yùn)機(jī)械手這一較復(fù)雜機(jī)械。其仿真效果與實(shí)際設(shè)備有著較高的一致性,且使用者可在仿真時操作三維模型,有著良好的交互性。本搬運(yùn)機(jī)械手的仿真方法在已有解決方案的基礎(chǔ)上在實(shí)現(xiàn)的方便性,仿真的交互性方面有了不同程度的改進(jìn)與提高。
[1]張帆.基于游戲引擎的機(jī)械動力仿真技術(shù)的研究與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2011(2):83-86.
[2]王余還.基于Java3D和VRML的空間機(jī)械手運(yùn)動仿真[J].科技信息,2008(12):355-358.
[3]邱瑛,李為民.基于VRML的機(jī)械手仿真及其技術(shù)[J].機(jī)械設(shè)計,26(3):37-39.
[4]倪樂波,威鵬.Unity3d產(chǎn)品虛擬展示技術(shù)的研究與應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2010(9):54-55.
[5]朱柱.基于 Unity3D的虛擬實(shí)驗(yàn)系統(tǒng)設(shè)計與應(yīng)用研究[D].武漢:華中師范大學(xué),2012.