梁睿哲 李承蒙 謝祥平 謝昊璋 唐 亮
(桂林電子科技大學(xué)機電工程學(xué)院,廣西 桂林 541004)
RoboMaster機甲大師賽是大疆創(chuàng)新發(fā)起創(chuàng)建的機器人競技與學(xué)術(shù)交流平臺,其為我們提供了很好的計算機視覺應(yīng)用開發(fā)平臺,需要機器人在賽場實現(xiàn)識別追蹤、目標(biāo)檢測、預(yù)判以及精準(zhǔn)打擊等功能。本文基于RoboMaster2020~2021賽季比賽內(nèi)容,以機器人所需的視覺功能為背景,研究計算機視覺領(lǐng)域下的多種技術(shù)的開發(fā)和應(yīng)用。
自動瞄準(zhǔn)作為RoboMaster視覺中最基礎(chǔ)的功能,自動瞄準(zhǔn)裝甲板大幅度提高打擊效率。機器人身上的裝甲板是主要承受傷害的區(qū)域,有兩根平行的燈條,中間是數(shù)字或者兵種圖標(biāo),所以需要從眾多的燈條中準(zhǔn)確地篩選出真正的裝甲板,以確定最佳目標(biāo)進行瞄準(zhǔn)打擊[1]。
首先對從攝像頭獲取的圖像做預(yù)處理操作,好的二值化處理可以真實地還原燈條的輪廓,減少燈條的篩選錯誤;以上一幀圖像的識別到的裝甲板為中心,從長寬兩個方向擴大合適的倍數(shù)作為ROI區(qū)域,可以減少跳變,再對ROI圖像進行處理可以提高圖像處理的速度,提高數(shù)據(jù)的連續(xù)性,而后對找到的所有輪廓進行篩選;將獲得的燈條放入數(shù)組中逐個進行配對,圖像中的燈條相對于真實的燈條可能會有一些變形,通過合成裝甲板的角度與燈條角度之差,刪除誤差較大的裝甲板,再通過RGB判斷燈條顏色是否為應(yīng)該識別顏色,最后通過BP模型判斷得到的裝甲板中間是否為數(shù)字或者兵種圖標(biāo),得到正確的裝甲板,并且保持了較高的圖像處理幀率。
通過燈條配對的裝甲板依然有誤識別現(xiàn)象出現(xiàn)的可能,所以需要判斷裝甲板中間是否有數(shù)字或圖標(biāo),我們采用了BP(back propagation)神經(jīng)網(wǎng)絡(luò)來分類各種數(shù)字和圖標(biāo)。BP神經(jīng)網(wǎng)絡(luò)是一種多層前饋神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)的主要特點是信號前向傳遞,誤差反向傳播。基本思想是梯度下降,最終讓網(wǎng)絡(luò)的實際輸出值和期望輸出值的誤差均方差最小;訓(xùn)練的核心算法為前向傳播和反向傳播[2]。
研究表明,隱含層的節(jié)點數(shù)表示該網(wǎng)絡(luò)的數(shù)據(jù)處理能力。為了保證程序的運算速度,這里BP模型的隱藏層只有一層,樣本的分辨率是20×20,隱藏層的結(jié)點為64。輸出層為7類,分別是數(shù)字1(英雄)、2(工程)、3(步兵)、4(步兵)、8(前哨站)、9(基地)、7(哨兵),因為使用此網(wǎng)絡(luò)用于多分類,tanh函數(shù)在特征相差明顯時的效果會更好,在循環(huán)過程中會不斷擴大特征效果,所以隱藏層激活函數(shù)使用了tanh函數(shù)。整個過程如下:
(1)樣本采集
我們采集了每個種類的樣本圖片800張,樣本的亮度在一個范圍之內(nèi),可以減少燈光條件對識別的影響。
(2)數(shù)據(jù)預(yù)處理
將樣本處理成一個xml文件作為網(wǎng)絡(luò)訓(xùn)練的輸入文件。
(3)網(wǎng)絡(luò)訓(xùn)練
①先設(shè)置每層神經(jīng)元個數(shù),初始化權(quán)重。
②輸入訓(xùn)練文件。
③設(shè)置閾值、學(xué)習(xí)速率和激活函數(shù)。
④訓(xùn)練,達到停止訓(xùn)練的條件后停止。
⑤保存模型,樣本測試。
(1)坐標(biāo)變換
從相機中我們可以獲取到目標(biāo)在圖像上的位置,我們通過針孔相機模型來構(gòu)建這種從二維到三維的對應(yīng)關(guān)系。
針孔相機模型描述了三維空間中的點的坐標(biāo)與其在理想針孔相機的圖像平面上的投影之間的數(shù)學(xué)關(guān)系,將相機光圈視為一個點,根據(jù)小孔成像原理來形成投影。針孔相機模型是理想化的模型,我們引入了畸變參數(shù)來修正形變,畸變參數(shù)可以在相機標(biāo)定過程中求得。在針孔相機模型下,我們可以用矩陣來表示坐標(biāo)系之間的線性關(guān)系,從而實現(xiàn)不同坐標(biāo)系下的坐標(biāo)相互轉(zhuǎn)換。我們用到了3個坐標(biāo)系:圖像物理坐標(biāo)系、圖像像素坐標(biāo)系、相機坐標(biāo)系。圖像物理坐標(biāo)系為二維平面坐標(biāo)系,用來描述投影實像中的點,以投影像中心為原點;圖像像素坐標(biāo)系用來描述二維圖像中的點,原點一般為圖像左上角并以像素為單位;相機坐標(biāo)系為右手系,以相機光心為原點[3]。
根據(jù)小孔成像原理,我們可以得到相機坐標(biāo)與圖像物理坐標(biāo)之間的關(guān)系:
其中x、y為圖像物理坐標(biāo)系下的坐標(biāo),X,Y,Z為相機坐標(biāo)系下的坐標(biāo),fx、fy為相機焦距。
圖像物理坐標(biāo)系到圖像像素坐標(biāo)系的變換需要平移和縮放,使其原點重合單位統(tǒng)一,這種對應(yīng)關(guān)系可以這樣描述:
其中u、v為圖像像素坐標(biāo)系下的坐標(biāo),x、y為圖像物理坐標(biāo)系下的坐標(biāo),dx、dy為單位轉(zhuǎn)化系數(shù),u0、v0為圖像物理坐標(biāo)系原點在圖像像素坐標(biāo)系下的坐標(biāo)。
因此,圖像像素坐標(biāo)寫成齊次坐標(biāo)形式后與相機坐標(biāo)之間的線性關(guān)系可以用矩陣描述為:
兩個矩陣的乘積即為相機的內(nèi)參矩陣,內(nèi)參矩陣與相機畸變參數(shù)可以由張正友標(biāo)定法求得。但圖像畢竟是二維的,想要求得三維世界中的真實坐標(biāo)還需要更進一步計算。
(2)PnP解算求解坐標(biāo)
為了能精準(zhǔn)打擊到敵方裝甲板,需要知道敵方裝甲板中心在相機坐標(biāo)系下的坐標(biāo)。每塊裝甲板上都有一對燈條,燈條的長度和燈條之間的間距是已知的。因此,可以引入第四個坐標(biāo)系——世界坐標(biāo)系,并以燈條矩形中心為世界坐標(biāo)系的原點,根據(jù)矩形的尺寸賦給矩形四個點相應(yīng)的世界坐標(biāo)系下的值,從而將其視作一個PnP(Perspective-n-Point)問題。
通過PnP解算獲得A、B、C三個點的相機坐標(biāo)后,可以使用ICP(Iterative Closest Point)的方式迭代求解相機的位姿,最終解出旋轉(zhuǎn)矩陣R與平移向量T。由于我們選定燈條矩形中心為世界坐標(biāo)系的原點,因此,解出的平移向量T就是矩形中心在相機坐標(biāo)系下的坐標(biāo)。
(3)預(yù)判打擊
預(yù)判打擊需要結(jié)合相機和陀螺儀兩個傳感器的數(shù)據(jù)。相機獲得到的目標(biāo)圖像經(jīng)過識別和解算后,即可得到相機坐標(biāo)系下目標(biāo)的坐標(biāo)數(shù)據(jù),而陀螺儀則反映了當(dāng)前云臺的姿態(tài)。陀螺儀的零點在忽略零漂的情況下是不會發(fā)生變化的,因此,可以根據(jù)陀螺儀的角度數(shù)據(jù)將相機坐標(biāo)系進行反向旋轉(zhuǎn)得到一個坐標(biāo)系。該坐標(biāo)系除原點會隨著戰(zhàn)車移動外,各個坐標(biāo)軸方向是固定不變的。
至此,已獲得了一個相對靜止的坐標(biāo)系,通過這個坐標(biāo)系即可將預(yù)判打擊轉(zhuǎn)換為一個運動學(xué)問題。將我方戰(zhàn)車視為靜止?fàn)顟B(tài),通過觀測一段連續(xù)時間中目標(biāo)的位置變化即可近似計算出目標(biāo)此時的運動狀態(tài)(速度、加速度)。
接下來是通過當(dāng)前時刻的運動狀態(tài)來推算正確的彈丸落點,使得敵方目標(biāo)到達該處時我們的彈丸剛好可以打擊到。可以使用迭代法來求得飛行時間的近似解。將彈丸飛行至當(dāng)前時刻目標(biāo)位置所用的時間設(shè)為迭代初值t0并開始迭代。計算出經(jīng)過t0時間后目標(biāo)所處的位置p1,求得彈丸飛行至p1所用時間t1。用t1與t0作差得到時間差△t,并將△t作為本次迭代的步長。用t1加上步長得到t2,并將t2作為新的迭代初值進行下一輪迭代。當(dāng)△t小于一定值或迭代次數(shù)到達上限即停止迭代,可獲得最終的彈丸飛行時間tn??梢越o△t乘上一個系數(shù)α,通過調(diào)節(jié)α的值來縮短迭代時間,但要注意α的取值以防發(fā)散。最后用tn求得最終的預(yù)判坐標(biāo)。
能量機關(guān)的激活在RoboMaster比賽中非常重要,大幅度的攻防屬性加成往往決定著比賽的勝負(fù)走向。
(1)能量機關(guān)定位圓心的識別
根據(jù)傳入的類正方形的輪廓和矩形進行判別。遍歷所有的輪廓和矩形,先在形態(tài)學(xué)上進行篩選,如果滿足形態(tài)學(xué)條件,那么獲取該矩形。在原圖的對應(yīng)坐標(biāo)位置,截取出比該矩形略大的ROI區(qū)域,然后對ROI區(qū)域進行歸一化,傳入SVM進行二分類。
這里重點運用了機器學(xué)習(xí)中的SVM(支持向量機),簡單應(yīng)用了其二分類的功能。我們利用OpenCV中的ml庫封裝好的SVM類建立起一套完整的SVM的項目。首先,我們利用上面的識別部分獲取樣本。采集樣本時便同時將其分類,以是否為正確的圓心R圖像為標(biāo)準(zhǔn),分為正負(fù)兩類樣本,按照1/4的比例分為測試集和訓(xùn)練集(此比例是參考周治華老師編寫的《機器學(xué)習(xí)》一書)。其次,對樣本進行歸一化操作后,通過調(diào)用SVM類中的外部接口進行訓(xùn)練,得出訓(xùn)練結(jié)果xml文件。然后,通過調(diào)用預(yù)測函數(shù)對測試集進行測試,反復(fù)測試后得到最好的xml文件。
(2)懸臂擊打狀態(tài)的識別判定
當(dāng)懸臂未發(fā)光時,該懸臂處于未打擊狀態(tài);當(dāng)懸臂出現(xiàn)流水燈時,則該懸臂處于待打擊狀態(tài);當(dāng)懸臂燈光常亮?xí)r,則該懸臂處于已打擊狀態(tài)。將已獲取的圓心坐標(biāo)和每一塊裝甲板矩形進行連線,并把這條線段四等分。在原圖像上截取垂直于每一條線段,并且靠近裝甲板的矩形作為待識別區(qū)域,獲得該旋轉(zhuǎn)矩形的外接矩形作為ROI區(qū)域。對此,ROI區(qū)域先將選裝矩形外的部分填充為黑色。然后,進行預(yù)處理獲得ROI區(qū)域的二值圖。因為已打擊的懸臂呈現(xiàn)常亮狀態(tài),未打擊的懸臂只有中間的主區(qū)域呈現(xiàn)流水燈狀態(tài),二值圖下兩個狀態(tài)的白色像素點數(shù)量具有很明顯的界限。統(tǒng)計每個ROI區(qū)域的白色像素點數(shù)量,尋找數(shù)量最小的ROI區(qū)域。
能量機關(guān)有大小兩個模式,大能量機關(guān)的旋轉(zhuǎn)策略為角速度關(guān)于正弦函數(shù)變化,如下所示。
其中 spd的單位為rad/s,t 的單位為s;小能量機關(guān)的旋轉(zhuǎn)策略為固定轉(zhuǎn)速10rpm。
首先確定基準(zhǔn),以能量機關(guān)圓心R的中心點為基準(zhǔn)點,沿圖像二維坐標(biāo)系的X軸正方向作射線,以此為基準(zhǔn)線。計算出每一幀圖像中待打擊裝甲板的中心和圓心R的連線與基準(zhǔn)線的角度。每次處理記錄上一次的角度,根據(jù)角度的變化判斷出能量機關(guān)的旋轉(zhuǎn)方向。特別地,要剔除掉懸臂跳變的情況,當(dāng)角度變化過大時認(rèn)為懸臂發(fā)生跳變現(xiàn)象。依然根據(jù)角度變化再計算角速度的極值,每0.1s計算一次,當(dāng)極值連續(xù)固定達到一定次數(shù),認(rèn)為計算出了正確的極值。記錄現(xiàn)在的角速度和上一次計算的角速度,判斷出現(xiàn)在能量機關(guān)處于加速還是減速狀態(tài)。根據(jù)以上給出的目標(biāo)函數(shù)式反解出當(dāng)前所處的時刻。然后進行決策,若是勻速,則為小能量機關(guān),那么每一次預(yù)置固定的預(yù)判量;若是非勻速,則為大能量機關(guān),那么就要根據(jù)計算出的實際角速度和時刻,利用給出的正弦函數(shù)式進行積分,獲得角度變化。
雷達站機器人作為RoboMaster機甲大師賽中唯一的輔助類型機器人,它的任務(wù)主要是監(jiān)控全場,從繁雜的信息中提取出對我方有效的信息,從而達到輔助我方取得比賽勝利的目的。
(1)數(shù)據(jù)采集和預(yù)處理
前期測試使用RoboMaster機甲大師賽官方提供的RoboMaster 2019比賽目標(biāo)檢測數(shù)據(jù)集,該數(shù)據(jù)集已經(jīng)標(biāo)注了object的name屬性、armor的armor_color屬性以及若干本文未使用的屬性。其中name屬性有5種屬性值,分別為car,watcher,base,ignore,armor。armor_color有3種屬性值,分別為red、blue、gray。前者用于區(qū)分機器人種類,后者區(qū)分機器人所屬陣營。從中隨機抽取5 000張樣本作為訓(xùn)練集,該數(shù)據(jù)集的原始圖片大小為1 920×1 080。
訓(xùn)練前,須將數(shù)據(jù)集圖片統(tǒng)一修改為608×608,以提高訓(xùn)練速度。除此以外,還會通過去除相似圖片來達到提高模型的精度。
(2)YOLOV4算法
YOLOV4網(wǎng)絡(luò)可以劃分為Backbone、Neck、Head三部分,其中Backbone采用CSPDarknet53作為骨干網(wǎng)絡(luò),Neck使用PANet和SPP(空間金字塔池化)來加強特征融合,而Head則沿用YOLOV3檢測頭。
在YOLOV4網(wǎng)絡(luò)中,它首先會將一張圖片劃分成N×N個網(wǎng)格,如果某個機器人的中心落在某個網(wǎng)格內(nèi),則這個網(wǎng)絡(luò)就負(fù)責(zé)預(yù)測這個機器人對象。每個網(wǎng)格需要預(yù)測M個邊界框的位置和置信度,位置信息包括模型預(yù)測的對象的中心坐標(biāo)及寬高aw、ah。
下一步是利用模型預(yù)測的中心坐標(biāo)和寬高求出預(yù)測框的中心坐標(biāo)(bx,by)及寬高bw、bh。
將bx、by、bw、bh除以對應(yīng)的特征圖尺寸,再乘以原始輸入圖片尺寸(608×608)便可得到預(yù)測的邊界框在原圖中的實際坐標(biāo)。
預(yù)測位置和預(yù)測種類是同時進行的,每張圖片劃分的N2個網(wǎng)格都會預(yù)測一個分類值,代表的是待測物在每個邊框上的概率。
現(xiàn)在已經(jīng)預(yù)測出了N×N×M個目標(biāo)窗口,再根據(jù)設(shè)定的閾值篩出一定的低概率窗口,最后利用非極大值抑制法來選擇置信度高的目標(biāo)窗口。
機器智能化的前提是其得具有感知能力,而計算機視覺給予了機器“看”的感知能力。本項目不僅能夠完成基本的燈光和數(shù)字的識別鎖定,還能進行精準(zhǔn)的測量與打擊,并且可以對目標(biāo)的運動進行預(yù)判。將項目實際運用于RoboMaster機甲大師賽,有著很好的自適應(yīng)性,高內(nèi)聚低耦合使其更具實用性。