鮑晨興, 王鍇磊, 郭天茂
(北京航天計量測試技術(shù)研究所,北京 100076)
三維坐標測量軟件是測量儀器與檢測人員之間的人機交互接口,軟件一般具有設(shè)備控制、模型導入、數(shù)據(jù)顯示、數(shù)據(jù)處理、逆向建模等功能[1-3],三維坐標測量軟件既是數(shù)據(jù)采集、處理應(yīng)用軟件,也是多元化檢測系統(tǒng)的集成平臺和信息展示的窗口。國內(nèi)軍工行業(yè)各大主機廠所使用的高端坐標檢測設(shè)備大多數(shù)仍然依靠國外進口,配套的坐標測量軟件也基本是國外的商業(yè)軟件,價格昂貴,存在信息安全隱患,無法定制開發(fā),不能滿足工業(yè)互聯(lián)網(wǎng)和車間數(shù)字化的發(fā)展需求,因此亟需開發(fā)具有國產(chǎn)自主知識產(chǎn)權(quán)的通用型坐標測量軟件。
國外的商業(yè)化三維坐標測量軟件如NRK公司的Spatial Analyzer、InnoveMetric公司的PolyWorks、3D System公司的Geometric等在幾何檢測領(lǐng)域有廣泛的應(yīng)用[4],它們均是通用型的坐標測量軟件,檢測功能較完善,能夠兼容多種儀器設(shè)備,雖然提供二次開發(fā)接口,但二次開發(fā)接口的功能有限,對國產(chǎn)設(shè)備不能兼容。隨著中國制造業(yè)的快速發(fā)展,國內(nèi)高校、研究機構(gòu)也進行了三維坐標測量軟件的開發(fā)[5],常用于坐標測量軟件開發(fā)的三維引擎有ACIS、HOOP、OpenCASCADE、OpenSceneGraph等[6-8],ACIS和HOOPS屬于商業(yè)庫,價格昂貴,系統(tǒng)龐大,開發(fā)上手比較困難;OpenCASCADE屬于開源庫,雖然免費,但是相關(guān)資料較少,穩(wěn)定性較差,開發(fā)起來也很困難。目前國內(nèi)還沒有成熟穩(wěn)定的通用型坐標測量軟件,國內(nèi)現(xiàn)有的測量軟件一般由測量儀器設(shè)備廠家定制開發(fā),數(shù)據(jù)處理功能不夠完善,無法兼容多種儀器設(shè)備,不具備通用性。
AnyCAD Rapid SDK(以下簡稱AnyCAD)是一個包含三維幾何造型、圖形顯示、數(shù)據(jù)管理等模塊的綜合三維圖形平臺,AnyCAD核心功能基于C++實現(xiàn),由幾何造型、顯示引擎、數(shù)據(jù)管理和交互框架組成,在開發(fā)接口上又分為AnyGeom幾何造型模塊和AnyViz三維顯示模塊[9]。本文采用AnyCAD搭建坐標測量軟件的基礎(chǔ)框架,實現(xiàn)三維模型導入和解析、三維顯示和人機交互等功能。檢測數(shù)據(jù)處理時借助AnyCAD良好的交互功能,實現(xiàn)形位公差的構(gòu)建和測量結(jié)果的顯示。
本文旨在搭建一款通用型的坐標測量軟件平臺,能夠連接多種國產(chǎn)和進口的測量儀器和設(shè)備,具備良好的三維顯示交互和完善的數(shù)據(jù)處理功能。通過研究,驗證了基于AnyCAD引擎快速搭建三維坐標測量軟件的可行性,為通用型三維坐標測量軟件的國產(chǎn)自主化提供有力的支撐,為軍工行業(yè)測量數(shù)據(jù)信息安全提供有力的保障,為車間實現(xiàn)測量儀器的統(tǒng)一管理和多種設(shè)備互聯(lián)等目標做好準備。
三維坐標測量儀器種類繁多,常見的有三坐標測量機、激光跟蹤儀、經(jīng)緯儀、激光雷達等[10],每類測量儀器的測量原理不盡相同,但測量數(shù)據(jù)的類型基本一致,均為三維坐標點。三維坐標測量軟件的測量數(shù)據(jù)均源于此類測量儀器,坐標測量軟件一般具有三維可視化功能,可以實時顯示測量數(shù)據(jù)[11];具備多種格式的數(shù)據(jù)導入功能,可以實現(xiàn)CAD模型的導入和不同設(shè)備測量數(shù)據(jù)的導入;具有通用的程序接口,便于連接多種設(shè)備;具備完善的數(shù)據(jù)處理功能,可以進行三維幾何重建、尺寸測量、公差評價、模型匹配等。
本文研究的三維坐標測量軟件的主要功能分為以下4部分:三維可視化及交互[12]、設(shè)備管理及數(shù)據(jù)采集、CAD模型導入及幾何解析、測量數(shù)據(jù)處理,具體如圖1所示。
圖1 三維坐標測量軟件組成原理
本文開發(fā)的三維坐標測量軟件是基于Windows操作系統(tǒng)開發(fā)的WinForm類型應(yīng)用程序,采用模塊化設(shè)計方便更新和維護,主要包括三維顯示交互模塊、三維幾何造型模塊、儀器接口模塊、數(shù)據(jù)處理算法模塊等,如圖2所示。
圖2 三維坐標測量軟件架構(gòu)
CAD模型是零件加工制造的基礎(chǔ),在三維坐標測量軟件中CAD模型主要有以下兩種作用:① 利用CAD模型進行測量路徑規(guī)劃;② 測量數(shù)據(jù)與CAD模型進行比對從而計算誤差。CAD模型數(shù)據(jù)中不僅包含結(jié)構(gòu)化的數(shù)據(jù)如三維點坐標,也包含幾何信息如直線的方向、平面的法向等信息,對CAD模型進行幾何解析就是獲取所有的數(shù)據(jù)信息,以便于后續(xù)的測量和計算。
AnyGeom幾何造型引擎具備幾何造型和模型解析的功能,模型解析的原理如圖3所示,從CAD模型上可以獲取其包含的所有幾何形狀的解析表達。
圖3 CAD模型解析原理
三維可視化顯示是采用AnyViz顯示引擎,其原理如圖4所示,待顯示的物體通過SceneNode類進行實例化,通過Geometry、Shape等相關(guān)類來描述形狀,通過Material類來描述外觀、材質(zhì),通過Matrix、Transform類來管理物體位置及觀察視角。
圖4 三維可視化原理
測量點數(shù)據(jù)三維可視化的代碼如下,其中mRenderView是AnyViz渲染器(以下簡稱渲染器)的實例對象。
var material =PointsMaterial.Create("point-material");//創(chuàng)建顯示的外觀
material.SetPointSize(2.0f);//設(shè)置顯示點的大小 material.GetTemplate().SetVertexColors(true);
var geometry = GeometryBuilder.CreatePoints(new Float32Array(mPositions),new Float32Array(mColors));//通過點數(shù)據(jù)創(chuàng)建幾何對象
var node = new PrimitiveSceneNode(geometry,material);//通過幾何對象創(chuàng)建顯示節(jié)點
mRenderView.ShowSceneNode(node);//顯示節(jié)點
測量數(shù)據(jù)為離散的三維坐標點,通過數(shù)據(jù)處理才能得到測量結(jié)果。數(shù)據(jù)處理功能是利用測量點數(shù)據(jù)進行幾何形狀重建、距離計算、角度計算、投影、相交等。
三維坐標測量儀器采集的數(shù)據(jù)一般均為三維坐標點,因此可以通過設(shè)計統(tǒng)一的數(shù)據(jù)接口實現(xiàn)從不同的測量設(shè)備采集測量數(shù)據(jù)。測量設(shè)備生產(chǎn)商一般會向使用者提供用于二次開發(fā)的SDK。利用這些SDK可以通過軟件接口連接設(shè)備并獲取測量數(shù)據(jù),然后根據(jù)數(shù)據(jù)接口的格式進行轉(zhuǎn)換,就可以將數(shù)據(jù)導入到三維坐標測量軟件中。
本軟件基于Windows10 64-bit系統(tǒng),采用Visual Studio2017進行開發(fā),利用AnyCAD SDK實現(xiàn)三維顯示、交互操作及模型導入,圖5為三維坐標測量軟件主界面,主要包括軟件功能工具欄、設(shè)備與數(shù)據(jù)管理區(qū)、三維可視化顯示與交互區(qū)、儀器操作區(qū)等。
圖5 三維坐標測量軟件操作界面及主要功能展示
三維可視化數(shù)據(jù)管理是指對創(chuàng)建的測量數(shù)據(jù)、導入的幾何模型等進行顯示、隱藏、刪除等操作。渲染器中的每個顯示節(jié)點可以設(shè)置唯一的id,可以通過id從渲染器中獲取某個顯示節(jié)點,從而進行管理操作。本文創(chuàng)建字典類型對象Dictionary
圖6 可視化數(shù)據(jù)管理流程圖
人機交互是通過用戶輸入(鼠標、鍵盤等)實現(xiàn)對顯示數(shù)據(jù)的操作,如旋轉(zhuǎn)、平移、縮放、拾取等。其中拾取操作是測量數(shù)據(jù)處理時的必要功能,本文設(shè)計了pickDisplayInfo函數(shù)用于響應(yīng)渲染器的選擇事件。
public void pickDisplayInfo(PickedItem item)
{ switch (item.GetShapeType())
{ case EnumShapeFilter.Vertex:
//處理函數(shù);break;
case EnumShapeFilter.Face:
//處理函數(shù);break;..}}
其中,PickedItem對象包含了被選中的節(jié)點信息,如節(jié)點的幾何類型、id等,然后通過id獲取數(shù)據(jù)并處理。
導入CAD模型是為了獲取待測零件各種幾何參數(shù)的理論設(shè)計值,借助AnyGeom幾何造型引擎可以實現(xiàn)對STP和IGES格式的三維模型導入,導入后得到TopoShape類型的對象,通過GetTopoShape()方法可以得到所有幾何拓撲結(jié)構(gòu)和幾何參數(shù),GetChildren(EnumTopoShapeType)方法可以獲取指定類型的子拓撲結(jié)構(gòu)的對象列表,比如獲取一個體的所有邊,一個邊的所有點等。通過TopoShape:FindChild()方法可以獲取指定索引和類型的子拓撲對象。模型解析的代碼實現(xiàn)如下。
var shape = StepIO.Open(file);
TopoShape totalshape = shape.GetTopoShape();
TopoShapeList edgeList = totalshape.GetChildren(EnumTopoShapeType.Topo_EDGE);
foreach (TopoShape edge in edgeList)
{TopoShapeList vertexList=edge.GetChildren(EnumTopoShapeType.Topo_Vertex);
foreach (TopoShape vertex in vertexList)
{ … //處理數(shù)據(jù)} }
通過以上方法可以從CAD模型中獲取測量目標的理論參數(shù)。圖7為CAD模型拾取某個面獲取其幾何解析參數(shù)的界面,信息包括原點坐標和法線方向。
圖7 CAD模型獲取幾何解析參數(shù)
分別選取Leica激光跟蹤儀AT960和北京航天計量測試技術(shù)研究所研制的調(diào)頻激光雷達掃描儀,作為國外測量設(shè)備和國產(chǎn)設(shè)備的代表,以此驗證多設(shè)備兼容的可行性,圖5中右測區(qū)域即為兩種儀器的操作界面。
設(shè)計了測量數(shù)據(jù)接口函數(shù)addSinglePoint(string pointname,double x,double y,double z),其中包含測量點名稱和三維坐標值。設(shè)計了設(shè)備管理類Class_Device用于管理不同的測量儀器,該類包含設(shè)備的操作界面、設(shè)備實例對象和設(shè)備名稱等屬性。Leica激光跟蹤儀提供的SDK為LMF.Tracker.Connection,通過其MeasurementArrived事件響應(yīng)函數(shù)可以獲取測量點的三維坐標值;調(diào)頻激光雷達提供的SDK為LaserRanderDLL,通過其sendSingleMeas事件響應(yīng)函數(shù)可以獲取測量點的三維坐標值。將測量點的三維坐標值再添加自定義名稱,調(diào)用addSinglePoint函數(shù)即可將測量數(shù)據(jù)傳入測量軟件中。
public class Class_Device
{ public Form_Device _formDevice;
public Device _device;
public string _name; }
本文將AnyCAD三維引擎應(yīng)用于三維坐標測量軟件的開發(fā),通過AnyGeom幾何造型引擎實現(xiàn)CAD模型的導入及解析,通過AnyViz顯示引擎實現(xiàn)測量數(shù)據(jù)和數(shù)據(jù)處理結(jié)果的顯示,開發(fā)了一款通用型三維坐標測量軟件,具備良好的三維可視化及人機交互、模型導入與解析等功能,同時能夠兼容多種測量儀器設(shè)備。通過研究,驗證了基于AnyCAD平臺快速搭建具有國產(chǎn)自主知識產(chǎn)權(quán)坐標測量軟件的可行性,并驗證了對國內(nèi)外坐標測量儀器同時兼容的可能性。