陳子健,卓 勇,唐炳洋
(廈門(mén)大學(xué) 航空航天學(xué)院,福建 廈門(mén) 361102)
虛擬現(xiàn)實(shí)[1](Virtual Reality,簡(jiǎn)稱(chēng)VR)已經(jīng)在各領(lǐng)域得到應(yīng)用,被認(rèn)為是影響人類(lèi)生活的重要技術(shù)之一。隨著國(guó)家和市場(chǎng)對(duì)工業(yè)機(jī)器人的需求不斷增長(zhǎng),各大高校也在開(kāi)設(shè)機(jī)器人相關(guān)課程與實(shí)訓(xùn),但機(jī)器人價(jià)格昂貴、數(shù)量少,不能滿足教學(xué)需求,焊接作業(yè)環(huán)境經(jīng)常是復(fù)雜、惡劣的,用真實(shí)機(jī)器人對(duì)作業(yè)人員進(jìn)行培訓(xùn)的成本高、危險(xiǎn)性大[2]。因此,使用VR可有效規(guī)避風(fēng)險(xiǎn)、滿足要求。國(guó)外機(jī)器人相對(duì)成熟,也開(kāi)發(fā)了相應(yīng)的仿真軟件[3],但一般都是針對(duì)自己公司的產(chǎn)品,進(jìn)行購(gòu)買(mǎi)也會(huì)擴(kuò)大投入,不一定適合所有學(xué)?;蚱髽I(yè)。
Unity3D(下文簡(jiǎn)稱(chēng)Unity)是一款優(yōu)秀的跨多平臺(tái)的虛擬引擎[4]。目前部分學(xué)者在此虛擬環(huán)境中進(jìn)行機(jī)器人虛擬仿真并取得一定成果。例如,高國(guó)雪等[5]搭建虛擬仿真環(huán)境實(shí)現(xiàn)同步運(yùn)動(dòng);劉俊等[6]將Unity仿真環(huán)境應(yīng)用在機(jī)器人仿真上滿足教學(xué)需求;劉謀玉等[7]運(yùn)用Unity虛擬環(huán)境實(shí)現(xiàn)機(jī)器人遙操作系統(tǒng);岑洎濤等[8]基于Unity平臺(tái)搭建一個(gè)跨平臺(tái)的機(jī)器人仿真系統(tǒng);劉宇軒等[9]基于Unity搭建一個(gè)人機(jī)交互的教學(xué)平臺(tái)。這些系統(tǒng)的搭建基本都是基于人工示教或作為教學(xué)展示加強(qiáng)對(duì)機(jī)器人的理解。機(jī)器人編程方式常用的有離線和再現(xiàn)示教兩種。示教編程簡(jiǎn)單易學(xué)、精度低、操作繁瑣、不安全;離線編程高效,但對(duì)使用者要求較高,并且沒(méi)有統(tǒng)一通用的離線編程軟件[6]。綜上所述,為了盡可能的利用各自優(yōu)勢(shì),本文利用VR的強(qiáng)交互能力,將簡(jiǎn)單離線編程與其結(jié)合,實(shí)現(xiàn)焊件焊縫自動(dòng)提取,并實(shí)現(xiàn)工業(yè)機(jī)器人自動(dòng)進(jìn)行焊接仿真的軌跡規(guī)劃過(guò)程。
對(duì)上述其他作者搭建的系統(tǒng)進(jìn)行研究,發(fā)現(xiàn)基本都是基于人工示教或作為教學(xué)展示加強(qiáng)對(duì)機(jī)器人的理解。本文通過(guò)特征提取算法實(shí)現(xiàn)自動(dòng)提取特征線,通過(guò)直接選擇焊縫實(shí)現(xiàn)自動(dòng)焊接仿真加工過(guò)程,從而避免一個(gè)個(gè)選取點(diǎn)進(jìn)行人工示教,也避免了示教精度不足的問(wèn)題。仿真確認(rèn)無(wú)誤后,可以輸出機(jī)器人語(yǔ)言程序,用于實(shí)際的生產(chǎn)或教學(xué)當(dāng)中。
VR系統(tǒng)要求對(duì)實(shí)體與環(huán)境的模擬實(shí)時(shí)逼真,仿照真實(shí)場(chǎng)景建立如圖1所示的系統(tǒng)平臺(tái)。本文選用SolidWorks軟件進(jìn)行高效建模和3ds Max進(jìn)行渲染,獲得與Unity兼容的FBX格式的模型文件[10],結(jié)合二者優(yōu)勢(shì)進(jìn)行系統(tǒng)平臺(tái)的搭建[11]。本文機(jī)器人焊接虛擬仿真系統(tǒng)主要由焊接過(guò)程所需的機(jī)械、電氣及焊接裝置三部分組成。包括安全圍欄、變位機(jī)、公共基座、操作臺(tái)、機(jī)器人本體、固定工作臺(tái)、夾具、電纜橋架以及機(jī)器人控制器和焊機(jī)等部分[12]。
圖1 系統(tǒng)總體框架結(jié)構(gòu)圖
本系統(tǒng)使用Unity內(nèi)置的UI組件設(shè)計(jì)功能面板,用于實(shí)現(xiàn)人機(jī)交互的功能,方便作業(yè)人員快速尋找自己想要實(shí)現(xiàn)的功能。最終在Unity中布置好場(chǎng)景后,可以看到如圖2所示的整體布局界面。
圖2 UI面板和仿真場(chǎng)景
本文通過(guò)獲取焊接模型的三角網(wǎng)格頂點(diǎn)信息,并經(jīng)過(guò)重復(fù)點(diǎn)剔除、重組后建立新的拓?fù)潢P(guān)系,然后根據(jù)特征點(diǎn)的識(shí)別條件提取模型中的特征點(diǎn)并存入集合進(jìn)行存儲(chǔ)管理,最后按照給定的規(guī)則將特征點(diǎn)連接成特征線并顯示出來(lái)??傮w思路如圖3所示。
圖3 特征提取總體思路
Unity中的模型均為三角網(wǎng)格結(jié)構(gòu),缺乏實(shí)體信息。Unity提供Mesh類(lèi),用于存儲(chǔ)網(wǎng)格信息且可再次編輯。Unity中的網(wǎng)格模型包含了大量散亂、無(wú)序的三角面片,造成大量的頂點(diǎn)冗余現(xiàn)象。因此需要剔除大量冗余點(diǎn),并重建三角面片的拓?fù)潢P(guān)系。根據(jù)Unity中網(wǎng)格模型的特點(diǎn)以及三角面片規(guī)則,本文利用基于排序的三角網(wǎng)格模型快速拓?fù)渲亟ㄋ惴ā?/p>
(1)冗余點(diǎn)剔除
本文建立Vertex類(lèi),用于模型中頂點(diǎn)信息的存儲(chǔ)及處理。重寫(xiě)Vertex類(lèi)中繼承自IEquatable
重復(fù)點(diǎn)剔除的關(guān)鍵是保證數(shù)據(jù)的唯一性。本文利用C#中的HashSet集合進(jìn)行重復(fù)點(diǎn)的剔除,再對(duì)頂點(diǎn)進(jìn)行重新編號(hào),對(duì)于HashSet中每個(gè)數(shù)據(jù)都對(duì)應(yīng)一個(gè)唯一的鍵值,保證了數(shù)據(jù)的唯一性。
(2)三角面片頂點(diǎn)序號(hào)更新
隨著頂點(diǎn)的去重,需要對(duì)三角面片中的頂點(diǎn)序號(hào)進(jìn)行更新。建立Triangle類(lèi)用于三角面片數(shù)據(jù)的存儲(chǔ)與處理。通過(guò)id進(jìn)行頂點(diǎn)的索引,減少內(nèi)存占用。
使用Dictionary
(3)三角面片鄰接信息的獲取
對(duì)于滿足充滿原則[13]的網(wǎng)格模型,每條邊均被兩個(gè)三角形共用,因此每個(gè)三角形有三個(gè)鄰接三角形,據(jù)此特點(diǎn)可以找到三角面片的所有鄰接三角形。
為了準(zhǔn)確完整地提取模型的特征邊,本文的特征邊提取算法主要分為兩步:首先通過(guò)模型邊的二面角進(jìn)行特征邊的初步提取,再通過(guò)頂點(diǎn)的曲率判斷,獲取遺漏的特征點(diǎn),并利用點(diǎn)與邊的幾何依存關(guān)系,獲取遺漏的特征邊。
2.2.1 基于二面角的特征提取
本文首先對(duì)網(wǎng)格模型中所有的三角形邊求解基于兩個(gè)相鄰三角形的二面角,再按照一定的規(guī)則設(shè)定閾值,若大于設(shè)定閾值,則該邊為特征邊,特征邊線上的兩個(gè)頂點(diǎn)為特征點(diǎn)。
(1)三角形邊的二面角求解
構(gòu)建Segment類(lèi),用于邊信息的存儲(chǔ)與編輯處理。由空間幾何關(guān)系,通過(guò)兩個(gè)鄰接三角形的單位外法線,可以求得邊的二面角。
(1)
式中,n1,n2為鄰接三角形的單位外法線。
(2)通過(guò)閾值篩選特征點(diǎn)
通過(guò)分析其他的基本幾何體可知,只需剔除其光滑表面上的邊,剩下的邊即為特征邊,閾值可以通過(guò)其上界和下界進(jìn)行確定[14]。一般地,根據(jù)基本幾何體模型的統(tǒng)計(jì)規(guī)律及工程經(jīng)驗(yàn),其無(wú)特征邊的光滑曲面上二面角不大于20°,因此可以遍歷模型所有的二面角得到小于20°的最大角度值β,作為確定閾值α的下界;同時(shí)以大于20°的最小角度值γ作為確定閾值α的上界,則可得:
(2)
因此,例如在立方體模型中,β值取0°,γ值取90°,閾值α可以選擇45°。
對(duì)于本文系統(tǒng)焊接模塊討論的幾何體由基本幾何體組成,因此特征邊可以通過(guò)式進(jìn)行篩選得到,但由于復(fù)雜幾何體三角形的形狀不一,僅通過(guò)單一的閾值難以提取到完整的邊界特征。例如圖4中由尖銳的狹長(zhǎng)三角形連接得到的邊,其二面角小于閾值,卻是特征邊線。
(a) 模型中的邊 (b) 狹長(zhǎng)三角形示意圖 圖4 狹長(zhǎng)三角形構(gòu)成的邊
一般情況都是通過(guò)公共邊上高的比值進(jìn)行判斷是否是狹長(zhǎng)的三角形,但僅通過(guò)三點(diǎn)坐標(biāo)進(jìn)行高的求解較為復(fù)雜,效率低。本文改進(jìn)后,通過(guò)另外兩條邊長(zhǎng)之和的比值進(jìn)行判斷。記兩個(gè)三角形中除公共邊外的邊長(zhǎng)之和的比值為τ,則其表達(dá)式為:
(3)
圖5 基于二面角的特征提取算法流程
2.2.2 基于曲率判斷的特征提取
首先通過(guò)各頂點(diǎn)的法矢量構(gòu)建二次曲面,并計(jì)算該曲面在各頂點(diǎn)上的曲率半徑,然后經(jīng)過(guò)相應(yīng)的判斷獲取特征點(diǎn),并由頂點(diǎn)與邊的幾何依存關(guān)系,遍歷尋找到組成模型的三角面片的邊,即特征邊。
(1)頂點(diǎn)法向量的獲取
頂點(diǎn)法向量是曲率計(jì)算的基礎(chǔ),Unity中Mesh包含了頂點(diǎn)的法向量信息,可以直接獲取。
(2)頂點(diǎn)曲率的計(jì)算
本文主要使用曲面局部擬合法[15]的思想,首先任取一個(gè)頂點(diǎn),將該點(diǎn)與所有的鄰接點(diǎn)構(gòu)建二次曲面,由此得到該點(diǎn)處的主曲率與其方向。
對(duì)于頂點(diǎn)P,存在鄰接點(diǎn)Vi,i=1,2...n,如圖6所示在P點(diǎn)處建立局部坐標(biāo)系Puvw,其鄰接點(diǎn)轉(zhuǎn)換到Puvw內(nèi)的坐標(biāo)為(ui,vi,wi),二次曲面擬合頂點(diǎn)P及其鄰接點(diǎn)
S(u,v)=(u,v,w(u,v))
(4)
其中,w(u,v)=au2+buv+cv2由式(4)可以得到線性方程組(5):
(5)
上述方程可以通過(guò)最小二乘法進(jìn)行二次曲面系數(shù)a、b、c的求解。這種解適合均勻的三角網(wǎng)格模型,但在本文中2.2.1節(jié)中已經(jīng)剔除了狹長(zhǎng)三角形的情況,因此可以認(rèn)為是均勻化的情況。
(3)特征點(diǎn)的判別
遍歷模型中除去2.2.1小節(jié)已經(jīng)篩選出來(lái)的頂點(diǎn),通過(guò)對(duì)點(diǎn)的主曲率極值的判斷,通過(guò)判斷不同方向上曲率極值點(diǎn)來(lái)進(jìn)一步篩選特征點(diǎn),若如圖6所示兩個(gè)方向上均為極值點(diǎn),則該點(diǎn)為特征點(diǎn)。具體篩選方法見(jiàn)參考文獻(xiàn)[15]。
圖6 主曲率的極值點(diǎn)
(4)誤差消除
由于曲率的計(jì)算是不準(zhǔn)確的,根據(jù)上述方法得到的特征點(diǎn)的數(shù)量大于實(shí)際所需的,本文根據(jù)參考文獻(xiàn)[15]中的方法,加入誤差消除因子與整體誤差消除因子,進(jìn)行誤差點(diǎn)的剔除。
前文通過(guò)特征提取算法得到的網(wǎng)格模型特征僅是離散的特征邊(實(shí)際獲得的為特征點(diǎn),由頂點(diǎn)與邊的依存關(guān)系,可以尋找到三角面片的邊),相互之間沒(méi)有順序關(guān)系,難以直接用于機(jī)器人的軌跡規(guī)劃,因此需要對(duì)得到的特征邊進(jìn)行排序。本文利用基于頂點(diǎn)鄰接數(shù)的特征邊自動(dòng)生長(zhǎng)算法[15],能夠?qū)㈦x散的特征邊進(jìn)行整合排序,快速得到完整的模型邊界。
圖7 特征線自動(dòng)生長(zhǎng)
算法根據(jù)模型邊界是否閉合,將其分為特征鏈與特征環(huán)兩類(lèi)。兩者排序算法基本一致,只是算法的終止條件略有不同。獲取所有鄰接點(diǎn)大于2的特征邊頂點(diǎn),即存在開(kāi)叉現(xiàn)象的特征點(diǎn)。如圖7所示的P0、P5點(diǎn)是個(gè)開(kāi)叉點(diǎn),這類(lèi)點(diǎn)一般作為特征鏈的起止點(diǎn)。例如P0可以出現(xiàn)在4條特征鏈中,設(shè)置可使用次數(shù)為4;P4僅具有2個(gè)鄰接點(diǎn),這類(lèi)點(diǎn)則作為特征鏈的中間點(diǎn),僅會(huì)出現(xiàn)在一條特征鏈中,可使用次數(shù)為1。步驟如圖8所示。
圖8 獲取完整特征線流程框圖
特征環(huán)的終止條件為:終止點(diǎn)與起始點(diǎn)相同,其他的步驟與特征鏈相似,不再贅述。
當(dāng)外部輸入的模型精度不高時(shí),直接獲取到的邊界線精度較低,因此需進(jìn)一步處理,提高其精度滿足機(jī)器人運(yùn)動(dòng)仿真的需求。對(duì)于直線可以直接使用直線插值獲取仿真點(diǎn),曲線選用三次樣條曲線插值。本文使用基于累加弦長(zhǎng)的三次參數(shù)樣條曲線插值算法進(jìn)行曲線的二次擬合與插值。
設(shè)第i段三次參數(shù)樣條曲線的表達(dá)式為:
Pi(t)=B1+B2t+B3t2+B4t3,t∈[0,Li]
(6)
式中,Li為第i段的弦長(zhǎng)。
(7)
使用對(duì)角矩陣追趕法對(duì)上式進(jìn)行求解可以得到二階導(dǎo)Mi的值,可求得第i段的三次樣條曲線表達(dá)式。本文系統(tǒng)中建立Spine類(lèi)進(jìn)行三次樣條曲線插值處理,應(yīng)用三次樣條插值算法后得到的圓柱邊界如圖9所示,結(jié)果表明,特征線的精度提升明顯。
(a) 未插值處理的圓弧 (b) 插值處理的圓弧 圖9 圓弧插值處理前后
為了實(shí)現(xiàn)用戶點(diǎn)擊特征線后,機(jī)器人自動(dòng)進(jìn)行自動(dòng)焊接運(yùn)動(dòng),無(wú)需人工示教,需通過(guò)機(jī)器人逆運(yùn)動(dòng)學(xué)求解出機(jī)器人6個(gè)關(guān)節(jié)角度值[17],并反饋給機(jī)器人使其運(yùn)動(dòng)。利用貪婪算法其局部最優(yōu)解的思想,將所有解與上一狀態(tài)進(jìn)行對(duì)比,差值最小解即為需要的最優(yōu)解。具體求解方法請(qǐng)見(jiàn)參考文獻(xiàn)[17]。本文在Unity中選用C#語(yǔ)言進(jìn)行程序的編寫(xiě),使用Transform組件中的局部旋轉(zhuǎn)的成員變量可以實(shí)現(xiàn)各個(gè)關(guān)節(jié)的相對(duì)旋轉(zhuǎn),同時(shí)根據(jù)焊縫的位置來(lái)自動(dòng)改變焊槍位姿,盡可能保持垂直焊接,從而實(shí)現(xiàn)焊縫自動(dòng)焊接的軌跡規(guī)劃過(guò)程。
本文基于Unity 5.6.0版本,使用C#腳本在Visual Studio 2015外部編輯器進(jìn)行代碼編寫(xiě)、編譯、測(cè)試,同時(shí),可以在面板上點(diǎn)擊模型選擇的按鈕,根據(jù)需要選擇如圖10a所示不同類(lèi)型的焊接模型,便可更改圖10b中焊接對(duì)象的仿真模型并在場(chǎng)景中顯示更新的模型。點(diǎn)擊UI界面上的特征提取按鈕后可看到生成的特征線(圖中黑色線框)。通過(guò)選取焊縫,同時(shí)可顯示出如圖11所示準(zhǔn)備進(jìn)行運(yùn)動(dòng)仿真的預(yù)定軌跡。通過(guò)控制面板的開(kāi)始按鈕讓機(jī)器人運(yùn)動(dòng),仿真過(guò)程如圖12所示。操作者可以隨時(shí)通過(guò)鼠標(biāo)改變視角觀察任何部位,或暫停觀察。在界面右下角設(shè)置一個(gè)小窗口用于跟蹤放大焊接詳情,便于觀察焊槍所走路徑是否正確。本文對(duì)于直線和曲線進(jìn)行算法測(cè)試,均可以取得良好的視覺(jué)效果,將特征提取獲取的特征點(diǎn)與三維軟件中獲取的特征點(diǎn)進(jìn)行對(duì)比,效果如圖13所示,從圖中可以看出,兩者基本可以實(shí)現(xiàn)重合。將兩者數(shù)據(jù)進(jìn)行擬合對(duì)比,以多項(xiàng)式函數(shù)作為對(duì)比標(biāo)準(zhǔn),發(fā)現(xiàn)兩者相關(guān)系數(shù)R2分別為0.9243和0.9236,差值低于0.001,說(shuō)明本文提取到的特征線基本可以滿足普通的加工或者教學(xué)要求。
(a) 模型選擇面板 (b) 相應(yīng)模型顯示 圖10 模型選擇及顯示
(a) 直線仿真軌跡 (b) 曲線仿真軌跡 圖11 仿真軌跡展示
圖12 仿真運(yùn)動(dòng)及路徑觀察窗口
(a) 曲線特征點(diǎn) (b) 特征點(diǎn)放大對(duì)比 圖13 仿真點(diǎn)數(shù)據(jù)驗(yàn)證
本文選用Unity進(jìn)行虛擬仿真研究,從外部軟件導(dǎo)入模型搭建了一個(gè)6關(guān)節(jié)機(jī)器人焊接的虛擬仿真系統(tǒng)。通過(guò)對(duì)三角網(wǎng)格模型進(jìn)行基本信息的提取、重組,采用特征提取算法獲取特征點(diǎn),連接得到完整的邊界曲線,最后進(jìn)行三次樣條曲線的擬合得到運(yùn)動(dòng)軌跡進(jìn)行焊接仿真。確認(rèn)無(wú)誤后,可以輸出機(jī)器人語(yǔ)言程序,用于實(shí)際的生產(chǎn)或教學(xué)當(dāng)中。這種方式具有良好的臨場(chǎng)感和交互性,同時(shí)帶給操作者良好的視覺(jué)沖擊,有效逼真的代替真實(shí)機(jī)器人進(jìn)行加工訓(xùn)練和教學(xué),降低作業(yè)風(fēng)險(xiǎn)、培訓(xùn)成本和環(huán)境污染。本文對(duì)于仿真過(guò)程自動(dòng)躲避障礙物還有所不足,以后可以結(jié)合機(jī)器視覺(jué)、圖像處理等技術(shù)進(jìn)一步識(shí)別障礙物并自動(dòng)實(shí)現(xiàn)躲避,重新規(guī)劃仿真路徑。