張繼承
(航空工業(yè)洪都公司,江西南昌330024)
長期以來,CMM(Coordinate Measuring Machine)數(shù)據(jù)源大多通過UG三維CAD/CAM軟件進行采集,針對CATIA數(shù)模也是先通過軟件轉(zhuǎn)換接口將其轉(zhuǎn)換為UG數(shù)模,然后再通過UG三維CAD/CAM軟件進行數(shù)據(jù)源采集。這主要是因為UG軟件具有點的幾何屬性輸出功能(曲面上點的坐標及在該點的法向量等信息),而CATIA軟件沒有該功能。但隨著時代的發(fā)展,CATIA軟件相對于UG軟件所具有的優(yōu)勢愈發(fā)突出,如曲面造型功能,使得CATIA軟件在制造業(yè)中越來越普及。企業(yè)為了解決CATIA數(shù)模CMM數(shù)據(jù)源的問題,通常采取以下兩種措施:一是自行或委托第三方對CATIA軟件進行二次開發(fā);二是通過市場采購第三方成熟軟件。
針對上述情況,本文開展了曲面法向量和點坐標轉(zhuǎn)換的算法研究,并根據(jù)曲面法線方程及方向余弦的表達方法提出了一種曲面上任意一點法向量的數(shù)學建模方法;通過使用CATIA軟件針對VB平臺提供的專用函數(shù),獲取曲面上目標點坐標并對目標點單位法向量進行方向修正;再根據(jù)坐標變換原理將目標點及法矢量從模型坐標系轉(zhuǎn)換到測量坐標系,最后對開發(fā)的軟件進行應(yīng)用驗證。
曲面法線示意圖如圖1所示。
已知曲面Σ的方程
則可求得該曲面 Σ在點 M(x′,y′,z′)處的法線方程[1]
設(shè)α,β,γ分別為曲面Σ在M點的法線與X,Y,Z軸的夾角,令 fx=Fx(x′,y′,z′),fy=Fy(x′,y′,z′),fz=Fz(x′,y′,z′),則曲面 Σ在點 M的法線方向余弦可表示為[1]
圖1 曲面法線示意圖
由上文可知曲面 Σ在點 M(x′,y′,z′)的一個法向量可表示為[2]
若能知道該曲面的方程和點M的坐標則可計算出其法向量n,但是就CATIA軟件而言,只有法國達索公司才能得知其曲面構(gòu)造函數(shù)。
由于上述方法不能用于CATIA二次開發(fā),本文將建立一種全新的數(shù)學模型(如圖2所示)求解曲面法向量n。
圖2 曲面法向量數(shù)學模型
設(shè)模型中存在一個原始坐標系O-XYZ、一個新坐標系O′-X′Y′Z′和一個曲面 Σ,其中新坐標系原點 O′在原始坐標系中的坐標為(x0,y0,z0),點M為曲面Σ上一點,向量為曲面Σ在點M處的單位法法向量。在坐標軸 X′,Y′,Z′上依次取 3個點 P1,P2,P3,這三個點在新坐標系中的坐標分別為(1,0,0),(0,1,0),(0,0,1),即向量分別為平面 Y′O′Z′,X′O′Z′,X′O′Y′的單位法向量。設(shè)點 P1,P2,P3在原始坐標系中的坐標分別為(x1,y1,z1),(x2,y2,z2),(x3,y3,z3),則
式中:x1-x0,y1-y0,z1-z0分別為向量Y,Z軸上的分量;x2-x0,y2-y0,z2-z0分別為向量軸上的分量;x2-x0,y2-y0,z2-z0分別為向量在 X,Y,Z軸上的分量。
表1 X′,Y′,Z′軸在O-XYZ的方向余弦(公式法)
過點M建立一個新坐標系O″-X″Y″Z″,坐標系原點 O″與點 M重合,坐標系 O″-X″Y″Z″與坐標系 O′-X′Y′Z′互為平行關(guān)系,即相當于坐標系 O′-X′Y′Z′從點O′處平移到了點M處,因此坐標軸X″,Y″,Z″在坐標系O-XYZ的方向余弦值與坐標軸X′,Y′,Z′在坐標系O-XYZ的方向余弦值相同。設(shè)單位法向量在坐標軸 X″,Y″,Z″的分量分別為 i,j,k,現(xiàn)用 n表示曲面Σ在點M處的單位法向量,則有
關(guān)于i,j,k的具體求解方法法大致有兩種思路(具體詳見本文1.6部分):
1)用點 N在坐標系 O′-X′Y′Z′中的坐標值減去點M在坐標系 O′-X′Y′Z′中的對應(yīng)坐標值。設(shè)點N,M在坐標系 O′-X′Y′Z′中的坐標分別為(i′,j′,k′),(x′,y′,z′),則有
2)獲取點N在坐標系O-XYZ中的坐標,然后利用本文所提供的線性關(guān)系式計算出點N在坐標系O″-X″Y″Z″中的新坐標即可。
CATIA軟件針對VB平臺提供了“GetDirection”,“GetMeasurable”,“GetWorkbench”等幾個重要函數(shù),通過這些函數(shù)可間接求得曲面的單位法向量,其中函數(shù)“GetWorkbench”用于獲取SPAWorkbench對象(空間分析),函數(shù)“GetMeasurable”用于通過 SPAWorkbench對象獲取Measurable對象(測量),函數(shù)“GetDirection”用于通過Measurable對象獲取直線的反方向[3]。通過此法可求得圖2中法線O″N的反方向n′={dr(0),dr(1),dr(2)},進而可求得其在世界坐標系下的單位法向量。
由于CATIA針對VB提供的提取點位函數(shù)“GetCoordinates”,“GetPoint”只能導(dǎo)出世界坐標系下的坐標值,而獲取工作坐標系下的坐標值則需要通過坐標轉(zhuǎn)換算法實現(xiàn)。目前關(guān)于點的坐標轉(zhuǎn)換有很多種方法,如方向余弦法、歐拉角法(共12種旋轉(zhuǎn)順序)、歐拉軸角法、四元數(shù)法等[4],大體上可分為主動法和被動法兩類。
1.5.1 主動法
主動法是讓空間點M圍繞原坐標系進行一系列的平移、旋轉(zhuǎn)的轉(zhuǎn)換算法(從點M在坐標系O-XYZ上的位置M1變換到點 M在坐標系 O′-X′Y′Z′上的位置 M2),而原坐標系不發(fā)生任何變化(實質(zhì)上相當于讓原坐標系O-XYZ充當了新坐標系 O′-X′Y′Z′)。具體在 CATIA中可通過定位變換法手動實現(xiàn),VB語言則可通過HybridShapeFactory類的AddNewAxisToAxis方法來自動實現(xiàn),其基本原理是讓工作坐標系與世界坐標系重合,數(shù)模從工作坐標系位置轉(zhuǎn)換到世界坐標系位置,此時世界坐標系下的坐標值與工作坐標系下的坐標值重合。
1.5.2 被動法
被動法是通過一定的平移、旋轉(zhuǎn)讓原坐標系OXYZ與新坐標系O′-X′Y′Z′重合的轉(zhuǎn)換算法,而點M不發(fā)生任何變化。常見的算法是先求出平移矩陣T和旋轉(zhuǎn)矩陣R0,然后利用坐標變換公式計算出點坐標。
設(shè)有兩個原點相同的直角坐標系O-XYZ與O′-X′Y′Z′,如圖3所示,任意一點M在這兩個坐標系中的坐標分別為(x,y,z),(x′,y′,z′)。
圖3 兩個原點相同的直角坐標系
設(shè)X′,Y′,Z′軸在 O-XYZ坐標系中的的方向余弦為表 2所示內(nèi)容[5],則(x,y,z)與(x′,y′,z′)的關(guān)系可表示為[5]
1)線性關(guān)系式
2)矩陣關(guān)系式
式中:R0=(rij),稱為旋轉(zhuǎn)矩陣。
表2 X′,Y′,Z′軸在O-XYZ的方向余弦(系數(shù)法)
如果原點O′在O-XYZ坐標系的坐標為(x0,y0,z0),則有
則(x′,y′,z′)與(x,y,z)的關(guān)系可表示為[5]
1)矩陣關(guān)系式
根據(jù)表2可知,X,Y,Z軸在 O′-X′Y′Z′的方向余弦如表 3[5]。
表3 X,Y,Z軸在 O′-X′Y′Z′的方向余弦(系數(shù)法)
2)線性關(guān)系式
式(14)的系數(shù)矩陣是式(10)的系數(shù)矩陣的轉(zhuǎn)置矩陣RT,結(jié)合式(11),可得出矩陣形式為
如果原點O′在O-XYZ坐標系的坐標為(x0,y0,z0),由于=E=I,則有
計算過程中必須首先獲取坐標系O-XYZ與O′-X′Y′Z′的方向角,方法可分為二種:一種是通過手動測量得到各個角的度數(shù);另一種是通過CATIA針對VB提供的函數(shù)“GetAngleBetween”測出角度。因后者測出的角度不能正確處理兩線間的正向關(guān)系,有時測出的是π-α角,有時測出的是 α角,且 cos(π-α)=-cosα,所以根據(jù)傳統(tǒng)算法進行計算可能會造成坐標計算錯誤,法線方向有可能被取反,與CMM測量型面所需的外法向要求不符,在實際測量中可能導(dǎo)致測頭與工件發(fā)生碰撞。
根據(jù)1.3內(nèi)容和上述推導(dǎo),可得出表4內(nèi)容及利用VB對CATIA進行二次開發(fā)求點坐標轉(zhuǎn)換的算法關(guān)系式。
表4 X,Y,Z軸在 O′-X′Y′Z′的方向余弦值(公式法)
式中:(x1,y1,z1),(x2,y2,z2),(x3,y3,z3)分別為圖 2中點 P1,P2,P3的坐標,(x′,y′,z′),(x,y,z)分別為空間點 M在坐標系 O′-X′Y′Z′和 O-XYZ中的坐標。
如果原點O′在坐標系 O-XYZ中的坐標為(x0,y0,z0),則需對式(17)進行平移轉(zhuǎn)換,因此可得
1.6.1 曲面點M和法向量點N坐標已知情況下
現(xiàn)設(shè)點N為曲面Σ在點M處的外單位法向量的頂點,點N,M在坐標系O-XYZ中的坐標分別為(nx,ny,nz),(x,y,z),如圖 4所示,其中坐標系 O″-X″Y″Z″相當于坐標系 O′-X′Y′Z′從點 O′平移到了點 M,即坐標軸 X,Y,Z在坐標系 O′-X′Y′Z′,O″-X″Y″Z″的方向余弦值相同。原點O″與點M重合,其在坐標系O-XYZ中的坐標亦為(x,y,z)。因此,根據(jù)式(18)可知點 N在坐標系 O′-X′Y′Z′中的新坐標(i,j,k)為
式中:(x1,y1,z1),(x2,y2,z2),(x3,y3,z3)分別為圖2中點P1,P2,P3在坐標系O-XYZ中的坐標,根據(jù)點 N在坐標系 O″-X″Y″Z″中的新坐標(i,j,k)可求出曲面Σ在點M處的外單位法向量{i,j,k}。
圖4 曲面法向量轉(zhuǎn)換示意圖
1.6.2 曲面點M法線反方向數(shù)據(jù)已知情況下
根據(jù)1.4和1.6.1內(nèi)容可知,式(9)中 nx-x=-dr(0),ny-y=-dr(1),nz-z=-dr(2)
故式(19)可轉(zhuǎn)化為
基于上述分析研究成果,開發(fā)了“CMM測量點采集輔助軟件”,軟件運行效果和數(shù)據(jù)輸出效果均達到了預(yù)期的目標,下面具體進行介紹。
“CMM測量點采集輔助軟件”由導(dǎo)出、導(dǎo)入、點位、恢復(fù)模塊四部分組成:導(dǎo)出模塊主要用來提取測量數(shù)據(jù);導(dǎo)入模塊主要用來導(dǎo)入外來數(shù)據(jù)生成點云和驗證導(dǎo)出數(shù)據(jù)的正確性;點位模塊主要用來生成點位圖供打印或抓圖;恢復(fù)模塊主要用來恢復(fù)點位模塊使用前的CATIA窗口環(huán)境。因為生成點位圖時CATIA窗口環(huán)境會發(fā)生變化,如背景色變?yōu)榘咨?,點位模塊與恢復(fù)模塊為互斥關(guān)系。軟件設(shè)計流程見圖5所示。
圖5 軟件組成
本軟件最主要的功能是從CATIA給出的CAD模型中導(dǎo)出準備測量的數(shù)據(jù)。軟件所提供的導(dǎo)出模塊支持以毫米與英寸為測量單位的數(shù)據(jù)導(dǎo)出功能;測量點選取類型支持坐標點、線上點、面上點、交點、投影點、孔中心點、切點等類型;測量點選取方式支持粗選、手選、集選3種方式;測量型面選取方式支持手動選取和自動拓撲選取2種方式,測量型面選取時會自動生成參考法向量方向箭頭,若遇特殊情況,箭頭指示方向與預(yù)期相反時,只需將該測量型面上已導(dǎo)出的點的單位法矢數(shù)據(jù)乘以-1即可(或使用型面法矢反轉(zhuǎn)功能)。數(shù)據(jù)導(dǎo)出過程中,可自動檢測出體外點、非測量型面點、坐標系原點、重復(fù)點等錯誤點,并在信息頁面列出有關(guān)錯誤的詳細情況,具有一定的防錯功能。數(shù)據(jù)導(dǎo)出精度可自選且數(shù)據(jù)按照“N,X,Y,Z,I,J,K”格式進行輸出,以txt文件格式進行保存??紤]到使用的方便性,未對數(shù)據(jù)進行任何加密保護。導(dǎo)出模塊程序設(shè)計流程如圖6所示,其整體運行效果和數(shù)據(jù)輸出結(jié)果見圖7,8所示。
圖6 數(shù)據(jù)導(dǎo)出模塊程序設(shè)計流程圖
圖7 軟件運行過程界面
圖8 測量數(shù)據(jù)輸出效果
為了驗證軟件導(dǎo)出數(shù)據(jù)的正確性,在導(dǎo)入模塊中增加了曲面點位法矢的導(dǎo)入驗證功能,因此導(dǎo)入模塊不僅具有導(dǎo)入外來數(shù)據(jù)功能,而且還具有驗證導(dǎo)出模塊所導(dǎo)出測量數(shù)據(jù)的點位及點位法矢的正確性功能,軟件運行效果如圖9所示。為了易于觀察,軟件將點位法矢的長度設(shè)為30,而不是傳統(tǒng)的1,并用紅色顯示,若導(dǎo)入點未生成點位法矢,則意味著導(dǎo)入數(shù)據(jù)未提供單位法矢或所提供的單位法矢數(shù)據(jù)有誤,需自行研判數(shù)據(jù)。
為解決CATIA數(shù)模的CMM數(shù)據(jù)源問題,提出了一種CATIA曲面法向量和坐標轉(zhuǎn)換算法?;谠撍惴?,利用VB語言成功開發(fā)出CMM測量點采集輔助軟件,并已取得相關(guān)軟件著作權(quán)。本文的研究為其它CAD/CAM軟件進行類似功能的二次開發(fā)提供了參考,同時可為企業(yè)節(jié)約一定的軟件開發(fā)、采購和維護成本。