梁睿哲 李承蒙 謝祥平 謝昊璋 唐 亮
(桂林電子科技大學機電工程學院,廣西 桂林 541004)
RoboMaster機甲大師賽是大疆創新發起創建的機器人競技與學術交流平臺,其為我們提供了很好的計算機視覺應用開發平臺,需要機器人在賽場實現識別追蹤、目標檢測、預判以及精準打擊等功能。本文基于RoboMaster2020~2021賽季比賽內容,以機器人所需的視覺功能為背景,研究計算機視覺領域下的多種技術的開發和應用。
自動瞄準作為RoboMaster視覺中最基礎的功能,自動瞄準裝甲板大幅度提高打擊效率。機器人身上的裝甲板是主要承受傷害的區域,有兩根平行的燈條,中間是數字或者兵種圖標,所以需要從眾多的燈條中準確地篩選出真正的裝甲板,以確定最佳目標進行瞄準打擊[1]。
首先對從攝像頭獲取的圖像做預處理操作,好的二值化處理可以真實地還原燈條的輪廓,減少燈條的篩選錯誤;以上一幀圖像的識別到的裝甲板為中心,從長寬兩個方向擴大合適的倍數作為ROI區域,可以減少跳變,再對ROI圖像進行處理可以提高圖像處理的速度,提高數據的連續性,而后對找到的所有輪廓進行篩選;將獲得的燈條放入數組中逐個進行配對,圖像中的燈條相對于真實的燈條可能會有一些變形,通過合成裝甲板的角度與燈條角度之差,刪除誤差較大的裝甲板,再通過RGB判斷燈條顏色是否為應該識別顏色,最后通過BP模型判斷得到的裝甲板中間是否為數字或者兵種圖標,得到正確的裝甲板,并且保持了較高的圖像處理幀率。
通過燈條配對的裝甲板依然有誤識別現象出現的可能,所以需要判斷裝甲板中間是否有數字或圖標,我們采用了BP(back propagation)神經網絡來分類各種數字和圖標。BP神經網絡是一種多層前饋神經網絡,該網絡的主要特點是信號前向傳遞,誤差反向傳播。基本思想是梯度下降,最終讓網絡的實際輸出值和期望輸出值的誤差均方差最小;訓練的核心算法為前向傳播和反向傳播[2]。
研究表明,隱含層的節點數表示該網絡的數據處理能力。為了保證程序的運算速度,這里BP模型的隱藏層只有一層,樣本的分辨率是20×20,隱藏層的結點為64。輸出層為7類,分別是數字1(英雄)、2(工程)、3(步兵)、4(步兵)、8(前哨站)、9(基地)、7(哨兵),因為使用此網絡用于多分類,tanh函數在特征相差明顯時的效果會更好,在循環過程中會不斷擴大特征效果,所以隱藏層激活函數使用了tanh函數。整個過程如下:
(1)樣本采集
我們采集了每個種類的樣本圖片800張,樣本的亮度在一個范圍之內,可以減少燈光條件對識別的影響。
(2)數據預處理
將樣本處理成一個xml文件作為網絡訓練的輸入文件。
(3)網絡訓練
①先設置每層神經元個數,初始化權重。
②輸入訓練文件。
③設置閾值、學習速率和激活函數。
④訓練,達到停止訓練的條件后停止。
⑤保存模型,樣本測試。
(1)坐標變換
從相機中我們可以獲取到目標在圖像上的位置,我們通過針孔相機模型來構建這種從二維到三維的對應關系。
針孔相機模型描述了三維空間中的點的坐標與其在理想針孔相機的圖像平面上的投影之間的數學關系,將相機光圈視為一個點,根據小孔成像原理來形成投影。針孔相機模型是理想化的模型,我們引入了畸變參數來修正形變,畸變參數可以在相機標定過程中求得。在針孔相機模型下,我們可以用矩陣來表示坐標系之間的線性關系,從而實現不同坐標系下的坐標相互轉換。我們用到了3個坐標系:圖像物理坐標系、圖像像素坐標系、相機坐標系。圖像物理坐標系為二維平面坐標系,用來描述投影實像中的點,以投影像中心為原點;圖像像素坐標系用來描述二維圖像中的點,原點一般為圖像左上角并以像素為單位;相機坐標系為右手系,以相機光心為原點[3]。
根據小孔成像原理,我們可以得到相機坐標與圖像物理坐標之間的關系:

