張鵬 仲梁維 張澤南
摘? 要:在機械產(chǎn)品制造過程中,裝配工作占有重要的地位,其成本可以占到制造成本的30%—50%。裝配工作對產(chǎn)品的最終質(zhì)量也有很大影響。虛擬裝配可以提前模擬裝配過程,對保障裝配質(zhì)量和最終產(chǎn)品質(zhì)量有著重要的意義,機械手臂的應(yīng)用也使得裝配工作更可控。本文基于SolidWorks三維模型設(shè)計軟件,利用SolidWorks提供的API接口,通過.NET編程語言控制機械手臂,對產(chǎn)品零件進行裝配模擬、碰撞干涉檢查和機械手臂運動空間路徑規(guī)劃,最終生成機械手臂裝配最優(yōu)路徑,大大減少了人工對機械手臂運動的調(diào)試工作,提高了產(chǎn)品的最終質(zhì)量,對加速制造業(yè)發(fā)展具有重要意義。
關(guān)鍵詞:虛擬裝配;六自由度機械手臂;包圍盒;蟻群算法
中圖分類號:TP319? ? ?文獻標(biāo)識碼:A
Research of Virtual Assembly Path Planning based on SolidWorks
ZHANG Peng, ZHONG Liangwei, ZHANG Zenan
(School of Mechanical Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)
hefengzxp@163.com; zlvcad@126.com; 1727358290@qq.com
Abstract: In the manufacturing process of mechanical products, assembly work plays an important role, and its cost can account for 30% to 50% of the manufacturing cost. Assembly work also has a great impact on the final quality of products, as it can simulate assembly process in advance, which is of great significance to ensure assembly quality and final product quality. The application of manipulator also makes the assembly work more controllable. Based on SolidWorks 3D model design software and its API interface, this paper proposes to use .NET programming language to control the manipulator, and conduct assembly simulation of product parts, collision interference inspection and manipulator movement space path planning. Finally, the optimal path for the manipulator assembly is generated. It greatly reduces the manual adjustment of the movement of the manipulator, improves the final quality of the product, and is of great significance for accelerating the development of the manufacturing industry.
Keywords: virtual assembly; six-degree-of-freedom (six-DOF) manipulator; bounding box; ant colony algorithm
1? ?引言(Introduction)
在機械制造等領(lǐng)域,裝配是產(chǎn)品生產(chǎn)過程中必不可少的一步,裝配工藝的把控也直接影響著產(chǎn)品的質(zhì)量以及產(chǎn)品的檢修工作[1]。隨著計算機輔助設(shè)計的發(fā)展,虛擬裝配技術(shù)被廣泛應(yīng)用到生產(chǎn)領(lǐng)域。虛擬裝配可以在實際生產(chǎn)之前模擬工人對零件的操作,在虛擬的環(huán)境中通過和計算機交互的方式對零件進行安裝檢測,可以極大地減少人力資源成本及實際裝配過程中的錯誤率和故障率,有效提高實際裝配效率[2]。隨著我國制造業(yè)的崛起,將手工裝配與機器人相結(jié)合的裝配車間非常普遍并且已經(jīng)成為制造業(yè)的發(fā)展趨勢[3]。在航空航天制造領(lǐng)域,生產(chǎn)周期往往會因為復(fù)雜的裝配工作而延期[4]。通過虛擬裝配技術(shù)與機器人相結(jié)合的方法,可以在產(chǎn)品裝配之前進行裝配路線模擬、干涉檢測等工作,尋找到最優(yōu)的裝配路徑。目前,SolidWorks的運動仿真及虛擬裝配功能已經(jīng)非常完善,運用二次開發(fā)技術(shù),可以實現(xiàn)特定功能的產(chǎn)品開發(fā),使SolidWorks滿足特定功能的需求。
2? ?系統(tǒng)設(shè)計(System design)
2.1? ?開發(fā)工具
虛擬路徑規(guī)劃主要有兩個部分,第一是虛擬三維環(huán)境,第二是機器手模型和裝配零部件模型。SolidWorks是一款優(yōu)秀的三維建模軟件,能夠提供開發(fā)所需要的三維環(huán)境,且具有界面簡潔、易于上手、使用方便的特點,同時提供大量的二次開發(fā)接口API函數(shù),支持多種編程語言接口,其中包括C#、VB.net、C++等語言,擴展性較好[5],并且還支持外部EXE程序開發(fā)和插件式DLL開發(fā)。為了更好地實現(xiàn)與SolidWorks的交互,提高程序運行效率,本系統(tǒng)在采用DLL插件模式開發(fā)的基礎(chǔ)上,通過WinForm應(yīng)用程序窗口實現(xiàn)交互功能。
對于編程語言的選擇,C#語言是一門面向?qū)ο蟮母呒壵Z言,其對于Windows編程天生具有其他語言無法替代的優(yōu)越性,是完全契合.Net Framework框架的一門語言。本系統(tǒng)采用C#編程語言,可以大大提高開發(fā)效率和提升程序的性能。
2.2? ?系統(tǒng)輸入與輸出
在整個路徑規(guī)劃系統(tǒng)設(shè)計之前,需要對系統(tǒng)初始部分進行分析。系統(tǒng)提供的初始部分有:(1)產(chǎn)品模塊零部件實體幾何參考模型;(2)產(chǎn)品裝配工藝文件;(3)六自由度機械手臂實物。
針對系統(tǒng)輸入對象,需要進行一定的處理。第一步:將產(chǎn)品零部件模型按照1∶1比例在SolidWorks中測繪建模。第二步:按照產(chǎn)品安裝工藝文件將零部件模型裝配成產(chǎn)品各模塊。第三步:將六自由度機械手臂按照1∶1比例建立模型并裝配成裝配體。
經(jīng)過此系統(tǒng)的計算分析,最終需要得到的數(shù)據(jù)為產(chǎn)品模塊在機械手臂抓舉下進行裝配時的路徑信息,該路徑信息包括路徑的關(guān)鍵節(jié)點位置和路徑中產(chǎn)品模塊的幾何姿態(tài)信息。其總體分析和對象處理流程如圖1所示。
2.3? ?系統(tǒng)功能
路徑規(guī)劃的本質(zhì)就是在三維空間中尋找一條將運動件從起點搬運到終點且中間無干涉碰撞的一條路徑。系統(tǒng)功能設(shè)計包括圖1的系統(tǒng)層和輸出層兩個層面的功能,這里將系統(tǒng)功能主要分為以下四個功能模塊來實現(xiàn)。
第一,六自由度機械手臂控制功能模塊。此功能模塊是通過算法驅(qū)動六自由度機械手臂在SolidWorks環(huán)境下運動,達到模擬實際機械手臂在實際生產(chǎn)中運動的目的。機械手臂的運動是整個系統(tǒng)功能實現(xiàn)的前提,六自由度機械手臂控制功能的實現(xiàn)為后續(xù)路徑規(guī)劃等功能的實現(xiàn)提供了基礎(chǔ)。
第二,零件運動控制功能模塊。此功能模塊主要功能是通過程序控制零件模塊在SolidWorks三維空間環(huán)境中進行任意方向的移動和繞任意軸轉(zhuǎn)動。
第三,路徑規(guī)劃算法實現(xiàn)功能模塊。該模塊主要利用基于蟻群算法思想的貪心算法加動態(tài)規(guī)劃來進行功能實現(xiàn),并基于隨機游走的快速隨機擴展算法加弗洛伊德算法尋求圖節(jié)點中的最短路徑。該模塊也包含裝配過程中的干涉碰撞檢測算法。
第四,路徑規(guī)劃結(jié)果展示模塊和數(shù)據(jù)導(dǎo)出模塊。結(jié)果展示包括規(guī)劃的三維空間路徑曲線自動顯示,數(shù)據(jù)導(dǎo)出主要將三維路徑參數(shù)導(dǎo)出到數(shù)據(jù)庫中。
整體功能框架如圖2所示。
3? ?六自由度機械手臂控制算法(Control algorithm of six-DOF manipulator)
3.1? ?六自由度機械手臂建模
如圖3所示的是NACHI六自由度機器手臂的實物以及按照1∶1建模的SolidWorks三維模型。按照實際尺寸將機器手臂各關(guān)節(jié)零部件建立模型,之后再進行裝配。
3.2? ?六自由度機械手臂逆解
求解逆解就是在已知目標(biāo)點的位置坐標(biāo)和姿態(tài)時求解機械手臂六個關(guān)節(jié)的角度,以使得機械手臂末端能準確到達指定目標(biāo)點。
為了更好地描述機械手臂,我們先對機械手臂的各關(guān)節(jié)規(guī)定運動正負方向,如圖4所示。
將機械手臂基座坐標(biāo)系定為世界坐標(biāo)系,則執(zhí)行件末端可以用表1的各項參數(shù)表示其相對于世界坐標(biāo)系的位置。
通過觀察六自由度機械手臂的模型結(jié)構(gòu),可在機械手臂各關(guān)節(jié)分別建立關(guān)節(jié)坐標(biāo)系。其建立方法是以關(guān)節(jié)旋轉(zhuǎn)中心為Z軸,作相鄰的兩個關(guān)節(jié)Z軸的公垂線,該公垂線的方向為坐標(biāo)系的X軸,再以右手定則確定Y軸;當(dāng)相鄰兩個Z軸相交時,沿著第一個Z軸與下一個Z軸相交的延長線為Y軸,再以右手定則確定X軸。坐標(biāo)系如圖5所示,圖中坐標(biāo)系分別表示各軸的正方向。
有了坐標(biāo)系之后,就可以建立六自由度機械手臂D-H參數(shù)表,其變換規(guī)則如下:
(1)平移以世界坐標(biāo)系為參考取正方向;旋轉(zhuǎn)依據(jù)右手定則判斷正方向:大拇指指向旋轉(zhuǎn)軸正方向,四指旋轉(zhuǎn)方向為旋轉(zhuǎn)的正方向。
(2)繞軸,旋轉(zhuǎn),使得與平行(方向一致)。
(3)沿著軸,平移,使得與共線。
(4)沿著軸,平移,使得與原點重合。
(5)繞軸,旋轉(zhuǎn),使得與共線。
根據(jù)上述變換,可得到機械手臂D-H表,如表2所示。
正解的求法是已知各關(guān)節(jié)的旋轉(zhuǎn)角度矩陣,即(1,2,3,4,5,6),求解末端位姿矩陣(X,Y,Z,A,B,C),通過各關(guān)節(jié)坐標(biāo)系矩陣變換可以很容易地得到結(jié)果。反向求解和正解正好相反,它是將正解的結(jié)果作為已知條件,將正解的條件作為未知數(shù)進行計算求解。正解的解一定是唯一的,因為機械手臂的關(guān)節(jié)一旦都已知了,末端的姿態(tài)就固定不變了,但是逆解的計算就不一樣了,最終解的結(jié)果也不一定唯一,甚至出現(xiàn)多解的情況,一般情況下可以得到八組解[6]。
3.3? ?六自由度機械手臂運動控制
機械手臂姿態(tài)是由六個旋轉(zhuǎn)關(guān)節(jié)的角度所決定的,所以本質(zhì)上控制機械手臂的運動實際上就是實現(xiàn)六個關(guān)節(jié)旋轉(zhuǎn)角度的驅(qū)動。在三維模型中通過建模,添加角度配合,已經(jīng)在模型中添加了六個角度的變量信息,如圖6所示,其角度尺寸對應(yīng)的參數(shù)如表3所示。
SolidWorks提供了角度變換的API,通過驅(qū)動角度變換可實現(xiàn)對各關(guān)節(jié)旋轉(zhuǎn)角度的驅(qū)動。其具體API函數(shù)為:
//swDis表示IDisplayDimension對象
swDis=(IDisplayDimension)swMate.DisplayDimension;
swDim=swDis.GetDimension();//swDim表示IDimension對象
swDim.SystemValue=ang*Math.PI/180;//ang表示要驅(qū)動的角度值
swModel.ClearSelection2(true);
通過API驅(qū)動再結(jié)合逆解角度的思想,就可以控制機械手臂的運動了。為了達到連續(xù)運動的目的,程序中需要用到多線程來同時計算和驅(qū)動。
4? 零件運動控制算法的實現(xiàn)(Parts motion control algorithm implementation)
在SolidWorks三維軟件環(huán)境中,零件的位姿矩陣如公式(1)所示[7]。各項參數(shù)的大小決定了當(dāng)前零件的顯示狀態(tài)和位置。同時,SolidWorks也給用戶提供了豐富的API接口,用戶可通過程序調(diào)用函數(shù)的方式修改位姿矩陣的各項參數(shù)來對零件進行操作。
對于移動,只需要改變零件位姿矩陣中的j、k、l三個參數(shù),就可以實現(xiàn)沿著任意方向的移動。對于旋轉(zhuǎn)操作則是更改a—i這前九個元素組成的3×3子矩陣。為了方便矩陣的計算,SolidWorks提供了詳細的矩陣計算的API。結(jié)合API函數(shù)對位姿矩陣的各項參數(shù)進行賦值,就可以實現(xiàn)零件在裝配體世界坐標(biāo)下的移動旋轉(zhuǎn)等操作。整體操作邏輯如圖7所示。
按照上述對零件位姿矩陣的操作可以實現(xiàn)零件的位姿狀態(tài)變換,但是無法看到實際用鼠標(biāo)拖曳的中間過程動畫。為了實現(xiàn)動畫效果,需要對整個矩陣運算過程進行若干等分,將參數(shù)運算分成若干個步驟,每一步驟刷新一次顯示,就可以實現(xiàn)動畫過程。如果是移動變換,以每次移動1 mm的間隔進行移動,假設(shè)移動方向,以毫米為單位進行單位化,記長度,則可得到單位毫米移動矩陣,如公式(2)所示。
結(jié)合鼠標(biāo)的拖動事件進行循環(huán)拖動,每次拖動后讓程序休眠一定的時間,如20 ms,這樣就可以看到整個變換過程是連續(xù)的。旋轉(zhuǎn)變換實現(xiàn)連續(xù)動畫的方法和移動變換的方法基本一致。
5? ?路徑規(guī)劃(Path planning)
5.1? ?碰撞干涉檢測算法
路徑規(guī)劃算法中的碰撞干涉檢測至關(guān)重要,它在一定程度上決定了整個路徑規(guī)劃的結(jié)果。
動態(tài)路徑規(guī)劃的具體方法是在零件運動控制算法中加入靜態(tài)干涉算法,即零件在每個單位化的運動之后進行靜態(tài)干涉檢測,就可以實現(xiàn)動態(tài)檢測。其動態(tài)干涉檢測流程圖如圖8所示。
下面介紹靜態(tài)干涉檢測原理。目前,有很多學(xué)者在研究靜態(tài)干涉檢測方法,運用比較廣泛的是空間包圍盒(BoxTree)的思想,但是針對幾何形狀復(fù)雜的零部件,如具有較多孔洞特征的零部件,普通的包圍盒方法會產(chǎn)生很大的誤差。對此本文提出了一種基于有限分割思想的方法,先將零件按照一定單位空間的正方體大小分割成許多單元,然后再按照包圍盒空間檢測的方法在零件之間進行干涉檢測??臻g長方體包圍盒存在干涉的條件是:兩個長方體中心點之間的距離在X、Y、Z方向上的投影長度小于X、Y、Z相應(yīng)方向上兩個長方體對應(yīng)邊長之和的一半,就表示存在干涉。
為了簡化單元劃分,在三維場景中利用AABB包圍盒的特點對幾何零件進行三維單元劃分,如圖9所示為在SolidWorks中對零部件進行劃分的結(jié)果。
其具體的劃分方法為:以整個零部件外包圍盒的三個表面(左、前、上)作為基準分別建立X、Y、Z朝向的三個參考平面,參考平面選擇陣列屬性,沿著包圍盒方向陣列,設(shè)置切分單元大小,陣列只達到另一端為止。而后點擊“插入”,在特征選項中選擇切割特征,選擇切割平面進行切割,當(dāng)沿著三個方向切割后形成如圖9所示的情況,整個零部件被切割成一個個較小的單元。在左側(cè)特征樹中可以看到“實體”這個文件夾,里面包含切割的實體,通過特征樹遍歷可以讀取每個分割后的實體包圍盒信息。至此可以完成對零部件有限分割后求取獨立的包圍盒信息,更加精確地反映零部件在空間的占用信息。實體切割流程圖如圖10所示。
在進行干涉檢測前,先采用最大包圍盒空間AABB方法進行檢測[8],排除大量不可能干涉的零部件之間的檢測。如果這一步檢測結(jié)果沒有發(fā)生干涉,那么就說明這兩個幾何體之間無干涉;如果第一步檢測結(jié)果發(fā)生干涉,則進行有限分割的包圍盒按照同樣的方法進行檢測。
5.2? ?路徑規(guī)劃算法
蟻群算法是仿生算法,由大自然的一些規(guī)律衍生而來。該算法是由意大利學(xué)者DORIGO等人在20 世紀90 年代初期通過模擬螞蟻尋找路徑的行為而提出的一種啟發(fā)式隨機搜索算法[9]。由于三維空間的復(fù)雜特性,常規(guī)的蟻群算法在三維路徑規(guī)劃中存在許多不合理的地方。本文提出了一種基于單個螞蟻加上貪心算法[10]的簡化動態(tài)蟻群算法來實現(xiàn)路徑規(guī)劃。為了更好地說明此算法,下面先定義一些關(guān)鍵變量,如表4所示。
具體步驟如下:
第一步:計算規(guī)劃空間,得到整個規(guī)劃空間的可行域的邊界范圍B。
第二步:由起點位姿矩陣s和終點位姿矩陣e計算移動距離D。
判斷中的最大值,確定路徑劃分平面。如:j方向值最大,則采用平行于yoz平面的平面切分路徑。
第三步:按照step將起點到終點進行直線位置劃分,劃分成step-1個點,即劃分成step段。假設(shè)劃分的節(jié)點依次記為,按照在第一步中得出的劃分平面,以每個節(jié)點為中心點,按照網(wǎng)格單元大小dis進行網(wǎng)格劃分,得到一系列網(wǎng)格劃分節(jié)點。然后對這些網(wǎng)格點按照如下貪心算法的規(guī)則進行排序處理:
(1)計算每個網(wǎng)格點到上一步規(guī)劃點的距離和到終點的距離,并求和;
(2)按照上述步驟中計算的距離進行從小到大排序。
第四步:結(jié)合干涉碰撞檢測算法規(guī)劃路徑。
6? ?結(jié)果展示(Results presentation)
圖11為整個系統(tǒng)最終結(jié)果圖。圖中有兩個六自由度機械手臂、一塊長方體放物臺、兩塊板狀零件和五顆螺釘。首先機械手臂分別將兩塊板狀零件放置在空間指定位置,然后再將螺釘分別放置在指定位置并生成螺釘?shù)倪\動路徑。右側(cè)為生成路徑的關(guān)鍵點坐標(biāo)結(jié)果。
7? 結(jié)論(Conclusion)
本文針對產(chǎn)品生產(chǎn)過程中的裝配環(huán)節(jié),結(jié)合SolidWorks三維軟件和二次開發(fā)技術(shù),通過程序?qū)崿F(xiàn)產(chǎn)品裝配環(huán)節(jié)的模擬和路徑尋優(yōu),提高了產(chǎn)品生產(chǎn)過程中裝配環(huán)節(jié)的效率。本文提出的有限分割的方法能夠有效地降低干涉檢測的錯誤率,結(jié)合單個螞蟻動態(tài)貪心算法,可規(guī)劃出較合理的裝配路徑,為實際裝配過程提供了很好的依據(jù)。
參考文獻(References)
[1] 唐殿容.機械裝配工藝的關(guān)鍵技術(shù)探究[J].科技創(chuàng)新與應(yīng)用,2020(20):91-92.
[2] 陳瑤瑤,劉永霞,符純明.虛擬裝配技術(shù)的發(fā)展現(xiàn)狀分析[J].機械工程與自動化,2020(06):220-222.
[3] 鄒方.人機協(xié)作標(biāo)準及應(yīng)用動態(tài)研究[J].航空制造技術(shù),2016? ?(Z2):58-63,76.
[4] 王洪雨,胡溶溶,喻懋林.裝配仿真技術(shù)在衛(wèi)星裝配中的應(yīng)用[J].航空制造技術(shù),2015(21):56-58.
[5] 江洪,魏征,王濤威,等.SolidWorks二次開發(fā)實例解析[M].北京:機械工業(yè)出版社,2004:1-9.
[6] 肖振楠,申燚,倪辰旖.六自由度機械手的運動軌跡規(guī)劃與仿真[J].機床與液壓,2018,46(15):58-63.
[7] 張澤南,仲梁維.基于SolidWorks的自動焊縫標(biāo)注的二次開發(fā)[J].軟件工程,2020,23(05):17-20.
[8] 楊帆.基于B+樹存儲的AABB包圍盒碰撞檢測算法[J].計算機科學(xué),2021,48(S1):331-333,348.
[9] DORIGO M, MANIEZZO V, COLORNI A. Ant system: Optimization by a colony of cooperating agents[J].IEEE Transaction on Systems, Man and Cybernetics-Part B,? ?1996, 26(1):29-41.
[10] 曾妮,陳俊豪,傅清爽.基于貪心算法的動態(tài)規(guī)劃策略[J].電腦知識與技術(shù),2021,17(20):141-143,152.
作者簡介:
張? ?鵬(1996-),男,碩士生.研究領(lǐng)域:計算機輔助設(shè)計與智能制造.
仲梁維(1962-),男,碩士,教授.研究領(lǐng)域:計算機輔助設(shè)計與智能制造.
張澤南(1993-),男,碩士生.研究領(lǐng)域:計算機輔助設(shè)計與智能制造.