09
前面介紹了系統(tǒng)的硬件框圖如下:
硬件基本分為三塊,兩個攝像節(jié)點,一個終端節(jié)點。
1. 攝像節(jié)點硬件
攝像節(jié)點由一個DE10-Nano開發(fā)板和一個D8M攝像頭實現(xiàn),DE10-Nano開發(fā)板的HDMI接口外接HDMI顯示器來顯示拍攝到的視頻。
DE10-Nano開發(fā)板硬件
DE10-Nano開發(fā)板基于Cyclone V SoC FPGA,擁有110K邏輯單元和ARM Cortex A9雙核處理器,其FPGA資源可用于算法加速。
FPGA端包含HDMI接口,可連接HDMI顯示器顯示視頻;2×20的GPIO接口,可連接GPIO接口的子卡。
HPS端包含1GB容量的DDR3內(nèi)存;USB OTG接口,支持USB攝像頭、鼠標(biāo)、鍵盤等硬件;千兆以太網(wǎng)口,可實現(xiàn)網(wǎng)絡(luò)傳輸。
MicroSD卡插槽,可以插入燒寫了鏡像的SD卡,運行Linux系統(tǒng)。
D8M攝像模塊硬件
D8M-GPIO是 一個2×20 pin GPIO接口的八百萬像素攝像頭子卡,包含MIPI Camera Module和MIPI Decoder。(Mobile Industry Processor Interface簡稱MIPI。)
MIPI Camera module拍攝視頻后輸出MIPI視頻信號數(shù)據(jù)包,通過MIPI decoder轉(zhuǎn)換成拜耳陣列(bayer pattern,10-bits parallel),最終由2x20 pin GPIO接口輸出。
2. 終端節(jié)點硬件
終端節(jié)點由一個DE10-Nano開發(fā)板實現(xiàn),并外接HDMI顯示器來顯示攝像節(jié)點傳輸過來的視頻以及測量結(jié)果。并用聲光提示模塊發(fā)出聲光提示信息。
聲光提示電路
實現(xiàn)聲光提示功能的電路由一個蜂鳴器和一個紅色LED組成,這是一個簡單的蜂鳴器驅(qū)動模塊。
10
攝像節(jié)點程序設(shè)計
1. 攝像節(jié)點整體介紹
攝像節(jié)點程序包含F(xiàn)PGA和SoC兩部分,F(xiàn)PGA中實現(xiàn)了一個Diff Processor,Diff Processor獲取D8M攝像頭拍攝到的視頻流數(shù)據(jù)并進(jìn)行處理,然后將處理的結(jié)果寫入HPS DDR3內(nèi)存中。
SoC中的應(yīng)用程序初始化Diff Processor中的IP并配置幀間差分法的閾值,通過乒乓控制決定將Diff Processor的結(jié)果寫入wBuffer1或wBuffer2,然后讀取wBuffer得到Diff Processor處理的結(jié)果再進(jìn)行進(jìn)一步的處理,最后將圖像結(jié)果通過UDP發(fā)送到終端節(jié)點,數(shù)據(jù)結(jié)果通過TCP發(fā)送到終端節(jié)點。
2. FPGA端的Diff Processor設(shè)計
這是FPGA中Diff Processer的框圖,Diff Processer系統(tǒng)是使用Platform Designer工具搭建的,其中2D FIR(2D濾波)、Scaler(縮放)、Color Plane Sequencer(色彩平面定序器)、Color Space Converter(色彩空間轉(zhuǎn)換) IP為Quartus Prime軟件中已有的視頻處理IP;Terasic Camera、Terasic Frame Diff D8M、Terasic VIP Capture IP為友晶自定義IP。
Diff Processer的處理過程為:Terasic Camera將D8M攝像頭獲取的拜耳陣列轉(zhuǎn)換為RGB24圖像,大小為640×480,然后使用2D FIR進(jìn)行濾波處理,再使用Scaler將圖像縮放為320×240,通過Color Plane Sequencer將圖像復(fù)制為兩份,一份保持不變,一份通過Color Space Converter將圖像轉(zhuǎn)換為灰度圖,再次通過Color Plane Sequencer將原圖像與灰度圖合并,得到320×240的RGB+Gray的4通道圖像。Terasic Frame Diff D8M處理圖像的過程為,Line Buffer緩存上一幀灰度圖,與當(dāng)前幀的灰度圖做差分并判斷是否大于閾值,然后將幀間差分結(jié)果圖像與原圖像合并得到結(jié)果幀。最后用Terasic VIP Capture 將結(jié)果幀寫到Buffer。
Terasic Camera自定義IP用于實現(xiàn)將拜爾陣列轉(zhuǎn)換為RGB圖像,并將frame輸出為Avalon-ST(Avalon-Streaming,Avalon流)。
- Terasic Frame Diff D8M自定義IP采用Streaming協(xié)議處理1路輸入,使用Line buffer緩存,緩存幀與當(dāng)前幀進(jìn)行差分,還包含1路結(jié)果視頻流輸出;并且實現(xiàn)了控制寄存器,可以設(shè)置幀間差分法閾值變化。為了兼顧視頻流和數(shù)據(jù)集的采集,這里將原圖像與差分結(jié)果組合成4通道的圖像進(jìn)行輸出。
Terasic VIP Capture自定義IP用于實現(xiàn)接收Streaming協(xié)議視頻流和動態(tài)切換指定目標(biāo)buffer地址。
3. HPS端的C程序設(shè)計
首先創(chuàng)建并初始化TCP和UDP Socket,TCP用來傳輸數(shù)據(jù),UDP用來傳輸圖像,接著創(chuàng)建線程處理TCP消息,在這個線程中,攝像節(jié)點等待終端節(jié)點發(fā)送的start指令和請求數(shù)據(jù)指令,如果是start指令,就開始收集數(shù)據(jù),如果是請求數(shù)據(jù)指令,則停止數(shù)據(jù)收集并發(fā)送數(shù)據(jù)集到終端節(jié)點,然后初始化FPGA IP基地址和buffer,并設(shè)置幀間差分法的閾值,接著獲取第一幀圖像并記錄時刻t,再獲取下一幀并記錄時刻t,然后diff processor會對兩幀圖像進(jìn)行處理,讀取處理結(jié)果并分離得到原圖像和幀間差分結(jié)果圖像,在幀間差分結(jié)果圖像中查找最大框,如果有最大框就用紅框框住激光筆輪廓并壓縮圖像發(fā)送到終端節(jié)點,如果沒有最大框就壓縮原圖像發(fā)送到終端節(jié)點,最后根據(jù)終端節(jié)點發(fā)送的指令來判斷是否收集數(shù)據(jù)集。
11
終端節(jié)點程序設(shè)計
初始化用戶界要有攝像節(jié)點A和B的畫面顯示、消息顯示框以及測量結(jié)果的顯示:
此外還有三個按鈕,Start按鈕用來發(fā)送指令給攝像節(jié)點A和B,Show Camera A按鈕用來顯示攝像節(jié)點A的數(shù)據(jù)和擬合曲線,Show Camera B按鈕用來顯示攝像節(jié)點B的數(shù)據(jù)和擬合曲線。
然后是聲光系統(tǒng)初始化,再接著創(chuàng)建一個線程用于處理結(jié)果數(shù)據(jù),初始化Socke并創(chuàng)建5個線程,最后等待按鈕事件。
下面我們具體介紹創(chuàng)建的5個線程,分別是攝像節(jié)點A、B的UDP數(shù)據(jù)處理線程和TCP數(shù)據(jù)處理線程,還有一個計時和數(shù)據(jù)請求線程。
其中,UDP數(shù)據(jù)處理線程首先創(chuàng)建UDP Server,然后等待接收攝像節(jié)點A、B發(fā)送的圖像數(shù)據(jù),然后解壓圖像并顯示。
TCP數(shù)據(jù)處理線程首先創(chuàng)建TCP Client,然后連接攝像節(jié)點A、B的TCP Server,之后等待接收攝像節(jié)點發(fā)送的數(shù)據(jù)集,計算得到周期、線長和位移,計算完成后設(shè)置標(biāo)志為True。
計時和數(shù)據(jù)請求線程主要是判斷是否開始測量以及測量時間是否大于10s,如果測量時間達(dá)到10s,就發(fā)送請求數(shù)據(jù)指令給攝像節(jié)點。
最后是結(jié)果數(shù)據(jù)處理線程,先判斷攝像節(jié)點A、B是否計算完成,如果沒有計算完,則先判斷是否還在計時,如果是則打印計時消息并繼續(xù)等待攝像節(jié)點計算完成。
當(dāng)攝像節(jié)點A和B都計算完成后,首先將標(biāo)志位清零,然后判斷攝像節(jié)點A的位移和B的位移哪一個更大,選擇位移較大的節(jié)點計算的線長作為最終線長并顯示,接著計算角度θ并顯示,然后聲光提示,最后停止計時。
12
擬合cos函數(shù)程序設(shè)計
當(dāng)終端節(jié)點收到攝像節(jié)點采集到的數(shù)據(jù)集(包含激光筆輪廓左上角的坐標(biāo)x和y、輪廓的寬和長以及時刻t)時會對數(shù)據(jù)集進(jìn)行初步的處理。
首先是將激光筆左上角的坐標(biāo)值x+激光筆輪廓的寬/2,得到激光筆中心點的坐標(biāo)值x。然后再將數(shù)據(jù)集的所有時刻都減去第一個時刻值,也就是將第一個數(shù)據(jù)作為0時刻的數(shù)據(jù)。
接著通過插值來增加數(shù)據(jù)量。
先是使用Linear space函數(shù)創(chuàng)建時刻t的等差數(shù)列,函數(shù)的第一個參數(shù)為樣本數(shù)據(jù)開始點,也就是時刻0,第二個參數(shù)為樣本數(shù)據(jù)的結(jié)束點,也就是最后一個時刻值,第三個參數(shù)為樣本數(shù)據(jù)量,這里我們插值500個時刻數(shù)據(jù)。
接下來使用Univariate Spline函數(shù)對已有的數(shù)據(jù)集進(jìn)行平滑曲線擬合,得到函數(shù)關(guān)系式function2,然后利用擬合的函數(shù)關(guān)系,計算出插值時刻對應(yīng)的位移x。
最后使用最小二乘法擬合cos函數(shù)。
第一步是使用fft frequency函數(shù)得到傅里葉變換的采樣頻率,然后使用fft函數(shù)計算離散傅里葉變化。由于離散傅里葉變化在一段有限長的離散信號中,找出它含有的各個頻率的正弦波分量,因此我們可以選取離散傅里葉變化中最大值對應(yīng)的頻率作為cos函數(shù)的初始頻率,
接著用最大位移-最小位移,/2,得到初始振幅值,周期=1/頻率,初相設(shè)為0,計算所有位移的平均值作為偏距。
然后使用least square函數(shù)擬合cos函數(shù),第一個參數(shù)為誤差函數(shù),首先定義目標(biāo)函數(shù)為Acos(2pi/T*t+phi)+偏距,那么誤差函數(shù)為:y-目標(biāo)函數(shù)值。第二個參數(shù)為函數(shù)的參數(shù)p0。第三個參數(shù)為數(shù)據(jù)集,least square函數(shù)的返回值parameter是一個元組,元組的第一個元素為cos函數(shù)的參數(shù)列表,最后輸出cos函數(shù)的參數(shù)。
審核編輯:黃飛
-
HDMI
+關(guān)注
關(guān)注
32文章
1704瀏覽量
151926 -
電路設(shè)計
+關(guān)注
關(guān)注
6674文章
2453瀏覽量
204361 -
互聯(lián)網(wǎng)
+關(guān)注
關(guān)注
54文章
11155瀏覽量
103304 -
攝像頭
+關(guān)注
關(guān)注
60文章
4841瀏覽量
95693 -
攝像系統(tǒng)
+關(guān)注
關(guān)注
0文章
19瀏覽量
12089
原文標(biāo)題:2021年全國大學(xué)生電子設(shè)計競賽D題——基于互聯(lián)網(wǎng)的攝像測量系統(tǒng)(二)
文章出處:【微信號:友晶FPGA,微信公眾號:友晶FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論