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