吳 鋒, 溫立民
(1.漢濱區(qū)農(nóng)村公路養(yǎng)護(hù)中心,陜西 安康 725000; 2.長安大學(xué) 電子與控制工程學(xué)院,陜西 西安 710064)
沉降監(jiān)測應(yīng)用于多個(gè)領(lǐng)域,橋梁、地基、邊坡等都需要進(jìn)行沉降監(jiān)測。隨著我國基建發(fā)展,特別是安全需要,對(duì)沉降監(jiān)測提出了更高的要求,很多學(xué)者從事沉降監(jiān)測研究,取得了豐碩的成果[1-2]。李永楊等[3]利用智能位移檢測技術(shù)實(shí)現(xiàn)沉降監(jiān)測。張成然[4]建立了嵌入式監(jiān)測系統(tǒng)與路基沉降預(yù)測模型。周軍等[5]基于圖像建模技術(shù)實(shí)現(xiàn)邊坡可視化監(jiān)測。但這些大都采用嵌入式技術(shù)實(shí)現(xiàn),難以保證沉降監(jiān)測實(shí)時(shí)性要求。其根本原因在于中央處理單元性能跟不上系統(tǒng)要求。因此本文提出基于SOPC技術(shù)設(shè)計(jì)邊坡沉降采集儀。眾所周知,F(xiàn)PGA具有并行處理特點(diǎn),其在運(yùn)行效率上相對(duì)于傳統(tǒng)單片機(jī)等具有很大優(yōu)勢,但FPGA也有不足,即在邏輯控制能力上不如傳統(tǒng)單片機(jī)DSP。為解決這一矛盾,在FPGA 上內(nèi)嵌了一個(gè)ARM處理器軟核,并提供了豐富的接口資源組成軟硬件系統(tǒng)即SOPC。相比于傳統(tǒng)的沉降儀,采用SOPC設(shè)計(jì)具有較大優(yōu)勢。首先傳統(tǒng)的方法大都采用單片機(jī)加外部驅(qū)動(dòng),進(jìn)行簡單的數(shù)據(jù)計(jì)算尚可,對(duì)于復(fù)雜的數(shù)據(jù)計(jì)算特別是視頻流計(jì)算就顯得吃力,即使采用的是DSP,可以實(shí)現(xiàn)大數(shù)據(jù)流運(yùn)算,但在功耗上難以滿足野外現(xiàn)場低功耗要求。近年來有學(xué)者采用FPGA/CPLD 實(shí)現(xiàn)采集儀外部驅(qū)動(dòng)電路設(shè)計(jì),雖然在運(yùn)算速度和功耗上對(duì)整體性能有所提升,但受限于FPGA/CPLD本身復(fù)雜邏輯功能運(yùn)算不足,整體提升效果有限,因此本文采用SOPC技術(shù)設(shè)計(jì)沉降儀。SOPC具有以下特點(diǎn):可以允許用戶按功能將模塊分為軟硬件兩部分,硬件部分并行處理,數(shù)據(jù)處理效率高;不僅可以設(shè)計(jì)硬件電路,內(nèi)嵌的NIOS可為開發(fā)人員提供各種標(biāo)準(zhǔn)接口,實(shí)現(xiàn)復(fù)雜的邏輯功能和人機(jī)交互功能[6-7];低功耗、小型化,除了一些必要的功率驅(qū)動(dòng)以及專用驅(qū)動(dòng)外,整個(gè)系統(tǒng)都可以集成在一個(gè)芯片內(nèi),整體性價(jià)比達(dá)到最優(yōu)。因此本文采用SOPC設(shè)計(jì)沉降監(jiān)測儀。
沉降采集儀具有圖像采集與數(shù)據(jù)處理、人機(jī)交互、LCD顯示、計(jì)時(shí)、網(wǎng)絡(luò)連接等功能。另要求設(shè)備成本低廉,功耗低,并適合野外干電池或太陽能供電。綜合考慮性能要求,本文選擇軟硬件可自定義分配的SOPC解決方案。
由于功能要求有視頻采集及顯示,對(duì)選擇的FPGA芯片邏輯門及內(nèi)存容量要求較高,因此本設(shè)計(jì)選擇EP4CE22型FPGA芯片。該芯片是Altera公司生產(chǎn)的Cyclone 二代產(chǎn)品,EP4CE22具有大容量的邏輯陣列,完全滿足硬件的設(shè)計(jì)需要。為提高采集器運(yùn)算性能,減少設(shè)計(jì)工作量,縮短設(shè)計(jì)周期,首先,需要對(duì)功能進(jìn)行合理劃分,既要發(fā)揮底層FPGA并行的優(yōu)勢,又要兼顧邏輯功能實(shí)現(xiàn),需要將功能分為兩部分,如圖1所示。一部分是圖像采集與處理,這部分實(shí)時(shí)性要求高,運(yùn)算數(shù)據(jù)量大,用Verilog硬件實(shí)現(xiàn);另一部分如標(biāo)準(zhǔn)網(wǎng)口、按鍵、計(jì)時(shí)接口模塊,用內(nèi)嵌軟核NIOS采用C語言軟件實(shí)現(xiàn)。圖像處理模塊作為NIOS的一個(gè)外設(shè),與LCD、網(wǎng)絡(luò)接口ACM8211等一起掛接在AVALON總線上[8]。AVALON總線是Altera公司為SOPC自定義的總線接口形式,除了標(biāo)準(zhǔn)的外設(shè)接口設(shè)備外,還允許用戶自定義接口協(xié)議設(shè)備,方便了設(shè)計(jì)的同時(shí)也為本系統(tǒng)邏輯功能劃分提供了條件。用戶可以通過AVALON總線方便地控制標(biāo)準(zhǔn)接口外設(shè),如ACM8211、標(biāo)準(zhǔn)外部I/O等;也可以由用戶自定義外設(shè),如本文的視頻采集、沉降解析、DDR3等模塊,這些模塊需由用戶采用Verilog設(shè)計(jì),然后掛接到AVALON總線上,這樣NIOS核可以像調(diào)用標(biāo)準(zhǔn)設(shè)備一樣調(diào)用自定義模塊,達(dá)到了性能和效率的統(tǒng)一。
圖1 基于SOPC采集器硬件架構(gòu)
沉降采集儀中,對(duì)基于FPGA的圖像處理與沉降信息解算的復(fù)雜性和重要性作重點(diǎn)闡述。圖2為FPGA處理流程。按照數(shù)據(jù)流向,沉降算法包括視頻采集模塊、位轉(zhuǎn)換模塊、DDR3存儲(chǔ)器寫模塊、存儲(chǔ)器對(duì)讀寫接口模塊、DDR3存儲(chǔ)器讀模塊、二值化模塊、閾值分割模塊和顯示驅(qū)動(dòng)模塊。其中視頻采集模塊用于采集攝像頭數(shù)據(jù),由于采集的傳感器數(shù)據(jù)為8位RGB888,即R、G、B三彩色需要3 B存儲(chǔ),這對(duì)存儲(chǔ)器容量有一定要求,為減少存儲(chǔ)器需要,需要將8位變換為16位,即采用RGB565格式,這個(gè)功能由bit_trans_bitd16模塊完成。因?yàn)椴杉囊曨l流數(shù)據(jù)量較大,需要大容量DDR3存儲(chǔ),wr_ddr3_fifo模塊實(shí)現(xiàn)存儲(chǔ)器寫功能,Rd_ddr3_fifo模塊實(shí)現(xiàn)存儲(chǔ)器讀功能,存儲(chǔ)器讀和寫需要一個(gè)統(tǒng)一的接口模塊Fif2mig_axi。 Binary_imgae是二值化模塊,采集器采集的圖像經(jīng)RGB到灰度圖的轉(zhuǎn)換后,需要進(jìn)行二值化,這個(gè)過程由Threshold_part模塊完成。通常在光屏上的灰度信息較單一,背景亮度與激光光斑的亮度差異較大,信噪比較高,二值化受到干擾較小,容易實(shí)現(xiàn)。接下來需要對(duì)二值化后的圖像進(jìn)行遍歷,找到最佳光斑位置,即(u,v)像素坐標(biāo),像素坐標(biāo)需要轉(zhuǎn)換為笛卡爾坐標(biāo),如何計(jì)算像素坐標(biāo)將在第3節(jié)介紹。
由圖2可以看出,存儲(chǔ)器讀寫模塊較為復(fù)雜,也較為重要,關(guān)系到整個(gè)采集器的性能,因此對(duì)讀寫模塊進(jìn)行重點(diǎn)闡述。讀寫模塊的狀態(tài)機(jī)轉(zhuǎn)換如圖3(a)所示。其操作流程為:采集儀上電初始化狀態(tài)后為IDLE狀態(tài),當(dāng)DDR完成初始化和校準(zhǔn)后進(jìn)入讀寫仲裁狀態(tài)(ARB),在該狀態(tài)下根據(jù)是否有讀寫操作請(qǐng)求跳轉(zhuǎn)到讀寫流程的各個(gè)狀態(tài);完成一次讀寫流程后,狀態(tài)回到ARB狀態(tài)進(jìn)行下一次的操作。
圖2 FPGA處理流程
為驗(yàn)證數(shù)據(jù)讀寫部分的有效性,本文對(duì)讀寫邏輯進(jìn)行了測試,圖3(b)為讀寫狀態(tài)ila抓圖結(jié)果,從ila圖中可以看出在初始化后產(chǎn)生一次DDR操作,同時(shí)讀出數(shù)據(jù)到rd_ddr_fifo模塊,此時(shí)DDR數(shù)據(jù)無效,當(dāng)對(duì)FIFO進(jìn)行一次復(fù)位清空后,才開始從起始地址讀出數(shù)據(jù),向DDR寫數(shù)據(jù)與讀類似,在此不做過多贅述。
圖3 狀態(tài)機(jī)ila抓圖測試
為實(shí)現(xiàn)NIOS處理器核與標(biāo)準(zhǔn)或非標(biāo)準(zhǔn)接口外設(shè)的通信與控制,需要自定義Avalon接口,如圖4(a)所示。接口模塊負(fù)責(zé)接收NIOS發(fā)來的控制命令和參數(shù),并能提供狀態(tài)查詢通道,狀態(tài)寄存器中保留有當(dāng)前處理的各種狀態(tài),NIOS可隨時(shí)查詢各模塊的狀態(tài)信息。圖4(a)左邊為接口模塊輸入信號(hào),右邊為輸出信號(hào)。在輸出信號(hào)中有2個(gè)較為重要的握手信號(hào),Cmd_out和 State_out。Cmd_out命令端口向各模塊輸出指令和地址;State_out為外部讀入狀態(tài)信號(hào)。
圖4(b)為綜合后原理圖模塊。紅色框中為自定義的Avalon接口模塊;藍(lán)色框?yàn)閳D像采集與沉降信息處理模塊;綠色框?yàn)镈DR驅(qū)動(dòng)模塊;黑色框?yàn)槿藱C(jī)交互接口模塊。
圖4 NIOS 自定義接口模塊
為保證采集儀測量精度,在軟硬件設(shè)計(jì)完成后需要對(duì)儀器進(jìn)行標(biāo)定。在攝像頭標(biāo)定中,常采用的是張氏標(biāo)定法。攝像機(jī)標(biāo)定涉及到4 個(gè)坐標(biāo)系: 世界坐標(biāo)系(也稱笛卡爾坐標(biāo)系)、圖像坐標(biāo)系、相機(jī)坐標(biāo)系和像素坐標(biāo)系,攝像頭標(biāo)定如圖5所示。圖像坐標(biāo)系是在攝像頭內(nèi)部的感光空間坐標(biāo)系,像素坐標(biāo)系是以亞像素為單位的坐標(biāo)系。標(biāo)定的前提是建立笛卡爾坐標(biāo)系與像素坐標(biāo)系間的關(guān)系,首先,需要將笛卡爾坐標(biāo)系轉(zhuǎn)換為相機(jī)坐標(biāo)系;然后,根據(jù)成像原理將相機(jī)坐標(biāo)系轉(zhuǎn)換為圖像坐標(biāo)系;最后,將圖像坐標(biāo)系轉(zhuǎn)換為像素坐標(biāo)系[9]。張氏標(biāo)定原理為:設(shè)在笛卡爾坐標(biāo)系下有一點(diǎn)M(xw,yw,zw),經(jīng)過攝像頭光心投影后,在物理圖像坐標(biāo)系中映射點(diǎn)為M’(a,b,1),則對(duì)應(yīng)關(guān)系為
(1)
式中:u,v為像素坐標(biāo)系坐標(biāo);等號(hào)右邊前兩個(gè)矩陣分別為F矩陣和T矩陣,都是攝像頭的固有參數(shù)矩陣,標(biāo)定的目標(biāo)就是確定這兩個(gè)參數(shù)矩陣,F(xiàn)為攝像頭內(nèi)參矩陣,T為外參矩陣,外參矩陣由兩部分構(gòu)成,分別為表示姿態(tài)變換旋轉(zhuǎn)矩陣H和平移向量t;P為攝像頭笛卡爾坐標(biāo)系中點(diǎn)坐標(biāo);m為尺度因子;fx,fy分別為x,y向上的歸一化焦距;(cx,cy)為像素坐標(biāo)系原點(diǎn)。
圖5 攝像頭標(biāo)定
攝像機(jī)標(biāo)定的方法很多,其中張氏平面攝像頭標(biāo)定方法被普遍采用,其標(biāo)定以平面棋盤格作為相機(jī)標(biāo)定板。標(biāo)定過程中,以棋盤格所在平面為笛卡爾坐標(biāo)系的XY平面,以垂直棋盤格平面法線為Z軸(垂足即為原點(diǎn)N),且Z軸與相機(jī)坐標(biāo)系的光軸重合。如果棋盤格內(nèi)格點(diǎn)尺寸已知,則棋盤格中所有角點(diǎn)在笛卡爾坐標(biāo)系中的坐標(biāo)即可換算得出。在圖像坐標(biāo)系中,以笛卡爾坐標(biāo)系原點(diǎn)N點(diǎn)相對(duì)于攝像頭光心O的對(duì)稱點(diǎn)N′為原點(diǎn),則在棋盤格中每個(gè)對(duì)應(yīng)角點(diǎn)在圖像坐標(biāo)系下都有其對(duì)應(yīng)的圖像像素點(diǎn),二者存在一一對(duì)應(yīng)關(guān)系,即如果已知笛卡爾坐標(biāo)系中點(diǎn)的坐標(biāo)(xw,yw,zw),則可通過式(1)計(jì)算出圖像坐標(biāo)系下的對(duì)應(yīng)坐標(biāo)(u,v,1)。如果在笛卡爾坐標(biāo)系下設(shè)置合適的點(diǎn),并且計(jì)算出對(duì)應(yīng)的像素坐標(biāo),將各點(diǎn)的坐標(biāo)代入式(1),即可結(jié)算處參數(shù)矩陣。
設(shè)在像素坐標(biāo)系下M′的坐標(biāo)為(u,v,1),則有:
(2)
平面標(biāo)定結(jié)果:本文采用的標(biāo)定板規(guī)格為20 mm×16 mm,棋盤格為1 mm×1 mm。設(shè)計(jì)采用的攝像頭為OmniVision 公司的OV5640,其分辨率為2592像素×1944像素;傳感器成像尺寸為:6.25 mm×6.25 mm,焦距為12 mm;像素尺寸為:1.4 μm×1.4 μm。以圖像采集平面中心為原點(diǎn)M′,即(u0,v0)點(diǎn)坐標(biāo)為寬、高的一半,則:
(3)
上述平面標(biāo)定法是基于棋盤格所有點(diǎn)zw=0的假設(shè),這只是一種特殊情況,但對(duì)于沉降采集儀而言,往往由于實(shí)際需要,不能保證像素平面與笛卡爾坐標(biāo)x、y平面平行,甚至還會(huì)呈現(xiàn)一個(gè)角度,此時(shí)張氏的平面標(biāo)定方法將不再適用,需要采用旋轉(zhuǎn)三維標(biāo)定方法。
將式(1)中參數(shù)矩陣FT(內(nèi)參和外參)展開:
(4)
式中:cx和cy為像素坐標(biāo)原點(diǎn),數(shù)值上為像幅平面寬、高的一半,因此若對(duì)式(3)進(jìn)行行列變換可消去cx和cy,可得:
(5)
式中:若計(jì)R′={r1,r2,r3,t}為橫向量;則R′即內(nèi)外參矩陣的乘積。為簡化計(jì)算,假設(shè)笛卡爾坐標(biāo)原點(diǎn)與相機(jī)原點(diǎn)重合,則R′平移矩陣t=0。由于r1,r2,r3為3個(gè)旋轉(zhuǎn)向量,其元素之間的內(nèi)積為0,則有:
(6)
式中共有11個(gè)未知數(shù),對(duì)于本設(shè)計(jì)而言攝像頭給定,意味著內(nèi)參矩陣已知,因此如果在笛卡爾坐標(biāo)系找9個(gè)特殊的角點(diǎn),然后在棋盤格采集圖像中找出配對(duì)的點(diǎn),則可建立9個(gè)方程,可解式(1)中的旋轉(zhuǎn)矩H,并進(jìn)一步確定外參矩陣T。
(7)
以安康市漢濱區(qū)張灘至壩河公路改建邊坡維護(hù)項(xiàng)目為例,該路段存在影響路基穩(wěn)定的黃土崩體不良地質(zhì)現(xiàn)象,并且邊坡的陡度較大,該區(qū)域的邊坡結(jié)構(gòu)松散,空隙發(fā)育,加上強(qiáng)降雨的作用,很容易造成邊坡失穩(wěn)。項(xiàng)目概況如圖6所示。圖6(a)為邊坡東側(cè),在此側(cè)安裝測試傳感器;圖6(b)為邊坡西側(cè),在此處安裝采集裝置。東側(cè)坡的西坡坡體分為第1、2、3、4、5級(jí)臺(tái)階,西坡分為第1、2、3、4級(jí)臺(tái)階,每級(jí)臺(tái)階之間的垂直距離5 m,水平距離2.5 m,每級(jí)臺(tái)階寬3 m。
圖6 項(xiàng)目概況圖
本文選擇笛卡爾坐標(biāo)系和對(duì)應(yīng)像素點(diǎn)坐標(biāo),如表1所示。表1中數(shù)據(jù)用于模擬邊坡沉降變化量,點(diǎn)(xw,yw,zw)為笛卡爾坐標(biāo),(u,v)為通過圖像處理計(jì)算后的像素點(diǎn)坐標(biāo)。將坐標(biāo)數(shù)據(jù)代入式(6)后解得外參矩陣T結(jié)果如式(8)所示。
表1 三維標(biāo)定給定數(shù)據(jù)
(8)
當(dāng)外參矩陣獲得后即可將式(8)代入式(1),用于沉降量的計(jì)算。
攝像頭標(biāo)定結(jié)果如圖7所示。圖7(a)為測試儀實(shí)物;圖7(b)為棋盤格圖像采集結(jié)果;圖7(c)為激光點(diǎn)采集圖像;圖7(d)、圖7(e)為光屏圖像二值化分割后的結(jié)果,紅色的點(diǎn)為像素平面中心,圖7(d)為沉降前光點(diǎn),圖7(e)為沉降后光點(diǎn)位置,Δy為沉降變化量。
圖7 棋盤格平面標(biāo)定
為驗(yàn)證沉降儀檢測精度,將本文與當(dāng)前對(duì)邊坡沉降監(jiān)測效果較好的文獻(xiàn)[6]進(jìn)行比較,測試對(duì)象為安康市漢濱區(qū)張灘至壩河公路改建邊坡維護(hù)項(xiàng)目,由于項(xiàng)目邊坡為初建邊坡,故前期的沉降量較大,且隨著路面積累載荷的增加,沉降量有所增加。 因此本文測試從2021年1月到12月的數(shù)據(jù),每月測一次,邊坡沉降實(shí)測值如表2所示,其中真實(shí)值由水準(zhǔn)儀測得。采集器精度測試如圖8所示,綠色的星型線為經(jīng)水準(zhǔn)儀測量曲線,本文以其作為參考標(biāo)準(zhǔn)。從測試結(jié)果可知,隨著時(shí)間的推移和路面載荷量的增加,整體沉降有所增加,邊坡建成初期,理論上沉降量較大,但此時(shí)載荷量較小,因此從整個(gè)時(shí)間跨度上看,沉降量較均勻。但文獻(xiàn)[6]和本文相比較,文獻(xiàn)[6]的測量值與真實(shí)值的明顯差異較大,波動(dòng)也較大,這一點(diǎn)從圖8(b)誤差曲線也能看出。由圖8(b)可知,隨著載荷量的增加,其誤差呈現(xiàn)增長的趨勢;而本文誤差波動(dòng)不大,在12個(gè)月間最大誤差不超過0.25,誤差百分比<2.99%,因此本文的測試效果要優(yōu)于文獻(xiàn)[6],可以用于邊坡沉降量檢測。
表2 邊坡沉降實(shí)測值
圖8 采集器精度測試
4.3節(jié)是在晴天或能見度較好情況下的測試結(jié)果,但不良的能見度會(huì)對(duì)測試結(jié)果有較大的影響,如霧天、雨天等都會(huì)對(duì)測試結(jié)果產(chǎn)生影響。為測試其影響,本文在實(shí)驗(yàn)室以水蒸氣代替霧搭建實(shí)驗(yàn)環(huán)境,測試對(duì)象為棋盤格標(biāo)定板,對(duì)比測試結(jié)果如表3所示。由于霧天空氣中的氣溶質(zhì)對(duì)光線有散射、折射和吸收作用,導(dǎo)致光斑出現(xiàn)光暈效應(yīng),致使誤差相對(duì)于晴天時(shí)增大,因此需要進(jìn)一步研究。
為測試檢測儀性能,本文設(shè)計(jì)了對(duì)比測試實(shí)驗(yàn)。對(duì)比測試平臺(tái)為ARM9+Linux,測試對(duì)象采用攝像頭外距20 cmm處光屏激光光斑,系統(tǒng)時(shí)鐘都是240 MHz。在沉降測試中,圖像的采集、噪聲濾除等算法消耗的資源最多,是影響儀器性能的主要瓶頸,因此本文以從采集到第一幀圖像開始到計(jì)算出當(dāng)前的沉降點(diǎn)信息(100次)為測試對(duì)象。采集儀與ARM9性能測試如表4所示。從測試結(jié)果可知,本文的測試儀完成100次測試僅需1.22 s,而ARM9+Linux則需130.2 s,本文是ARM9平臺(tái)的106倍,數(shù)據(jù)吞吐率是ARM9平臺(tái)的188倍,因此本文的測試儀性能遠(yuǎn)高于ARM9+ Linux平臺(tái)。而在功耗上,對(duì)于本文而言,大部分電路功能都在FPGA上實(shí)現(xiàn)(除少部分功率驅(qū)動(dòng)電路外,如視頻轉(zhuǎn)換等,而這部分雙方共有),而ARM9平臺(tái)則不同,因此本文在功耗上明顯低于ARM9平臺(tái)。
表3 對(duì)比測試結(jié)果
表4 采集儀與ARM9性能測試
基于SOPC設(shè)計(jì)了邊坡沉降監(jiān)測儀,按功能將監(jiān)測儀分為硬件實(shí)現(xiàn)和NIOS軟件實(shí)現(xiàn)。設(shè)計(jì)了AVALON總線接口,對(duì)監(jiān)測系統(tǒng)進(jìn)行三維標(biāo)定,解算了外參矩陣。經(jīng)實(shí)驗(yàn)測試,系統(tǒng)監(jiān)測誤差<2.1 %,能夠滿足邊坡沉降監(jiān)測要求。由于能見度會(huì)導(dǎo)致測試誤差增大,因此需要對(duì)如何消除這種影響做進(jìn)一步研究。