09
前面介紹了系統(tǒng)的硬件框圖如下:
硬件基本分為三塊,兩個(gè)攝像節(jié)點(diǎn),一個(gè)終端節(jié)點(diǎn)。
1. 攝像節(jié)點(diǎn)硬件
攝像節(jié)點(diǎn)由一個(gè)DE10-Nano開發(fā)板和一個(gè)D8M攝像頭實(shí)現(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)口,可實(shí)現(xiàn)網(wǎng)絡(luò)傳輸。
MicroSD卡插槽,可以插入燒寫了鏡像的SD卡,運(yùn)行Linux系統(tǒng)。
D8M攝像模塊硬件
D8M-GPIO是 一個(gè)2×20 pin GPIO接口的八百萬像素?cái)z像頭子卡,包含MIPI Camera Module和MIPI Decoder。(Mobile Industry Processor Interface簡(jiǎn)稱MIPI。)
MIPI Camera module拍攝視頻后輸出MIPI視頻信號(hào)數(shù)據(jù)包,通過MIPI decoder轉(zhuǎn)換成拜耳陣列(bayer pattern,10-bits parallel),最終由2x20 pin GPIO接口輸出。
2. 終端節(jié)點(diǎn)硬件
終端節(jié)點(diǎn)由一個(gè)DE10-Nano開發(fā)板實(shí)現(xiàn),并外接HDMI顯示器來顯示攝像節(jié)點(diǎn)傳輸過來的視頻以及測(cè)量結(jié)果。并用聲光提示模塊發(fā)出聲光提示信息。
聲光提示電路
實(shí)現(xiàn)聲光提示功能的電路由一個(gè)蜂鳴器和一個(gè)紅色LED組成,這是一個(gè)簡(jiǎn)單的蜂鳴器驅(qū)動(dòng)模塊。
10
攝像節(jié)點(diǎn)程序設(shè)計(jì)
1. 攝像節(jié)點(diǎn)整體介紹
攝像節(jié)點(diǎn)程序包含F(xiàn)PGA和SoC兩部分,F(xiàn)PGA中實(shí)現(xiàn)了一個(gè)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é)點(diǎn),數(shù)據(jù)結(jié)果通過TCP發(fā)送到終端節(jié)點(diǎn)。
2. FPGA端的Diff Processor設(shè)計(jì)
這是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用于實(shí)現(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é)果視頻流輸出;并且實(shí)現(xiàn)了控制寄存器,可以設(shè)置幀間差分法閾值變化。為了兼顧視頻流和數(shù)據(jù)集的采集,這里將原圖像與差分結(jié)果組合成4通道的圖像進(jìn)行輸出。
Terasic VIP Capture自定義IP用于實(shí)現(xiàn)接收Streaming協(xié)議視頻流和動(dòng)態(tài)切換指定目標(biāo)buffer地址。
3. HPS端的C程序設(shè)計(jì)
首先創(chuàng)建并初始化TCP和UDP Socket,TCP用來傳輸數(shù)據(jù),UDP用來傳輸圖像,接著創(chuàng)建線程處理TCP消息,在這個(gè)線程中,攝像節(jié)點(diǎn)等待終端節(jié)點(diǎn)發(fā)送的start指令和請(qǐng)求數(shù)據(jù)指令,如果是start指令,就開始收集數(shù)據(jù),如果是請(qǐng)求數(shù)據(jù)指令,則停止數(shù)據(jù)收集并發(fā)送數(shù)據(jù)集到終端節(jié)點(diǎn),然后初始化FPGA IP基地址和buffer,并設(shè)置幀間差分法的閾值,接著獲取第一幀圖像并記錄時(shí)刻t,再獲取下一幀并記錄時(shí)刻t,然后diff processor會(huì)對(duì)兩幀圖像進(jìn)行處理,讀取處理結(jié)果并分離得到原圖像和幀間差分結(jié)果圖像,在幀間差分結(jié)果圖像中查找最大框,如果有最大框就用紅框框住激光筆輪廓并壓縮圖像發(fā)送到終端節(jié)點(diǎn),如果沒有最大框就壓縮原圖像發(fā)送到終端節(jié)點(diǎn),最后根據(jù)終端節(jié)點(diǎn)發(fā)送的指令來判斷是否收集數(shù)據(jù)集。
11
終端節(jié)點(diǎn)程序設(shè)計(jì)
初始化用戶界要有攝像節(jié)點(diǎn)A和B的畫面顯示、消息顯示框以及測(cè)量結(jié)果的顯示:
此外還有三個(gè)按鈕,Start按鈕用來發(fā)送指令給攝像節(jié)點(diǎn)A和B,Show Camera A按鈕用來顯示攝像節(jié)點(diǎn)A的數(shù)據(jù)和擬合曲線,Show Camera B按鈕用來顯示攝像節(jié)點(diǎn)B的數(shù)據(jù)和擬合曲線。
然后是聲光系統(tǒng)初始化,再接著創(chuàng)建一個(gè)線程用于處理結(jié)果數(shù)據(jù),初始化Socke并創(chuàng)建5個(gè)線程,最后等待按鈕事件。
下面我們具體介紹創(chuàng)建的5個(gè)線程,分別是攝像節(jié)點(diǎn)A、B的UDP數(shù)據(jù)處理線程和TCP數(shù)據(jù)處理線程,還有一個(gè)計(jì)時(shí)和數(shù)據(jù)請(qǐng)求線程。
其中,UDP數(shù)據(jù)處理線程首先創(chuàng)建UDP Server,然后等待接收攝像節(jié)點(diǎn)A、B發(fā)送的圖像數(shù)據(jù),然后解壓圖像并顯示。
TCP數(shù)據(jù)處理線程首先創(chuàng)建TCP Client,然后連接攝像節(jié)點(diǎn)A、B的TCP Server,之后等待接收攝像節(jié)點(diǎn)發(fā)送的數(shù)據(jù)集,計(jì)算得到周期、線長(zhǎng)和位移,計(jì)算完成后設(shè)置標(biāo)志為True。
計(jì)時(shí)和數(shù)據(jù)請(qǐng)求線程主要是判斷是否開始測(cè)量以及測(cè)量時(shí)間是否大于10s,如果測(cè)量時(shí)間達(dá)到10s,就發(fā)送請(qǐng)求數(shù)據(jù)指令給攝像節(jié)點(diǎn)。
最后是結(jié)果數(shù)據(jù)處理線程,先判斷攝像節(jié)點(diǎn)A、B是否計(jì)算完成,如果沒有計(jì)算完,則先判斷是否還在計(jì)時(shí),如果是則打印計(jì)時(shí)消息并繼續(xù)等待攝像節(jié)點(diǎn)計(jì)算完成。
當(dāng)攝像節(jié)點(diǎn)A和B都計(jì)算完成后,首先將標(biāo)志位清零,然后判斷攝像節(jié)點(diǎn)A的位移和B的位移哪一個(gè)更大,選擇位移較大的節(jié)點(diǎn)計(jì)算的線長(zhǎng)作為最終線長(zhǎng)并顯示,接著計(jì)算角度θ并顯示,然后聲光提示,最后停止計(jì)時(shí)。
12
擬合cos函數(shù)程序設(shè)計(jì)
當(dāng)終端節(jié)點(diǎn)收到攝像節(jié)點(diǎn)采集到的數(shù)據(jù)集(包含激光筆輪廓左上角的坐標(biāo)x和y、輪廓的寬和長(zhǎng)以及時(shí)刻t)時(shí)會(huì)對(duì)數(shù)據(jù)集進(jìn)行初步的處理。
首先是將激光筆左上角的坐標(biāo)值x+激光筆輪廓的寬/2,得到激光筆中心點(diǎn)的坐標(biāo)值x。然后再將數(shù)據(jù)集的所有時(shí)刻都減去第一個(gè)時(shí)刻值,也就是將第一個(gè)數(shù)據(jù)作為0時(shí)刻的數(shù)據(jù)。
接著通過插值來增加數(shù)據(jù)量。
先是使用Linear space函數(shù)創(chuàng)建時(shí)刻t的等差數(shù)列,函數(shù)的第一個(gè)參數(shù)為樣本數(shù)據(jù)開始點(diǎn),也就是時(shí)刻0,第二個(gè)參數(shù)為樣本數(shù)據(jù)的結(jié)束點(diǎn),也就是最后一個(gè)時(shí)刻值,第三個(gè)參數(shù)為樣本數(shù)據(jù)量,這里我們插值500個(gè)時(shí)刻數(shù)據(jù)。
接下來使用Univariate Spline函數(shù)對(duì)已有的數(shù)據(jù)集進(jìn)行平滑曲線擬合,得到函數(shù)關(guān)系式function2,然后利用擬合的函數(shù)關(guān)系,計(jì)算出插值時(shí)刻對(duì)應(yīng)的位移x。
最后使用最小二乘法擬合cos函數(shù)。
第一步是使用fft frequency函數(shù)得到傅里葉變換的采樣頻率,然后使用fft函數(shù)計(jì)算離散傅里葉變化。由于離散傅里葉變化在一段有限長(zhǎng)的離散信號(hào)中,找出它含有的各個(gè)頻率的正弦波分量,因此我們可以選取離散傅里葉變化中最大值對(duì)應(yīng)的頻率作為cos函數(shù)的初始頻率,
接著用最大位移-最小位移,/2,得到初始振幅值,周期=1/頻率,初相設(shè)為0,計(jì)算所有位移的平均值作為偏距。
然后使用least square函數(shù)擬合cos函數(shù),第一個(gè)參數(shù)為誤差函數(shù),首先定義目標(biāo)函數(shù)為Acos(2pi/T*t+phi)+偏距,那么誤差函數(shù)為:y-目標(biāo)函數(shù)值。第二個(gè)參數(shù)為函數(shù)的參數(shù)p0。第三個(gè)參數(shù)為數(shù)據(jù)集,least square函數(shù)的返回值parameter是一個(gè)元組,元組的第一個(gè)元素為cos函數(shù)的參數(shù)列表,最后輸出cos函數(shù)的參數(shù)。
審核編輯:黃飛
-
HDMI
+關(guān)注
關(guān)注
33文章
1830瀏覽量
155477 -
電路設(shè)計(jì)
+關(guān)注
關(guān)注
6708文章
2541瀏覽量
214778 -
互聯(lián)網(wǎng)
+關(guān)注
關(guān)注
55文章
11251瀏覽量
106488 -
攝像頭
+關(guān)注
關(guān)注
61文章
4982瀏覽量
98431 -
攝像系統(tǒng)
+關(guān)注
關(guān)注
0文章
19瀏覽量
12159
原文標(biāo)題:2021年全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽D題——基于互聯(lián)網(wǎng)的攝像測(cè)量系統(tǒng)(二)
文章出處:【微信號(hào):友晶FPGA,微信公眾號(hào):友晶FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論