徐聲振,田明,倪小龍,于信,白素平
(長春理工大學(xué) 光電工程學(xué)院,長春 130022)
目前輕小型無人機平臺(重量不超過25公斤、飛行高度不超過150米)在社會民生中的實時監(jiān)測和評估方面具備特別優(yōu)勢,且具有廣闊的應(yīng)用前景。而隨著航空遙感技術(shù)的發(fā)展,遙感數(shù)據(jù)的傳輸和存儲已成為亟待解決的嚴(yán)重問題,微波通信等傳統(tǒng)方法傳輸速率有限,針對這些問題[1-3],自由空間光通信是一種有效的解決方案。自由空間激光通信系統(tǒng)的關(guān)鍵技術(shù)之一就是實現(xiàn)高精度的動態(tài)跟蹤[4]。目前信標(biāo)理論定位已經(jīng)在國內(nèi)外進行了深入的研究,例如神經(jīng)網(wǎng)絡(luò)[5]、小波分析[6],但是計算和實時處理的性能不能滿足系統(tǒng)要求。此外,近年來美國、歐洲、日本等國家投入了大量的人力、物力對空間激光通信進行了研究,空間激光通信經(jīng)過多年探索也取得了突破性進展[7],而我國空間激光通信研究起步較晚[8],且針對輕小型無人機的光通信技術(shù)研究較少,因此,開展輕小型無人機的光通信技術(shù)研究具有重要的研究意義。如何實現(xiàn)小體積、輕量化、低功耗的無線光通信終端,同樣也是輕小型無人機領(lǐng)域面臨的重要問題。
本文采用大疆六旋翼輕小型無人機作為光通信平臺,基于嵌入式平臺設(shè)計并制作小型無人機平臺光通信載荷。此外,本文在保證信標(biāo)光斑亞像元細分定位精度條件下,采用圖像處理器(Graphic Processing Unit,GPU)并行計算來加速灰度質(zhì)心算法以實現(xiàn)高速率捕獲、瞄準(zhǔn)和跟蹤,最終實現(xiàn)高穩(wěn)定性、低誤碼率的無線光通信。實驗證明經(jīng)過GPU并行加速的光斑定位跟蹤方法相比傳統(tǒng)方法計算速度更快,設(shè)計的輕小型無人機光通信載荷具有體積小、重量輕、能耗低的優(yōu)點。
圖1為光通信對準(zhǔn)跟蹤系統(tǒng)的原理圖。它主要由地端激光發(fā)射系統(tǒng)、圖像采集系統(tǒng)、PID控制系統(tǒng)、無人機飛控系統(tǒng)以及嵌入式設(shè)備等組成。地端激光發(fā)射系統(tǒng)由激光器、三軸電機等構(gòu)成。圖像采集系統(tǒng)由CMOS相機、75 mm變焦鏡頭等組成。PID控制系統(tǒng)由二軸控制云臺、嵌入式設(shè)備等構(gòu)成。無人機飛控系統(tǒng)主要由主控器、GPS-Compass Pro、PMU和LED四個模塊構(gòu)成。
圖1 光通信對準(zhǔn)系統(tǒng)原理圖
實驗中由地端激光發(fā)射系統(tǒng)的高功率固體激光器產(chǎn)生標(biāo)準(zhǔn)高斯分布的激光光束,并使其出現(xiàn)在工業(yè)相機拍攝的視場角范圍內(nèi);再在嵌入式設(shè)備上運行大疆Onboard SDK中編寫的主程序,通過圖像采集系統(tǒng)調(diào)用安裝在嵌入式平臺中的相機SDK驅(qū)動包內(nèi)動態(tài)鏈接庫函數(shù)打開相機攝像頭;嵌入式設(shè)備讀取相機圖像數(shù)據(jù)并進行預(yù)處理,圖形處理器加速質(zhì)心算法算出光斑質(zhì)心從而得到位置偏差數(shù)據(jù),最后采用PID三環(huán)控制云臺對準(zhǔn)跟蹤光斑質(zhì)心。
目前光斑的亞像素質(zhì)心定位算法主要有:高斯曲面擬合算法,數(shù)字相關(guān)亞像素算法和灰度重心算法等[9]?;叶戎匦姆ㄒ步忻芏荣|(zhì)心算法,對于亮度不均勻的目標(biāo),可按目標(biāo)光強分布求出光強權(quán)重質(zhì)心坐標(biāo)作為跟蹤點。在計算機中圖像是以矩陣的形式呈現(xiàn)出來的,因此對圖像質(zhì)心的計算實質(zhì)上就是對各種矩陣進行計算。
設(shè)一幀灰度圖像中有i、j兩個方向,i、j方向像素點的數(shù)量分別為m、n,像素點(i,j)處的灰度值為f(i,j),則圖像質(zhì)心位置坐標(biāo)(x0,y0)的表達式為:
僅使用質(zhì)心算法不能有效地提高光斑質(zhì)心定位精度,需先用閾值去除噪聲的影響。設(shè)置閾值的意義是,將低于閾值的像素看作是噪聲,不參加質(zhì)心計算,高于閾值的像素作為目標(biāo),減去閾值后參與質(zhì)心運算[10]。
對于分辨率大小為m×n的灰度圖像,超過閾值T的像素的灰度值直接參與質(zhì)心運算,小于閾值T的則不參與運算,相應(yīng)的灰度值表示為:
本文使用這種帶有閾值檢測的質(zhì)心跟蹤算法,且剔除背景噪聲的干擾,實現(xiàn)光斑圖像的高精度探測定位[11]。但是,采用傳統(tǒng)的中央處理器來計算這種質(zhì)心算法運行時間較長,無法達到實時性要求。因此采取了圖形處理器并行優(yōu)化質(zhì)心算法以達到實時計算質(zhì)心的目的。
為了進一步提高算法的質(zhì)心探測誤差,還需要采用自適應(yīng)直方圖均衡化(Adaptive Histogram Equalization,AHE)和中值濾波(Median Filter)函數(shù)對圖像進行預(yù)處理。
直方圖均衡化是一種最常用的圖像增強方法,因為其簡單且在幾乎所有類型的圖像上性能都比較好,它是一種非線性的圖像拉伸。直方圖均衡化根據(jù)輸入灰度級的概率分布重新映射圖像的灰度級來執(zhí)行操作[12]。通過使用一個累積分布函數(shù)(CDF)映射函數(shù)來實現(xiàn)均衡化的目的。對于直方圖H(i),它的累積分布H'(i)是:
均衡化后像素的強度值可以通過一個簡單的映射過程來獲得:
恢復(fù)后的累積分布直方圖對原始圖像的像素進行灰度映射,得到處理后的圖像。和普通的直方圖均衡化算法不同,AHE算法通過計算圖像的局部直方圖,然后重新分布亮度來改變圖像對比度,從而改進圖像的局部對比度[13]。
在圖像處理中,圖像去噪是一項必不可少的預(yù)處理任務(wù),可提高圖像質(zhì)量[14]。中值濾波法是一種非線性平滑技術(shù),可用于處理AHE算法所帶來的椒鹽噪聲。
中值濾波的處理過程如圖2所示,實驗中選取3×3矩陣窗口作為濾波的卷積模板,即將矩陣中3行3列共9個像素值順序排列,取中值16替代原像素值3作為當(dāng)前元素的像素值。
圖2 中值濾波示意圖
為了便于程序進行處理,將灰度質(zhì)心算法公式分解為三部分依次進行計算,分別為公式(1)或公式(2)的分母A,公式(1)的分子B和公式(2)的分子C。
以公式(6)的計算過程為例,首先由Host端程序?qū)D像像素數(shù)據(jù)從中央處理器(CPU)中以一維數(shù)組的形式復(fù)制到圖形處理器(GPU)的全局存儲器(Global Memory)中,再進一步分配到GPU中每個block的共享內(nèi)存中供Device端程序進行并行計算。計算之前先判斷圖像灰度值是否大于閾值,大于則灰度值不變,否則將灰度值設(shè)為0。然后將保存在一維數(shù)組里的像素值分割成大小相等的n個數(shù)據(jù)塊,GPU中每個thread只需要對某一小塊數(shù)據(jù)進行簡單的求和計算,計算完成后再利用歸約算法將每個block中所有thread的計算結(jié)果歸約成一個結(jié)果保存在block(0)中,完成后由 Host端程序?qū)⑺?block(0)結(jié)果從GPU顯存拷貝至主內(nèi)存。最后CPU計算所有block之和,即可得到公式(6)的計算結(jié)果。公式(7)和公式(8)的計算只需要在每個線程對數(shù)據(jù)塊內(nèi)的所有像素進行求和運算前乘以每個像素對應(yīng)的行坐標(biāo)或列坐標(biāo)。
實驗中所有程序均由C++語言編寫,GPU加速部分程序采用了英偉公司提供的CUDA編程模型,并且編譯生成為便于主程序調(diào)用的靜態(tài)庫。整個過程采用跨平臺編譯器CMake編譯并生成可執(zhí)行文件。由于從相機讀取得到的圖像格式是1 024×1 280分辨率的單通道8位灰度圖,所以一張圖片總共有1 310 720個像素點。GPU是以一維數(shù)組的形式讀取Mat類圖像的像素灰度值,也就是要對1 310 720個一維數(shù)組元素進行計算。在CUDA中,數(shù)據(jù)是從主內(nèi)存復(fù)制到顯存的Global Memory,而數(shù)據(jù)的復(fù)制過程往往耗時較長,可以通過增加線程的數(shù)量來提高顯存的帶寬。Jetson Xavier NX中每個block的最大線程(thread)數(shù)是1 024個,如果采用單個block,則每個線程要計算1 280個數(shù)值。為了充分地利用GPU資源,計算調(diào)用了32個block,每個block均調(diào)用256個thread參與并行計算。這樣總共有8 192個thread同時對一維數(shù)組中的數(shù)值進行求和運算,大大提高了程序的并行效率。
通常顯卡的內(nèi)存都是DRAM,因此對顯卡內(nèi)存訪問最有效的途徑是連續(xù)訪問。當(dāng)并行執(zhí)行線程時,每個線程都運行在一個連續(xù)的全局顯卡內(nèi)存塊上,但當(dāng)一個線程正在等待數(shù)據(jù)時,GPU切換到另一個線程,另一個線程將從另一個位置的全局顯卡中轉(zhuǎn)移內(nèi)存塊中的數(shù)據(jù),如圖3所示。
圖3 并行優(yōu)化流程圖
圖4 存取模式對比
綜上分析,雖然看起來每個線程對一塊連續(xù)的地址計算,但實際上執(zhí)行時,當(dāng)一個線程在等待內(nèi)存的數(shù)據(jù)時,GPU會切換到下一個線程,因此,在同一個線程中連續(xù)存取內(nèi)存,在實際執(zhí)行時反而不是連續(xù)了[15],而是跳躍式的存取模式。因此,需要采用全局內(nèi)存訪問合并技術(shù),將顯存的存取模式改進為連續(xù)存取模式,提高線程數(shù)據(jù)訪問的效率。
上述程序是通過一個線程(Thread 0)實現(xiàn)了一個Block塊中所有像素點灰度值的累加。為了進一步提高程序的并行化程度,將每個Block塊中的加法都進行并行化。本文采用了二叉樹算法用于質(zhì)心算法中的并行加法計算。
如圖5中Block(0,0)所示,每個block中的每個格子都代表了一個線程中的所有像素點灰度值之和,第一輪迭代開始時,設(shè)置步長offset為1,掩碼 mask為 1,則 Thread 0和 Thread 1相加,Thread 2和Thread 3相加,以此類推。當(dāng)?shù)诙喌_始時,設(shè)置步長為2,則Thread 0和Thread 2相加,Thread 4和Thread 6相加,以此類推。每迭代一輪步長和掩碼更新一次且所有線程需要進行一次同步,以此類推,直至迭代結(jié)束,每個block最終都通過線程Thread 0完成歸約并將結(jié)果保存在其共享內(nèi)存shared[0]中。
圖5 二分法并行歸約算法圖
除了改進顯存存取模式之外,還可以通過使用共享內(nèi)存來改善全局內(nèi)存合并訪問。如圖5所示,程序共申請了3組共享內(nèi)存,分別用來保存每個線程在每一輪迭代過程中對這3條公式依次計算所產(chǎn)生的結(jié)果。程序總共啟用了32個block,而每條公式都有32個歸約結(jié)果,故總共有96個結(jié)果保存在各個block的共享內(nèi)存當(dāng)中,這96個數(shù)據(jù)傳輸?shù)紺PU中計算出每個公式的最終結(jié)果。
為了驗證并行優(yōu)化后質(zhì)心計算的加速效果,實驗采用了NVIDIA嵌入式設(shè)備Jetson Nano和Jetson Xavier NX對程序進行了測試。分別設(shè)置了兩組對照實驗,即采用傳統(tǒng)方法(CPU)計算圖像質(zhì)心和采用并行優(yōu)化方法計算質(zhì)心。用這兩種方法分別在Nano和NX中對100張光斑圖像進行計算,光斑圖像為8位單通道灰度圖,分辨率1 024×1 280。程序的運行結(jié)果如圖6所示,在Nano上采用傳統(tǒng)質(zhì)心計算方法的運行時間約37 ms,而并行優(yōu)化算法后只需要約8 ms。而在NX上傳統(tǒng)方法運行時間約17.5 ms,并行優(yōu)化后約3.4 ms,可見采用這種GPU-CPU異構(gòu)體系結(jié)構(gòu)可以大幅減少算法的運行時間。
圖6 GPU和CPU運行時間對比
為了測試采用GPU加速的無人機實時對準(zhǔn)跟蹤技術(shù)的準(zhǔn)確性和可行性,實驗采用搭載Jetson Xavier NX的Ronin-MX云臺在大疆經(jīng)緯Matrice 600 Pro輕小型無人機平臺上進行了實驗驗證。圖7(a)為實驗中采用的無人機,自重9.6 kg,最大起飛重量為15.1 kg,滿載時可飛行18 min,要求掛載的激光通信設(shè)備總重量要保持在6 kg以內(nèi)。設(shè)計的光通信載荷外形如圖7(b)所示,內(nèi)部結(jié)構(gòu)如圖7(c)所示,主要包括攝像機、姿態(tài)傳感器、嵌入式設(shè)備、焦距鏡頭、激光器等。圖7(d)為光通信地面端跟蹤實驗設(shè)備圖。
圖7 光通信跟蹤對準(zhǔn)實驗設(shè)備圖
激光器選用夏普GH0631IA2GC激光二極管,生成的激光波長為638 nm,光斑形狀為圓形。相機型號選用MindVision CMOS類型常規(guī)面陣黑白工業(yè)相機MV-SUA134GM-T,有效像素130萬,圖像分辨率1 280×1 024,像元尺寸4.8μm ×4.8μm,相機接口為USB3.0且支持Linux驅(qū)動。所使用的實驗平臺為NVIDA公司的Jetson Xavier NX開發(fā)套件,搭載48個Tensor Cored的384核NVIDA Volta GPU,同時配備6核NVIDIA Carmel ARM 64位CPU及8 GB LPDDR內(nèi)存。Jetson Xavier NX采用基于Ubuntu18.0.4的Linux環(huán)境,支持NVIDIA CUDA并行架構(gòu)和各類SDK擴展包,同時輔以跨平臺編譯器Cmake。它體型小巧、性能卓越,非常適合搭載在無人機吊艙內(nèi)部作為控制核心。
在程序?qū)ο鄼C得到的灰度圖像進行質(zhì)心計算之前,為了增強圖像對比度和平滑噪聲,需要調(diào)用OpenCV2中自適應(yīng)直方圖均衡化函數(shù)和中值濾波函數(shù)進行圖像預(yù)處理。自適應(yīng)直方圖均衡化函數(shù)的對比度參數(shù)為2,塊的大小為8×8;中值濾波函數(shù)內(nèi)核大?。╧size)為 3,即取 3×3的矩形窗口。圖像預(yù)處理后的激光光斑圖像效果經(jīng)過比例放大后如圖8所示。自適應(yīng)直方圖均衡化處理后雖然圖像對比度增強了,但光斑邊緣模糊且背景中出現(xiàn)了很多椒鹽噪聲,而采用中值濾波函數(shù)對圖像噪聲進行平滑處理后,噪聲明顯變少且光斑邊緣形狀也更加清晰。
圖8 圖像預(yù)處理
實驗中通過讀取相鄰兩個采樣數(shù)據(jù)之間的時間差值即可知使用傳統(tǒng)方法(CPU)計算整個閉環(huán)控制系統(tǒng)后的單次運行時間,如圖9所示,運行時間約39.35 ms,而對算法并行優(yōu)化后的系統(tǒng)單次運行時間約32.38 ms,速度可達每秒31幀;由于讀取相機圖像像素程序的運行時間約28.4 ms,控制程序運行時間約0.5 ms,可見采用GPU并行優(yōu)化后的光斑質(zhì)心跟蹤對準(zhǔn)方法可以有效減少質(zhì)心計算時間(時間減少了約7 ms),進而縮短閉環(huán)回路控制時間,提高控制系統(tǒng)的閉環(huán)帶寬。
圖9 單幀圖像運行時間對比圖
圖10顯示了采用GPU加速質(zhì)心算法后,在Jetson Xavier NX上測得的包括分配內(nèi)存、傳輸數(shù)據(jù)及GPU與CPU計算的時間。像素矩陣數(shù)據(jù)從CPU復(fù)制到GPU的時間(包括分配內(nèi)存)約0.7 ms,GPU中并行計算及CPU計算最終結(jié)果的時間約0.1 ms,GPU將計算結(jié)果返回到CPU的時間(包括釋放內(nèi)存)約2.5 ms;采用并行優(yōu)化算法后計算質(zhì)心總共耗時約3.4 ms,可見采用GPU并行優(yōu)化灰度質(zhì)心算法后,如果能進一步優(yōu)化數(shù)據(jù)傳輸過程,程序運行速度仍能有所提升。
圖10 計算和數(shù)據(jù)傳輸時間
實驗通過PID控制算法控制Ronin MX云臺橫滾軸和仰俯軸電機運動的角速度,最終實現(xiàn)光斑質(zhì)心與圖像中心點重合并保持穩(wěn)定狀態(tài)。經(jīng)過調(diào)試,最終的PID參數(shù)設(shè)置如下:比例增益值kp為113,積分增益值ki為0.5,微分增益值kd為11。將實驗測量得到的階躍響應(yīng)離散數(shù)據(jù)用Matlab軟件繪制出來,經(jīng)過擬合后得到的橫滾軸階躍響應(yīng)曲線如圖11所示。仰俯軸PID控制參數(shù)同橫滾軸一致。圖11中橫坐標(biāo)表示系統(tǒng)的采樣數(shù)(視頻幀數(shù)),由圖9可知每幀圖像用時約32.38 ms,縱坐標(biāo)表示光斑質(zhì)心在橫滾軸方向上的像素點位置相對值。分析實驗數(shù)據(jù)可知,采用PID控制算法后,系統(tǒng)的上升時間tr為0.069 s,峰值時間td為0.109 s,調(diào)整時間ts為0.454 s,最大超調(diào)量為0.521,系統(tǒng)的震蕩次數(shù)為2次,系統(tǒng)的穩(wěn)態(tài)誤差(脫靶量)穩(wěn)定在0.1 mrad(about four pixel)以內(nèi)。
圖11 階躍響應(yīng)曲線圖
本文在研究了灰度質(zhì)心算法定位光斑質(zhì)心從而實現(xiàn)激光通信的理論基礎(chǔ)上,采用圖形處理器并行優(yōu)化的方法對算法的計算過程進行了加速,經(jīng)過加速的算法運行時長從原來的11 ms縮短至不到4 ms,加速效果顯著。并且,本文還設(shè)計了搭載Jetson Xavier NX的光通信載荷在大疆無人機上進行激光通信系統(tǒng)對準(zhǔn)跟蹤的實驗驗證。實驗結(jié)果表明,采用圖形處理器加速的無人機光通信系統(tǒng)對準(zhǔn)跟蹤技術(shù)具有快速性、準(zhǔn)確性和穩(wěn)定性,對準(zhǔn)跟蹤光斑質(zhì)心的脫靶量小于0.1 mrad,光斑質(zhì)心跟蹤幀率可達到31 FPS,滿足了光通信系統(tǒng)的要求。