楊 碩,楊文英,王海群
(國(guó)能網(wǎng)信科技(北京)有限公司,北京 100010)
火電廠條形煤場(chǎng)斗輪機(jī)對(duì)自動(dòng)化堆、取料作業(yè)的實(shí)現(xiàn),是利用安裝于大機(jī)懸臂兩側(cè)的三維動(dòng)態(tài)激光掃描儀作為檢測(cè)裝置,通過(guò)對(duì)煤場(chǎng)的目標(biāo)煤堆進(jìn)行實(shí)時(shí)掃描,利用三維成像建模技術(shù),對(duì)掃描獲得的實(shí)時(shí)數(shù)據(jù)進(jìn)行三維成像建模,利用圖像識(shí)別與分析技術(shù)提取煤堆三維模型中關(guān)鍵作業(yè)參數(shù),計(jì)算出堆料落料點(diǎn),料堆高度、寬度、長(zhǎng)度、取料作業(yè)每層切入點(diǎn)、旋臂旋回角度、開(kāi)層長(zhǎng)度等數(shù)據(jù),為實(shí)現(xiàn)自動(dòng)堆、取料功能提供數(shù)據(jù)依據(jù)。同時(shí),通過(guò)多重安全防護(hù)措施,在確定安全的前提下,及時(shí)調(diào)整單機(jī)的走行、俯仰和回轉(zhuǎn)動(dòng)作,從而控制斗輪機(jī)進(jìn)行自動(dòng)堆、取料作業(yè)。在斗輪機(jī)智能化無(wú)人值守作業(yè)系統(tǒng)中,煤場(chǎng)煤堆及斗輪機(jī)的三維點(diǎn)云數(shù)據(jù)至關(guān)重要,它為整個(gè)煤場(chǎng)實(shí)現(xiàn)全自動(dòng)化無(wú)人值守控制提供有力的數(shù)據(jù)支撐。
整個(gè)煤場(chǎng)的三維激光掃描成像多選擇應(yīng)用最廣泛的激光掃描成像技術(shù)?;痣姀S條形煤場(chǎng)中,一般在斗輪機(jī)的懸臂前端兩側(cè)或在煤場(chǎng)頂棚軌道上,安裝德國(guó)進(jìn)口品牌SICK LD-LRS3611 型高精度激光掃描設(shè)備,實(shí)時(shí)對(duì)煤場(chǎng)當(dāng)前煤堆進(jìn)行快速掃描,獲取煤堆及斗輪機(jī)的實(shí)時(shí)輪廓及位置數(shù)據(jù),并將斗輪機(jī)運(yùn)行機(jī)構(gòu)編碼器信息(行走、俯仰、回轉(zhuǎn))進(jìn)行空間坐標(biāo)轉(zhuǎn)換,轉(zhuǎn)換計(jì)算成后臺(tái)控制程序可以處理的三維點(diǎn)云數(shù)據(jù)。三維點(diǎn)云數(shù)據(jù)經(jīng)過(guò)去噪(濾波)、精簡(jiǎn)、拼接、網(wǎng)格規(guī)格化、空點(diǎn)補(bǔ)充處理后成為標(biāo)準(zhǔn)的網(wǎng)格數(shù)據(jù),最大程度趨近于真實(shí)煤堆數(shù)據(jù)并寫(xiě)入系統(tǒng)數(shù)據(jù)庫(kù)。
煤堆三維數(shù)字模型的建立,為智能堆取料無(wú)人作業(yè)系統(tǒng)模塊提供最新的料場(chǎng)工況信息,指導(dǎo)大機(jī)完成快速、穩(wěn)定、精準(zhǔn)的堆取料作業(yè)。掃描測(cè)量完成的數(shù)據(jù)通過(guò)有線或無(wú)線的方式傳輸?shù)椒?wù)器上進(jìn)行數(shù)據(jù)合成計(jì)算,生成煤場(chǎng)料堆的數(shù)字模型及相關(guān)展示圖形,并同步計(jì)算出煤場(chǎng)的料堆體積,結(jié)合不同區(qū)域煤種堆存比重,得出相應(yīng)的儲(chǔ)煤量和盤(pán)存報(bào)表。
煤場(chǎng)三維可視化方面,采用目前比較流行的三維圖形開(kāi)發(fā)技術(shù)WebGL 和封裝好的Three.js 3D 引擎庫(kù)。WebGL(Web GrapHics Library,Web 圖形庫(kù))是一項(xiàng)在瀏覽器中展示基于硬件加速的3D 圖像的WebGL 技術(shù)。目前Web 網(wǎng)頁(yè)形式的三維模型動(dòng)畫(huà)的交互普遍存在2 個(gè)問(wèn)題:①如果要對(duì)建立好的三維設(shè)備模型進(jìn)行渲染的話(huà),需要在瀏覽器訪問(wèn)端安裝許多兼容的插件才可進(jìn)行渲染工作,而這些插件的運(yùn)行會(huì)影響整個(gè)網(wǎng)頁(yè)端訪問(wèn)的穩(wěn)定性和可用性;②有些設(shè)計(jì)好的三維模型動(dòng)畫(huà)要想看到最好的效果,只能在指定的環(huán)境或平臺(tái)上運(yùn)行,沒(méi)法在其他類(lèi)似的環(huán)境中運(yùn)行,兼容性和跨平臺(tái)性太差,客戶(hù)體驗(yàn)也不是很好。本文中描述的系統(tǒng)采用的WebGL 可以很好地解決這兩個(gè)問(wèn)題,因?yàn)樗捎肏TML 腳本對(duì)三維模型進(jìn)行整體的渲染,不需要再安裝任何額外的插件,即可以實(shí)現(xiàn)網(wǎng)頁(yè)端的交互式瀏覽及各種動(dòng)畫(huà)制作,腳本運(yùn)行穩(wěn)定,與其他平臺(tái)也有著較好的兼容性,三維模型的渲染速度很快,客戶(hù)體驗(yàn)很好。
基于WebGL 技術(shù)實(shí)現(xiàn)三維模型數(shù)據(jù)的可視化,采用開(kāi)源的3D 引擎Three.js 可以獲得期望的效果。Three.js 不僅掩蓋了3D渲染細(xì)節(jié)、面向?qū)ο?、功能豐富、速度快、支持交互、內(nèi)置文件支持、拓展性強(qiáng),同時(shí)還支持HTML5、2D、Canvas。
在本系統(tǒng)中,采用WebGL 最受歡迎的開(kāi)源框架Three.js 來(lái)進(jìn)行煤場(chǎng)三維模型的渲染,以Three.js 框架為基礎(chǔ),構(gòu)建一套煤場(chǎng)3D 可視化系統(tǒng),主要實(shí)現(xiàn)流程如圖1 所示。
在html 頁(yè)面引入.js 文件。
引入three.js 庫(kù)文件,可以下載到本地或直接引用線上地址。
相機(jī)控制:OrbitControls.js。
引入外部.FBX 模型:inflate.min.js、FBXLoader.js。
添加容器:
var container=document.createElement('div');
document.body.appendChild(container);
場(chǎng)景聲明:
var threeScene=new THREE.Scene();
添加相機(jī):
var k=window.innerWidth/window.innerHeight;//長(zhǎng)寬比
var threeCamera=new THREE.PerspectiveCamera(45,k,0.1,100000000);
相機(jī)位置:
threeCamera.position.set(0,1800,3500);
設(shè)置渲染器:
var threeRenderer=new THREE.WebGLRenderer();
threeRenderer.setSize(window.innerWidth,window.innerHeight);
container.appendChild(threeRenderer.domElement);
點(diǎn)光源:
var threePoint=new THREE.PointLight(0xffffff);
點(diǎn)光源位置:
threePoint.position.set(0,4500,1000);
環(huán)境光:
var threeAmbient=new THREE.AmbientLight(0x444444);
將光源添加進(jìn)場(chǎng)景:
threeScene.add(threePoint,threeAmbient);
相機(jī)控制:
var threeControls=new THREE.OrbitControls(threeCamera,threeRenderer.domElement)
創(chuàng)建模型:
創(chuàng)建一個(gè)平面對(duì)象Plane
var threePlane=new THREE.PlaneGeometry(100,100);
創(chuàng)建材料對(duì)象Material
var threeMaterial=new THREE.MeshLambertMaterial({color:'#34495E' });
創(chuàng)建網(wǎng)格模型對(duì)象Mesh
var mesh=new THREE.Mesh(threePlane,threeMaterial);
將網(wǎng)格模型添加到場(chǎng)景中
threeScene.add(mesh);
加載模型:
var loader=new THREE.FBXLoader();
loader.load("SambaDancing.fbx",function(obj){
obj.visible=false;//模型隱藏
threeScene.add(obj);//將模型添加到場(chǎng)景中
}
function rendererAnimate(){
threeControls.update();
requestAnimationFrame(rendererAnimate);
threeRenderer.render(threeScene,threeCamera);
}
rendererAnimate();
通過(guò).ajax 獲取數(shù)據(jù),并把實(shí)際數(shù)據(jù)轉(zhuǎn)換成三維數(shù)據(jù)。
基于WebGL 三維建模技術(shù),同時(shí)使用Three.js 3D 圖形引擎庫(kù),繪制和渲染后的煤堆及堆取料機(jī)模型效果圖,如圖2 所示。使用封裝好、開(kāi)源的Three.js 3D 圖形引擎庫(kù),可以減少開(kāi)發(fā)人員對(duì)于代碼的開(kāi)發(fā)工作量,并且可以快速地對(duì)建立符合現(xiàn)場(chǎng)生產(chǎn)要求的三維設(shè)備模型,并對(duì)其進(jìn)行渲染及需要的動(dòng)畫(huà)腳本設(shè)計(jì)。
圖2 煤堆及堆取料機(jī)三維模型
本系統(tǒng)在某電廠斗輪堆取料機(jī)改造項(xiàng)目中得以成功應(yīng)用,實(shí)現(xiàn)了煤場(chǎng)三維模型使用盤(pán)煤儀輸出的點(diǎn)云數(shù)據(jù),實(shí)現(xiàn)動(dòng)態(tài)建模、即時(shí)渲染、數(shù)據(jù)顯示和模型實(shí)時(shí)更新功能。煤場(chǎng)模型與操作員站HMI 人機(jī)界面融為一體統(tǒng)一展示,具體實(shí)現(xiàn)了以下功能:①煤場(chǎng)3D 模型實(shí)現(xiàn)煤垛實(shí)時(shí)信息、煤垛各層的起止位置、煤場(chǎng)位置、形態(tài)數(shù)據(jù)顯示功能,同時(shí)可在模型上進(jìn)行誤差修正操作;②煤場(chǎng)3D 模型實(shí)現(xiàn)煤種/煤量顯示功能,實(shí)時(shí)顯示各煤垛的煤種及存煤量(實(shí)現(xiàn)實(shí)時(shí)盤(pán)煤功能);③煤場(chǎng)3D 模型實(shí)現(xiàn)斗輪機(jī)在作業(yè)時(shí)(含手動(dòng)、半自動(dòng)、全自動(dòng)),根據(jù)盤(pán)煤結(jié)果自動(dòng)實(shí)時(shí)更新煤場(chǎng)的存煤信息(煤種、煤量、煤位)功能;④煤場(chǎng)3D 模型實(shí)現(xiàn)鼠標(biāo)交互操作(縮放、旋轉(zhuǎn)、拖拽),以三維效果顯示煤場(chǎng)煤垛和斗輪機(jī)姿態(tài),同時(shí)可基于系統(tǒng)歷史數(shù)據(jù),實(shí)現(xiàn)三維場(chǎng)景下的歷史數(shù)據(jù)回放功能。
本系統(tǒng)已經(jīng)成功應(yīng)用于多個(gè)火電廠的條形煤場(chǎng),應(yīng)用效果達(dá)到了預(yù)期的設(shè)定目標(biāo),客戶(hù)在HMI 人機(jī)操作界面上可以實(shí)時(shí)查看整個(gè)煤場(chǎng)的三維模型及煤堆堆取情況,了解煤場(chǎng)的存煤現(xiàn)狀。同時(shí),在煤控室操作員站可以對(duì)煤場(chǎng)斗輪機(jī)進(jìn)行虛擬仿真作業(yè)演示,通過(guò)比較仿真結(jié)果與期望目標(biāo)的差異,適當(dāng)調(diào)整作業(yè)任務(wù)參數(shù),有效指導(dǎo)實(shí)際作業(yè),提高作業(yè)效率。本系統(tǒng)為實(shí)現(xiàn)斗輪機(jī)無(wú)人化作業(yè)的深層次應(yīng)用提供了關(guān)鍵要素,能夠適應(yīng)火電廠煤場(chǎng)智能管控需求。