其中x、y為圖像物理坐標系下的坐標,X,Y,Z為相機坐標系下的坐標,fx、fy為相機焦距。
圖像物理坐標系到圖像像素坐標系的變換需要平移和縮放,使其原點重合單位統一,這種對應關系可以這樣描述:

其中u、v為圖像像素坐標系下的坐標,x、y為圖像物理坐標系下的坐標,dx、dy為單位轉化系數,u0、v0為圖像物理坐標系原點在圖像像素坐標系下的坐標。
因此,圖像像素坐標寫成齊次坐標形式后與相機坐標之間的線性關系可以用矩陣描述為:

兩個矩陣的乘積即為相機的內參矩陣,內參矩陣與相機畸變參數可以由張正友標定法求得。但圖像畢竟是二維的,想要求得三維世界中的真實坐標還需要更進一步計算。
(2)PnP解算求解坐標
為了能精準打擊到敵方裝甲板,需要知道敵方裝甲板中心在相機坐標系下的坐標。每塊裝甲板上都有一對燈條,燈條的長度和燈條之間的間距是已知的。因此,可以引入第四個坐標系——世界坐標系,并以燈條矩形中心為世界坐標系的原點,根據矩形的尺寸賦給矩形四個點相應的世界坐標系下的值,從而將其視作一個PnP(Perspective-n-Point)問題。
通過PnP解算獲得A、B、C三個點的相機坐標后,可以使用ICP(Iterative Closest Point)的方式迭代求解相機的位姿,最終解出旋轉矩陣R與平移向量T。由于我們選定燈條矩形中心為世界坐標系的原點,因此,解出的平移向量T就是矩形中心在相機坐標系下的坐標。
(3)預判打擊
預判打擊需要結合相機和陀螺儀兩個傳感器的數據。相機獲得到的目標圖像經過識別和解算后,即可得到相機坐標系下目標的坐標數據,而陀螺儀則反映了當前云臺的姿態。陀螺儀的零點在忽略零漂的情況下是不會發生變化的,因此,可以根據陀螺儀的角度數據將相機坐標系進行反向旋轉得到一個坐標系。該坐標系除原點會隨著戰車移動外,各個坐標軸方向是固定不變的。
至此,已獲得了一個相對靜止的坐標系,通過這個坐標系即可將預判打擊轉換為一個運動學問題。將我方戰車視為靜止狀態,通過觀測一段連續時間中目標的位置變化即可近似計算出目標此時的運動狀態(速度、加速度)。
接下來是通過當前時刻的運動狀態來推算正確的彈丸落點,使得敵方目標到達該處時我們的彈丸剛好可以打擊到。可以使用迭代法來求得飛行時間的近似解。將彈丸飛行至當前時刻目標位置所用的時間設為迭代初值t0并開始迭代。計算出經過t0時間后目標所處的位置p1,求得彈丸飛行至p1所用時間t1。用t1與t0作差得到時間差△t,并將△t作為本次迭代的步長。用t1加上步長得到t2,并將t2作為新的迭代初值進行下一輪迭代。當△t小于一定值或迭代次數到達上限即停止迭代,可獲得最終的彈丸飛行時間tn。可以給△t乘上一個系數α,通過調節α的值來縮短迭代時間,但要注意α的取值以防發散。最后用tn求得最終的預判坐標。
能量機關的激活在RoboMaster比賽中非常重要,大幅度的攻防屬性加成往往決定著比賽的勝負走向。
(1)能量機關定位圓心的識別
根據傳入的類正方形的輪廓和矩形進行判別。遍歷所有的輪廓和矩形,先在形態學上進行篩選,如果滿足形態學條件,那么獲取該矩形。在原圖的對應坐標位置,截取出比該矩形略大的ROI區域,然后對ROI區域進行歸一化,傳入SVM進行二分類。
這里重點運用了機器學習中的SVM(支持向量機),簡單應用了其二分類的功能。我們利用OpenCV中的ml庫封裝好的SVM類建立起一套完整的SVM的項目。首先,我們利用上面的識別部分獲取樣本。采集樣本時便同時將其分類,以是否為正確的圓心R圖像為標準,分為正負兩類樣本,按照1/4的比例分為測試集和訓練集(此比例是參考周治華老師編寫的《機器學習》一書)。其次,對樣本進行歸一化操作后,通過調用SVM類中的外部接口進行訓練,得出訓練結果xml文件。然后,通過調用預測函數對測試集進行測試,反復測試后得到最好的xml文件。
(2)懸臂擊打狀態的識別判定
當懸臂未發光時,該懸臂處于未打擊狀態;當懸臂出現流水燈時,則該懸臂處于待打擊狀態;當懸臂燈光常亮時,則該懸臂處于已打擊狀態。將已獲取的圓心坐標和每一塊裝甲板矩形進行連線,并把這條線段四等分。在原圖像上截取垂直于每一條線段,并且靠近裝甲板的矩形作為待識別區域,獲得該旋轉矩形的外接矩形作為ROI區域。對此,ROI區域先將選裝矩形外的部分填充為黑色。然后,進行預處理獲得ROI區域的二值圖。因為已打擊的懸臂呈現常亮狀態,未打擊的懸臂只有中間的主區域呈現流水燈狀態,二值圖下兩個狀態的白色像素點數量具有很明顯的界限。統計每個ROI區域的白色像素點數量,尋找數量最小的ROI區域。
能量機關有大小兩個模式,大能量機關的旋轉策略為角速度關于正弦函數變化,如下所示。

