基于嵌入式ARM9的墻面平整度檢測儀研究與實現
房屋的墻面平整度是衡量房屋建筑質量的一項重要指標。現有的墻面平整度檢測方法要么操作不方便且效率低下,如靠尺;要么檢測儀器本身比較復雜,不易操作,需要專業的操作技巧,如使用“百分表打點”檢測;或者儀器本身比較昂貴,無法廣泛推廣和使用,如利用無協作目標電子全站儀檢測。所以研究一種原理簡單,操作方便,價格便宜,體積小,便攜式的手持移動墻面平整度檢測設備是非常有必要且具一定商業價值的。
本文引用地址:http://www.j9360.com/article/201610/308709.htm1 系統的總體設計
系統的目標是:設計一個嵌入式手持設備,實現對墻面平整度的檢測。具體的實現過程為:USB攝像頭以小分辨率(320*240)采集動態視頻,旋轉后直接顯示在LCD上,通過觀察LCD上的動態顯示內容確定所選場景是否滿足要求。待出現滿足要求的場景后開始測量,此時USB攝像頭以大分辨率(1 600*1 200)采集一幅靜態圖片傳給CPU處理,最后CPU將處理的結果顯示在LCD上。系統的總體結構如圖1所示。

2 系統硬件平臺的構建
2.1 微處理器及存儲模塊
本系統的微處理器采用飛思卡爾公司的MCIMX283。該處理器基于ARM926構架,主頻最高達450MHz;采用NANDFlash啟動,其工作電壓范圍是2.7~3.6V,容量為128M×8bit,
能滿足系統和各類數據的存儲要求。采用H5P92562GFR—s6c運行操作系統和應用程序,該芯片為DDR2 SDRAM,bank數為4,數據寬度2 bytes,容量大小為32MB。與傳統的SDRAM相比,DDR2 SDRAM存取速度有了極大提高,但工作電壓卻很低,因此運行速度和功耗有很大改進。微處理器和DDR2、NAND Flash的連接示意圖如圖2所示。

2.2 電源、時鐘和復位模塊
MCDMX283內部集成了電源管理單元(PMU),外部只需要提供規定的電源(5V或者4.2V)就可產生核心板需要的各種電壓。但MCIMX283內部電源管理單元輸出能力有限,因此PMU所產生的3.3 V、1.8 V等電源除了給DDR2、NANDFlash供電外沒有給其他外圍設備使用。其他外圍設備的供電可由外部供電經過LDO轉換為所需電壓以供使用。
此外,系統中采用晶體振蕩器產生時鐘源信號,復位模塊采用手動復位。
2.3 USB和LCD接口電路模塊
USB接口按主從關系可分為USB Host和USB OTG。USB Host用來掛載Deviec設備,本系統中是掛載USB攝像頭,以實現視頻和圖像的采集;USB OTG用以和PC機通信,實現PC機向NAND Flash下載內核、根文件系統等功能。
LCD用來顯示USB攝像頭采集的視頻數據和處理后的圖像。MCIMX283集成LCD控制器和觸摸屏控制器,支持24位的RGB和24位系統模式,同時支持四線電阻觸摸屏。本系統中LCD只用作顯示,不需要觸摸功能,同時為了充分利用IO資源,系統采用16位RGB顯示。
3 系統軟件設計
系統軟件設計包括軟件平臺的搭建和檢測軟件的實現。軟件平臺的搭建主要完成嵌入式操作系統的移植和主要模塊的驅動移植,檢測軟件的實現即檢測算法的實現,是檢測系統的核心部分。
3.1 嵌入式Linux操作系統的移植
嵌入式操作系統是嵌入式系統的軟件基礎,是應用程序開發的軟件平臺。對于一個嵌入式Linux系統,系統上電后經過加載Bootloader、啟動Linux內核、掛載根文件系統3個步驟后,用戶程序才能正常運行,而且這3個步驟是缺一不可的。
3.2 主要模塊驅動的移植
驅動的移植是嵌入式系統不可缺少的過程,本系統中主要完成的驅動移植有檢測按鈕驅動的移植、USB攝像頭驅動的移植、LCD驅動的移植。
首先要移植按鍵按鈕的驅動,本系統中我們使用一個GPIO引腳來模擬開關按鈕。選定引腳后先將該引腳配置成GPIO功能,生成引腳的屬性文件,然后編譯mykey.c文件,將按鍵驅動插入內核中,完成按鍵驅動的移植。
由于本系統使用Linux2.6.35版本,該版本支持UVC類設備,而我們選用的USB攝像頭為XHV57-NBL60-V1.0,支持UVC標準,所以我們不需要編寫驅動,只是在配置內核時將UVC靜態編譯進內核即可。
本系統選用的2.8寸LCD不帶驅動板,因此不但要配置LCD控制器的參數,還要通過SPI初始化LCD寄存器。根據LCD時序圖,設置LCD控制器的輸出時序,再根據系統需求和相關手冊,設置LCD寄存器的值,這樣上電后,LCD就能工作在預定狀態下。
3.3 檢測軟件的實現
激光檢測系統的總體設計分為兩部分:視頻采集模式和圖像采集模式。上電復位后系統進入視頻采集模式,攝像頭采集320*240的YUV422視頻幀圖像,將采集到的YUV幀圖像轉換為RGB565,旋轉90度轉為240*320,然后顯示到LCD上。此時通過觀察LCD上顯示的動態圖像(即視頻)即可確定攝像頭所選“場景”是否滿足要求。待所選“場景”滿足要求后按下“開始測量”按鈕,即可進入拍照模式。進入拍照模式后,系統修改攝像頭分辨率,采集一幅1600*1200的YUV圖像,將此圖像轉換為1600*1200的RGB888圖像,調用算法處理RGB888圖像,然后將處理后的圖像壓縮為320*240的RGB888,將壓縮后的圖像轉換為RGB565,再旋轉90度顯示在LCD上,此時通過觀察LCD上的顯示結果就可知道激光線照射到的墻面部分的平整度情況了。觀察記錄完檢測結果后按下“開始測量”按鈕即可進入視頻采集模式,選取合適“場景”后再次按下“開始測量”按鈕即可進入下次檢測。檢測軟件的總體框架如圖3所示。

