張蘭慶,柯 波,楊柏依,董 鵬,夏 陽
(1.華能萊蕪發電有限公司,山東 濟南 271102;2.北京能為科技股份有限公司,北京 100071)
對于煤炭料場行業來說,大型散料場需要智能化無人運行,實現數據可視化是必須實現的功能。數據可視化可根據數據的特征、性質等屬性,通過圖形圖像等合適的方式,將數據直觀地、有概念性地展示出來,幫助大家更好地、更清晰地理解數據,掌握數據中的有用信息。使用基于OpenGL 技術實現了煤場的3D 展示與煤場的數字化展示。通過激光掃描儀將煤場進行掃描形成點云數據,然后建立三維模型,再使用OpenGL 技術與Unity3D 技術實現三維可視。由于點云數據量巨大,提出優化建模方式極大提高了建模的效率,并且優化了三維展示效果。
三維掃描是三維成像過程中最重要的一步。堆料臂前端安裝一臺高精度激光掃描儀,取料臂前端兩側分別安裝一臺高精度激光掃描儀,可以實現堆料取料時對當前工作料堆的實時清晰扇形掃描。煤堆的點云數據就是通過安裝在堆取料機[1]上的激光掃描設備掃描采集的,采集后的數據通過以太網通信錄入后臺數據庫。主要硬件為SICK LD-LRS3611型號的激光掃描儀,安裝位置與掃描原理如圖1所示。

圖1 激光掃描儀掃描煤場過程
掃描儀發射幾束激光進行掃描,射線碰撞的地方會寫入數據,然后通過掃描儀在空間的移動和旋轉掃描整個料場的輪廓。激光掃描儀掃描完料堆輪廓后,需要快速、準確地采集和整理工作料堆的掃描數據。激光掃描儀通過以太網將收集到的堆數據發送到集中控制服務器。激光掃描儀掃描出點工作原理如圖2 所示。

圖2 激光掃描儀掃描出點
先定義三維點結構,以點結構為基礎,由每3 個點構造一個三角面片結構,然后再定義一個三角面片鏈表結構用于存儲一系列的三角面片,并在此鏈表中存儲三角面片的公共屬性,如顏色、透明度等,這樣一個有數據的三角面片鏈表結構就表示了一個三維模型,鏈表中存儲的三角面片公共屬性也就是模型的屬性。三維模型構建過程為:三維點→三角面片→三維模型[2],如圖3 所示。

圖3 三維模型構建過程
圖4 所示流程僅為為幾個點面的程序流程,獲取到以A 點為基礎,以X 軸與Z 軸方向最大擴展距離的三維點鏈表。三維煤場的點面數據上千個,大規模的點云數據在處理時會涉及多重循環,會導致頻繁迭代處理,嚴重影響服務器的性能。再者,由于激光掃描測量收集的數據密度特別高,并且這些點由于堆取料機的抖動和距離變化而分布不規則,并且所有這些離散點都被用于構建三維模型,進一步增加了系統的復雜性,這將占用更多的計算資源,并且不利于后續的實時計算處理。為此,引入了模型優化算法。

圖4 煤場點云數據點處理流程
首先是對內存優化[3]。設置OpenGL 系統上的專屬內存區域,將局部內存區域映射到全局內存的區段,這個內存區域是一個工作項私有的區域。工作項私有內存中定義的變量對其他工作項不可見。工作項在處理單元上運行,有其自己的私有內存。工作項在一個計算單元上運行,與該組中的工作項共享一個局部內存區域。由此來減少對計算機硬件性能的消耗。
其次是通過高斯濾波算法對煤堆顯示效果進行優化,實現三維圖像處理與成像軟件的自動糾錯、降噪處理功能,對明顯的噪聲數據、錯誤數據能夠自動過濾,形成直觀、平滑、完整的模型數據,進而生成更加美觀與直觀的模型效果。
再次,通過高斯濾波對圖像進行平滑以消除噪聲,然后計算二階導數,并通過二階導數的過零來確定邊緣。在計算中,將復雜的卷積轉換為乘積運算,降低運算量和計算復雜度。
通過對數據點云的采集到對數據建模處理以及優化效果所得到模型進行實時渲染,共有兩種渲染方式。
首先,對點云數據中的點線面順序值的節點和點線面狀態屬性的節點分別進行樹形結構的建立。
然后,兩個樹形結構建立完成后,首先對節點樹形結構的葉子節點進行排序工作,由根節點開始遍歷,依次渲染實體節點;然后再根據狀態樹的樹形結構,應用該渲染葉子節點對應的OpenGL 狀態屬性,達到某種OpenGL 狀態之后,進行渲染葉子節點網格數據的提交渲染[4]。

圖5 OpenGL 渲染樹結構
Unity3D 渲染模型是直接導入渲染,但在使用的過程中不能實時渲染,因此導入渲染是不可行的。于是使用了動態加載,使用能動態生成U3D 支持的渲染模式,并設計了動態繪制Mesh 函數,通過讀取與解析已生成點源模型信息的方式獲取模型信息,動態為Mesh 的點線面賦值。實時生成可視化3 維模型的效果[5],實現技術流程如圖6 所示,某電廠的實時效果如圖7 所示。

圖6 Unity3D 渲染流程

圖7 Unity3D 渲染效果
系統已經在某電廠進行了實施,并獲得了不錯的成效。實現了煤場的三維展示,并且實現了動態刷新數據,煤場的分區數據可在三維展示圖上進行展示,在堆取料機無人值守過程中將數據直觀地展示出來,幫助大家更好地清晰理解煤場現有存量數據,并掌握煤場數據中的有用信息。