張?zhí)m慶,柯 波,楊柏依,董 鵬,夏 陽
(1.華能萊蕪發(fā)電有限公司,山東 濟南 271102;2.北京能為科技股份有限公司,北京 100071)
對于煤炭料場行業(yè)來說,大型散料場需要智能化無人運行,實現(xiàn)數(shù)據(jù)可視化是必須實現(xiàn)的功能。數(shù)據(jù)可視化可根據(jù)數(shù)據(jù)的特征、性質(zhì)等屬性,通過圖形圖像等合適的方式,將數(shù)據(jù)直觀地、有概念性地展示出來,幫助大家更好地、更清晰地理解數(shù)據(jù),掌握數(shù)據(jù)中的有用信息。使用基于OpenGL 技術(shù)實現(xiàn)了煤場的3D 展示與煤場的數(shù)字化展示。通過激光掃描儀將煤場進(jìn)行掃描形成點云數(shù)據(jù),然后建立三維模型,再使用OpenGL 技術(shù)與Unity3D 技術(shù)實現(xiàn)三維可視。由于點云數(shù)據(jù)量巨大,提出優(yōu)化建模方式極大提高了建模的效率,并且優(yōu)化了三維展示效果。
三維掃描是三維成像過程中最重要的一步。堆料臂前端安裝一臺高精度激光掃描儀,取料臂前端兩側(cè)分別安裝一臺高精度激光掃描儀,可以實現(xiàn)堆料取料時對當(dāng)前工作料堆的實時清晰扇形掃描。煤堆的點云數(shù)據(jù)就是通過安裝在堆取料機[1]上的激光掃描設(shè)備掃描采集的,采集后的數(shù)據(jù)通過以太網(wǎng)通信錄入后臺數(shù)據(jù)庫。主要硬件為SICK LD-LRS3611型號的激光掃描儀,安裝位置與掃描原理如圖1所示。
圖1 激光掃描儀掃描煤場過程
掃描儀發(fā)射幾束激光進(jìn)行掃描,射線碰撞的地方會寫入數(shù)據(jù),然后通過掃描儀在空間的移動和旋轉(zhuǎn)掃描整個料場的輪廓。激光掃描儀掃描完料堆輪廓后,需要快速、準(zhǔn)確地采集和整理工作料堆的掃描數(shù)據(jù)。激光掃描儀通過以太網(wǎng)將收集到的堆數(shù)據(jù)發(fā)送到集中控制服務(wù)器。激光掃描儀掃描出點工作原理如圖2 所示。
圖2 激光掃描儀掃描出點
先定義三維點結(jié)構(gòu),以點結(jié)構(gòu)為基礎(chǔ),由每3 個點構(gòu)造一個三角面片結(jié)構(gòu),然后再定義一個三角面片鏈表結(jié)構(gòu)用于存儲一系列的三角面片,并在此鏈表中存儲三角面片的公共屬性,如顏色、透明度等,這樣一個有數(shù)據(jù)的三角面片鏈表結(jié)構(gòu)就表示了一個三維模型,鏈表中存儲的三角面片公共屬性也就是模型的屬性。三維模型構(gòu)建過程為:三維點→三角面片→三維模型[2],如圖3 所示。
圖3 三維模型構(gòu)建過程
圖4 所示流程僅為為幾個點面的程序流程,獲取到以A 點為基礎(chǔ),以X 軸與Z 軸方向最大擴展距離的三維點鏈表。三維煤場的點面數(shù)據(jù)上千個,大規(guī)模的點云數(shù)據(jù)在處理時會涉及多重循環(huán),會導(dǎo)致頻繁迭代處理,嚴(yán)重影響服務(wù)器的性能。再者,由于激光掃描測量收集的數(shù)據(jù)密度特別高,并且這些點由于堆取料機的抖動和距離變化而分布不規(guī)則,并且所有這些離散點都被用于構(gòu)建三維模型,進(jìn)一步增加了系統(tǒng)的復(fù)雜性,這將占用更多的計算資源,并且不利于后續(xù)的實時計算處理。為此,引入了模型優(yōu)化算法。
圖4 煤場點云數(shù)據(jù)點處理流程
首先是對內(nèi)存優(yōu)化[3]。設(shè)置OpenGL 系統(tǒng)上的專屬內(nèi)存區(qū)域,將局部內(nèi)存區(qū)域映射到全局內(nèi)存的區(qū)段,這個內(nèi)存區(qū)域是一個工作項私有的區(qū)域。工作項私有內(nèi)存中定義的變量對其他工作項不可見。工作項在處理單元上運行,有其自己的私有內(nèi)存。工作項在一個計算單元上運行,與該組中的工作項共享一個局部內(nèi)存區(qū)域。由此來減少對計算機硬件性能的消耗。
其次是通過高斯濾波算法對煤堆顯示效果進(jìn)行優(yōu)化,實現(xiàn)三維圖像處理與成像軟件的自動糾錯、降噪處理功能,對明顯的噪聲數(shù)據(jù)、錯誤數(shù)據(jù)能夠自動過濾,形成直觀、平滑、完整的模型數(shù)據(jù),進(jìn)而生成更加美觀與直觀的模型效果。
再次,通過高斯濾波對圖像進(jìn)行平滑以消除噪聲,然后計算二階導(dǎo)數(shù),并通過二階導(dǎo)數(shù)的過零來確定邊緣。在計算中,將復(fù)雜的卷積轉(zhuǎn)換為乘積運算,降低運算量和計算復(fù)雜度。
通過對數(shù)據(jù)點云的采集到對數(shù)據(jù)建模處理以及優(yōu)化效果所得到模型進(jìn)行實時渲染,共有兩種渲染方式。
首先,對點云數(shù)據(jù)中的點線面順序值的節(jié)點和點線面狀態(tài)屬性的節(jié)點分別進(jìn)行樹形結(jié)構(gòu)的建立。
然后,兩個樹形結(jié)構(gòu)建立完成后,首先對節(jié)點樹形結(jié)構(gòu)的葉子節(jié)點進(jìn)行排序工作,由根節(jié)點開始遍歷,依次渲染實體節(jié)點;然后再根據(jù)狀態(tài)樹的樹形結(jié)構(gòu),應(yīng)用該渲染葉子節(jié)點對應(yīng)的OpenGL 狀態(tài)屬性,達(dá)到某種OpenGL 狀態(tài)之后,進(jìn)行渲染葉子節(jié)點網(wǎng)格數(shù)據(jù)的提交渲染[4]。
圖5 OpenGL 渲染樹結(jié)構(gòu)
Unity3D 渲染模型是直接導(dǎo)入渲染,但在使用的過程中不能實時渲染,因此導(dǎo)入渲染是不可行的。于是使用了動態(tài)加載,使用能動態(tài)生成U3D 支持的渲染模式,并設(shè)計了動態(tài)繪制Mesh 函數(shù),通過讀取與解析已生成點源模型信息的方式獲取模型信息,動態(tài)為Mesh 的點線面賦值。實時生成可視化3 維模型的效果[5],實現(xiàn)技術(shù)流程如圖6 所示,某電廠的實時效果如圖7 所示。
圖6 Unity3D 渲染流程
圖7 Unity3D 渲染效果
系統(tǒng)已經(jīng)在某電廠進(jìn)行了實施,并獲得了不錯的成效。實現(xiàn)了煤場的三維展示,并且實現(xiàn)了動態(tài)刷新數(shù)據(jù),煤場的分區(qū)數(shù)據(jù)可在三維展示圖上進(jìn)行展示,在堆取料機無人值守過程中將數(shù)據(jù)直觀地展示出來,幫助大家更好地清晰理解煤場現(xiàn)有存量數(shù)據(jù),并掌握煤場數(shù)據(jù)中的有用信息。