視頻的采集就是讀取USB攝像頭獲得的視頻數據流,交給處理器處理。拍照模式是檢測系統中主要功能的實現部分,進入該模式后,系統首先更改攝像頭的分辨率,采集一幅1600*1200的YUV圖像。根據YUV和RGB的轉換關系,將圖像轉換為RGB888。然后執行以下過程:
1)遍歷圖像的每個像素點,根據既定閾值找出激光線的起始坐標,將激光線始末點之間的距離分為N段,為后續分段處理做準備;
2)定義二維數組dealpt[20][1600],存放激光線上激光像素的坐標;
3)利用最小二乘法擬合激光線,確定激光線的系數a、截距b,得到激光線y=ax+b,將擬合的激光線標成純紅(R=255,G=0,B=0);
4)求每一列中擬合激光線上激光點的y軸坐標與實際激光線上該列所有激光點y軸坐標差的和,以段為單位,計算第L段上所有坐標差的總和difn[L];
5)根據difn[L]絕對值的大小,就能知道第L段內激光線的曲直程度,從而可以確定第L段內墻面的凹凸程度。difn[L]絕對值越大,說明第L段內凹凸程度越大,我們就將此段內的擬合激光線標黑的程度越大,當difn[L]超過某一閾值,則將該段內的擬合激光線標成純黑(R=0,G=0,B=0)。
以上處理過程完成后,使用下采樣方式縮小圖片,得到320*240的RGB888圖像,然后再轉換為RGB565,旋轉90度后顯示在LCD上,通過LCD上顯示的內容,即可判斷墻面相應部分的凹凸情況。
3.4 激光圖像檢測算法的改進
上述算法在正常光照情況下能得到很好的檢測效果,但在極端的光照情況下(如周圍光照特別亮或者特別暗的情況)顯示效果卻不盡人意。光照太強,墻面背景較亮,相對情況下激光線亮度就會變弱,就很難將激光線提取出來;光線太弱,墻面背景較暗,此時激光線就會出現過飽和,激光線上像素點的R、G、B分量都趨于255,這時應用以上算法就無法將激光線提取出來;如果光照不是自然光,如光照為藍光或者綠光,這樣也會影響激光線的提取,如果光照為紅光,且光強足夠大,則激光線就會完全無法提取。
為了準確地將激光線像素點從激光圖像中提取出來,我們要根據不同的光照環境,確定不同的激光提取閾值條件,為此我們提出了改進算法,即在圖像預處理前先求得整個圖像R、G、B分量的平均值averR、averG、averB,然后根據averR、averG、averB分情況處理激光圖像,這樣就能很好地將激光線從激光圖像中提取出來,極大地提升了系統的處理能力和適應能力,使墻面檢測儀可以適用于各種不同的光照環境中。
4 檢測結果分析
4.1 墻面不同凹凸情況下的檢測結果
國家墻面平整度驗收標準為:用兩米的靠尺檢測墻面,平整度偏差在3 mm以內就算合格,因此我們的墻面平整度必須檢測出3 mm以內的凹凸才算合格。如圖4(a)中的木板厚度約15 mm,必然能檢測出,因此標黑,而木板下方用靠尺檢測凹凸最大的地方為2 mm,本系統也能檢測出,所以當墻面有高凸起時系統不但能檢測出高凸起部分同時也能檢測出凹凸值不大的地方。圖4(b)、(c)、(d)凹凸值((;CI))最大分別為3.5 mm、2 mm、0.4 mm,可以看出這些凹凸位置本系統都能檢測出,當凹凸程度小于0.4 mm時基本就檢測不出了,因此在正常光照情況下,本系統可以檢測出凹凸程度大于0.4mm的凹凸位置,其精度遠遠高于國家規定的標準。

4.2 特殊光照下的檢測結果
由于對算法進行了改進,因此本系統也可以檢測特殊光照下的墻面,本實驗以綠光為實驗。
如圖5所示,其中(a)、(b)、(c)、(d)檢測位置的凹凸值最大分別為3.5 mm、2 mm、1.5 mm、0.8 mm。

由結果可以看出,由于改進了算法,使得檢測儀能很好的檢測出特殊光照下的墻面的平整度,且檢測精度至少為0.8 mm。
5 結論
隨著個人家庭裝修的流行和房屋驗收標準的提高,房屋墻面平整度檢測設備必然向智能化、便攜化、易操作、價格便宜等方向發展。本文就是研究并實現了一種基于ARM9的嵌入式墻面平整度手持檢測設備。并且通過檢測結果的分析,證明了本系統具有很好的檢測效果。需要指出的是,本系統中照射到墻面的激光線為垂直方向,如果激光線為水平方向,則無法檢測。而且系統設計過程中沒有綜合考慮性能問題,導致主芯片發熱過高,以上兩點是今后亟待解決的問題。
評論