其中 spd的單位為rad/s,t 的單位為s;小能量機關的旋轉策略為固定轉速10rpm。
首先確定基準,以能量機關圓心R的中心點為基準點,沿圖像二維坐標系的X軸正方向作射線,以此為基準線。計算出每一幀圖像中待打擊裝甲板的中心和圓心R的連線與基準線的角度。每次處理記錄上一次的角度,根據角度的變化判斷出能量機關的旋轉方向。特別地,要剔除掉懸臂跳變的情況,當角度變化過大時認為懸臂發生跳變現象。依然根據角度變化再計算角速度的極值,每0.1s計算一次,當極值連續固定達到一定次數,認為計算出了正確的極值。記錄現在的角速度和上一次計算的角速度,判斷出現在能量機關處于加速還是減速狀態。根據以上給出的目標函數式反解出當前所處的時刻。然后進行決策,若是勻速,則為小能量機關,那么每一次預置固定的預判量;若是非勻速,則為大能量機關,那么就要根據計算出的實際角速度和時刻,利用給出的正弦函數式進行積分,獲得角度變化。
雷達站機器人作為RoboMaster機甲大師賽中唯一的輔助類型機器人,它的任務主要是監控全場,從繁雜的信息中提取出對我方有效的信息,從而達到輔助我方取得比賽勝利的目的。
(1)數據采集和預處理
前期測試使用RoboMaster機甲大師賽官方提供的RoboMaster 2019比賽目標檢測數據集,該數據集已經標注了object的name屬性、armor的armor_color屬性以及若干本文未使用的屬性。其中name屬性有5種屬性值,分別為car,watcher,base,ignore,armor。armor_color有3種屬性值,分別為red、blue、gray。前者用于區分機器人種類,后者區分機器人所屬陣營。從中隨機抽取5 000張樣本作為訓練集,該數據集的原始圖片大小為1 920×1 080。
訓練前,須將數據集圖片統一修改為608×608,以提高訓練速度。除此以外,還會通過去除相似圖片來達到提高模型的精度。
(2)YOLOV4算法
YOLOV4網絡可以劃分為Backbone、Neck、Head三部分,其中Backbone采用CSPDarknet53作為骨干網絡,Neck使用PANet和SPP(空間金字塔池化)來加強特征融合,而Head則沿用YOLOV3檢測頭。
在YOLOV4網絡中,它首先會將一張圖片劃分成N×N個網格,如果某個機器人的中心落在某個網格內,則這個網絡就負責預測這個機器人對象。每個網格需要預測M個邊界框的位置和置信度,位置信息包括模型預測的對象的中心坐標及寬高aw、ah。
下一步是利用模型預測的中心坐標和寬高求出預測框的中心坐標(bx,by)及寬高bw、bh。
將bx、by、bw、bh除以對應的特征圖尺寸,再乘以原始輸入圖片尺寸(608×608)便可得到預測的邊界框在原圖中的實際坐標。
預測位置和預測種類是同時進行的,每張圖片劃分的N2個網格都會預測一個分類值,代表的是待測物在每個邊框上的概率。
現在已經預測出了N×N×M個目標窗口,再根據設定的閾值篩出一定的低概率窗口,最后利用非極大值抑制法來選擇置信度高的目標窗口。
機器智能化的前提是其得具有感知能力,而計算機視覺給予了機器“看”的感知能力。本項目不僅能夠完成基本的燈光和數字的識別鎖定,還能進行精準的測量與打擊,并且可以對目標的運動進行預判。將項目實際運用于RoboMaster機甲大師賽,有著很好的自適應性,高內聚低耦合使其更具實用性。