宋鵬飛,和瑞林,苗金鐘,單東日
(1. 山東輕工業(yè)學(xué)院 機(jī)械與汽車(chē)工程學(xué)院,濟(jì)南 250000;2. 濟(jì)南奧圖自動(dòng)化工程有限公司,濟(jì)南 250000)
工業(yè)自動(dòng)化水平的高低在很大程度上受工業(yè)機(jī)器人發(fā)展水平的制約。隨著現(xiàn)今工業(yè)領(lǐng)域產(chǎn)品的小批量多樣化以及專(zhuān)業(yè)化趨勢(shì),使得工業(yè)機(jī)器人應(yīng)用范圍持續(xù)擴(kuò)大的同時(shí)工作復(fù)雜程度也不斷增加。工業(yè)機(jī)器人是一個(gè)可編程的機(jī)械裝置,其功能的靈活性和智能性很大程度取決于機(jī)器人的編程能力[1]。
目前,機(jī)器人編程主要有在線示教編程和離線編程兩種方式,在線示教編程為絕大多數(shù)工業(yè)機(jī)器人所采用。在線示教編程要求機(jī)器人執(zhí)行新的作業(yè)任務(wù)時(shí)需停機(jī)示教,造成現(xiàn)場(chǎng)生產(chǎn)線停工的同時(shí)還可能使編程人員身處危險(xiǎn)的現(xiàn)場(chǎng)壞境中。離線編程方式可以實(shí)現(xiàn)在遠(yuǎn)離工作現(xiàn)場(chǎng)的情況下完成機(jī)器人編程作業(yè),實(shí)現(xiàn)運(yùn)動(dòng)仿真等一系列功能,大幅提高編程工作效率。國(guó)內(nèi)外研究人員在離線編程方面做了大量研究。其中Kuka,ABB,F(xiàn)ANUC等知名專(zhuān)業(yè)機(jī)器人生產(chǎn)廠家都有自己的一套成熟的仿真軟件,可離線編程[2]。奇瑞公司機(jī)器人項(xiàng)目組也在離線編程方面取得一定進(jìn)展,可對(duì)機(jī)器人生產(chǎn)過(guò)程仿真。陳煥明等完成了基于VC++的弧焊機(jī)器人離線編程系統(tǒng)的設(shè)計(jì)[3],可讀出任務(wù)曲線作業(yè)點(diǎn)并生成程序。J.Swider等完成了基于DXF文件的機(jī)器人離線編程系統(tǒng),實(shí)現(xiàn)了工業(yè)機(jī)器人對(duì)二維圖形的離線編程仿真功能[4]。絕大多數(shù)的離線編程模式都不能將可視化三維仿真環(huán)境與精確地編程方式相結(jié)合。隨著三維繪圖軟件功能日趨強(qiáng)大,完全可以勝任創(chuàng)建工業(yè)機(jī)器人及其工作環(huán)境模型的任務(wù),在三維軟件環(huán)境下完成機(jī)器人的離線編程仿真將是實(shí)現(xiàn)可視化離線編程簡(jiǎn)捷有效的途徑。
本文在Solidworks環(huán)境下對(duì)工業(yè)機(jī)器人及其工作環(huán)境進(jìn)行三維實(shí)體建模,利用Solidworks提供的VC++二次開(kāi)發(fā)向?qū)wizard.swx,完成機(jī)器人離線編程系統(tǒng)的開(kāi)發(fā)。
完成機(jī)器人離線編程作業(yè)包括三個(gè)方面的內(nèi)容:
1)三維建模。在Solidworks環(huán)境下建立機(jī)器人及其工作環(huán)境三維仿真模型。
2)任務(wù)點(diǎn)選取。根據(jù)實(shí)際任務(wù)軌跡要求選取機(jī)器人任務(wù)點(diǎn)(可由鼠標(biāo)拖動(dòng)機(jī)器人J6軸到達(dá)任務(wù)點(diǎn))。
3)調(diào)用離線編程系統(tǒng)。由菜單欄調(diào)用此系統(tǒng),通過(guò)位姿計(jì)算模塊及逆運(yùn)動(dòng)學(xué)計(jì)算模塊完成
任務(wù)點(diǎn)的位姿計(jì)算及各軸輸入角度的計(jì)算。4)生成作業(yè)程序及離線仿真。
圖1 離線編程系統(tǒng)的工作流程及組成
FUNAC機(jī)器人在國(guó)內(nèi)工業(yè)自動(dòng)化領(lǐng)域有著廣泛的應(yīng)用,本文以自動(dòng)化生產(chǎn)線中物料搬運(yùn)常用的FANUCM-900iA/350型機(jī)器人為研究對(duì)象,建立機(jī)器人及其工作環(huán)境聯(lián)線控制模型,以此為基礎(chǔ)進(jìn)行離線編程系統(tǒng)的設(shè)計(jì)研發(fā)。
通過(guò)對(duì)機(jī)器人結(jié)構(gòu)及技術(shù)參數(shù)的研究,繪制機(jī)器人零部件模型,按照既定裝配關(guān)系組成裝配體。三維建模時(shí),為保證離線編程系統(tǒng)的運(yùn)行效率,在保留機(jī)器人所有關(guān)鍵特征及尺寸的前提下,盡量簡(jiǎn)化模型結(jié)構(gòu)。如圖2所示:將J1軸J2軸復(fù)雜的曲面以簡(jiǎn)單的平面模型代替。將五軸回轉(zhuǎn)機(jī)構(gòu)簡(jiǎn)化成“C”字形結(jié)構(gòu)等。圖2中前者為簡(jiǎn)化前的模型,后者為簡(jiǎn)化后的模型。
圖2 機(jī)器人模型簡(jiǎn)化前后對(duì)比
完成機(jī)器人各零件的裝配后,對(duì)各相對(duì)運(yùn)動(dòng)關(guān)節(jié)正確定義運(yùn)動(dòng)角屬性,即確定“配合”中各轉(zhuǎn)動(dòng)副的轉(zhuǎn)動(dòng)范圍。保證各關(guān)節(jié)在允許的范圍內(nèi)可自由運(yùn)動(dòng)。
離線編程結(jié)果精度的高低,很大程度上取決于機(jī)器人及其工作環(huán)境的正確建模及精確的工作位置關(guān)系。本系統(tǒng)中,首先確認(rèn)機(jī)器人與工作環(huán)境的位置關(guān)系,即機(jī)器人底座中心(基座坐標(biāo)系原點(diǎn)O0)與工作中心(板料中心)的距離關(guān)系。其次規(guī)劃?rùn)C(jī)器人的工作任務(wù),確定機(jī)器人在兩工位間經(jīng)過(guò)的關(guān)鍵位置,即準(zhǔn)確確定機(jī)器人的任務(wù)點(diǎn)。建立的機(jī)器人工作環(huán)境及工作狀態(tài)如圖3所示。機(jī)器人將板料從右側(cè)工作臺(tái)移動(dòng)到左側(cè),圖中所示位置為兩工作臺(tái)之間一任務(wù)點(diǎn)。與初始位置相比第六軸關(guān)節(jié)坐標(biāo)系O6相對(duì)于基座坐標(biāo)系O0繞X0軸旋轉(zhuǎn)180度,其余軸相對(duì)于基座坐標(biāo)系O0均為平行移動(dòng)。
圖3 機(jī)器人離線編程系統(tǒng)工作狀態(tài)圖
Solidworks具有超強(qiáng)建模功能和方便的二次開(kāi)發(fā)接口,通過(guò)OLE/COM技術(shù)提供強(qiáng)大的二次開(kāi)發(fā)接口API,這些接口包含數(shù)百個(gè)函數(shù),為二次開(kāi)發(fā)提供強(qiáng)有力的支持。我們可以用VB,Visual C++和其他支持OLE的開(kāi)發(fā)語(yǔ)言接口調(diào)用其API函數(shù)[5]。本文利用Visual C++通過(guò)對(duì)對(duì)象屬性的設(shè)置和方法的調(diào)用對(duì)Solidworks進(jìn)行二次開(kāi)發(fā),將開(kāi)發(fā)的模塊以DLL插件文件的形式實(shí)現(xiàn)與Solidworks無(wú)縫銜接。
在VC++中新建工作空間,選擇工程向?qū)olidWorks Add-in Appwizard,新建離線仿真工程。
離線編程系統(tǒng)以插件的形式在菜單欄中被調(diào)用,點(diǎn)擊“開(kāi)始計(jì)算”子菜單,即可顯示所設(shè)計(jì)的離線編程系統(tǒng)對(duì)話框。如圖4所示。
圖4 離線編程系統(tǒng)的位置與調(diào)用
本離線編程對(duì)話框可完成位姿計(jì)算、逆運(yùn)動(dòng)學(xué)計(jì)算以及對(duì)作業(yè)生成模塊、離線仿真模塊的調(diào)用。
位姿計(jì)算模塊實(shí)現(xiàn)的關(guān)鍵在于對(duì)solidworks二次開(kāi)發(fā)函數(shù)GetSelectionPoint及函數(shù)IEnumEagesOriented的調(diào)用。以獲得點(diǎn)的位置坐標(biāo)為例,通過(guò)調(diào)用函數(shù)GetSelectionPoint,得到當(dāng)前所選目標(biāo)點(diǎn)在模型空間坐標(biāo)系中的三維坐標(biāo)值。值得注意的是在定義對(duì)話框的時(shí)候一定要聲明為非模式對(duì)話框,通過(guò)調(diào)用“Cdialog::Create”函數(shù)來(lái)啟動(dòng)對(duì)話框。以保證不關(guān)閉主程序的情況下,對(duì)目標(biāo)點(diǎn)的連續(xù)選取。在定義pSelectMgr指針及retval[3]雙精度數(shù)組的基礎(chǔ)上,通過(guò)調(diào)用Selectpoint函數(shù)獲得任務(wù),并將任務(wù)點(diǎn)的坐標(biāo)以數(shù)組的形式輸出。部分程序代碼如下:
void MenuItemCB(void)
{
LPMODELDOC pModelDoc=NULL;
//定義pModelDoc指針
LPSELECTIONMGR pSelectMgr=NULL;
//定義pSelectMgr指針
double retval[3];//雙精度數(shù)組
long nSelCount=0;//選擇數(shù)
TheApplication->GetSWApp()->get_IActiveDoc(&pModelDoc);
//獲得pModelDoc指針
if(!pModelDoc) return;
//如果沒(méi)獲得pModelDoc指針,則返回。
…
pSelectMgr->Get
SelectedObjectCount(&nSelCount);
if(nSelCount!=0){
pSelectMgr->IGetSelectionPoint(1,retval);//獲得所選點(diǎn)
}
string.Format(_T("Selected
point(%.4f,%.4f,%.4f)"),
retval[0],retval[1],retval[2]);
//輸出所選點(diǎn)的坐標(biāo)
利用string.Format(_T("%.4f"),retval[i])函數(shù)將上述得到的字符串?dāng)?shù)組以單個(gè)元素的形式輸出,同時(shí)利用UpdateData(FALSE)函數(shù)將上述結(jié)果同步輸出到對(duì)話框。即可完成目標(biāo)點(diǎn)位置的讀取。
首先對(duì)機(jī)器人進(jìn)行正運(yùn)動(dòng)學(xué)分析,建立如圖5所示的FANUCM-900iA/350型機(jī)器人的D-H坐標(biāo)系[6]。根據(jù)機(jī)器人結(jié)構(gòu)參數(shù)(如表1所示),求出機(jī)器人各坐標(biāo)系間的齊次變換矩陣,得到機(jī)器人正運(yùn)動(dòng)學(xué)方程。確定目標(biāo)點(diǎn)位姿坐標(biāo)后,得到12個(gè)常系數(shù)非線性方程。對(duì)于正交旋轉(zhuǎn)矩陣P及向量u,v,利用變換矩陣中旋轉(zhuǎn)子矩陣的正交特型及矢量運(yùn)算矢量運(yùn)算,得到含有不同未知變量的4個(gè)常系數(shù)非線性方程,最終得到機(jī)器人逆運(yùn)算的封閉解[7]。按此方法生成機(jī)器人逆運(yùn)算模塊。
圖5 機(jī)器人連桿D-H坐標(biāo)
表1 FANUC M-900iA/350機(jī)器人結(jié)構(gòu)參數(shù)表
Solidworks提供的運(yùn)動(dòng)仿真模塊完全可勝任機(jī)器人的運(yùn)動(dòng)仿真任務(wù)。以機(jī)器人逆運(yùn)算模塊得到的各關(guān)節(jié)轉(zhuǎn)角角度做為輸入值,點(diǎn)擊“開(kāi)始仿真”按鈕,直接進(jìn)入Solidworks自帶的Cosmosmotion運(yùn)動(dòng)仿真模塊,根據(jù)所建機(jī)器人運(yùn)行環(huán)境實(shí)際情況設(shè)置約束、速度、力等參數(shù),實(shí)現(xiàn)運(yùn)動(dòng)仿真。
利用VC++對(duì)話框Edit控件功能,在點(diǎn)擊“生成作業(yè)”按鈕后彈出子對(duì)話框顯示作業(yè)文件。利用CEdit.SetSel(start,end)函數(shù)設(shè)置要插入文本的位置,用CEdit.Replace(string)函數(shù)向該位置插入字符串string[8],將作業(yè)點(diǎn)位置和姿態(tài)坐標(biāo)以數(shù)組的形式(以備現(xiàn)場(chǎng)機(jī)器人位姿的手動(dòng)快速定位)賦予任務(wù)點(diǎn)P[i]?!拔蛔擞?jì)算”模塊每計(jì)算一個(gè)作業(yè)點(diǎn)點(diǎn)擊“生成作業(yè)”按鈕手動(dòng)完成i++。
生成的作業(yè)代碼如下:
J P[2] 100% FINE !
P[2]=-46.58,212.46,99.55,90,0,0
其中“!”為FANUC程序注釋符。此作業(yè)文件符合FANUC機(jī)器人程序格式。
Roboguide是由FANUC研發(fā)的機(jī)器人仿真軟件,功能強(qiáng)大,可靠性強(qiáng)。在Roboguide中建立與本研究環(huán)境相同的工作空間,并將本離線編程系統(tǒng)生成的作業(yè)程序?qū)隦oboguide中,運(yùn)行程序,得出仿真結(jié)果如圖6所示。
由上述仿真結(jié)果可知,與Solidworks環(huán)境下運(yùn)行的離線仿真結(jié)果對(duì)比,J6軸位置坐標(biāo)Z向坐標(biāo)值相差較大,其余值均在誤差范圍之內(nèi)。這是由于Fanuc將底座中心線與過(guò)J1、J2軸軸線,且與底座平行的面的交點(diǎn)作為機(jī)器人坐標(biāo)原點(diǎn),而Solidworks是將底座中心點(diǎn)作為坐標(biāo)原點(diǎn),兩坐標(biāo)原點(diǎn)不重合導(dǎo)致兩輸出結(jié)果相差J1軸的高度,該值大小約為640mm。
圖6 Roboguide環(huán)境下仿真結(jié)果
本文利用SolidworksAPI二次開(kāi)發(fā)函數(shù)及VC++編程語(yǔ)言,在Solidworks環(huán)境下實(shí)現(xiàn)了工業(yè)機(jī)器人離線編程仿真系統(tǒng)的設(shè)計(jì)。本系統(tǒng)實(shí)現(xiàn)了工業(yè)機(jī)器人位姿坐標(biāo)的精確計(jì)算,機(jī)器人逆運(yùn)算及作業(yè)程序自動(dòng)生成三大功能的系統(tǒng)集成,并對(duì)計(jì)算結(jié)果進(jìn)行了運(yùn)動(dòng)仿真,通過(guò)與FANUC的Roboguide仿真軟件仿真結(jié)果比較證明:本離線編程系統(tǒng)正確率,可靠性均可以達(dá)到到實(shí)際生產(chǎn)要求。為今后實(shí)現(xiàn)功能更全面的離線編程仿真系統(tǒng)打下良好的基礎(chǔ),為我國(guó)工業(yè)自動(dòng)化水平的進(jìn)一步提高提供支持和幫助。
[1] 鄭榮.機(jī)器人離線編程系統(tǒng)設(shè)計(jì)與研究[J].世界制造技術(shù)與裝備市場(chǎng),2010,(5):90-92.
[2] 曹金學(xué).工業(yè)點(diǎn)焊機(jī)器人離線編程軟件的國(guó)產(chǎn)化開(kāi)發(fā)及應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(12):99-100.
[3] 陳煥明,熊震宇.基于VC++的弧焊機(jī)器人離線編程系統(tǒng)設(shè)計(jì)[J].電焊機(jī),2009,39(1):20-23.
[4] J.Swider,K.Foit,G.Wszolek,D.Mastrowski. The system for simulation and off-line, remote programming of the Mitsubishi Movemaster RV-M1 robot[J].Journal,2007,30(2):7-13.
[5] 曹巖,方舟.Solidworks開(kāi)發(fā)篇[M].化學(xué)工業(yè)出版社,2010.
[6] 孟慶鑫,王曉東.機(jī)器人技術(shù)基礎(chǔ)[M].哈爾濱工業(yè)大學(xué),2006.
[7] 程永倫,朱世強(qiáng),劉松國(guó).基于旋轉(zhuǎn)子矩陣正交的6R機(jī)器人運(yùn)動(dòng)學(xué)逆解研究[J].機(jī)器人ROBOT,2008,30(2):160-164.
[8] 陳煥明,胡中華,熊震宇,江淑園.MOTOMAN-UP系列機(jī)器人離線編程系統(tǒng)[J].機(jī)床與液壓,2007,35(9):201-203,207.