李凱強,沈建新
(南京航空航天大學 機電學院,南京 210016)
近年來,桌上冰球機器人、羽毛球機器人、乒乓球機器人的相繼出現,體現了人機互動在人工智能領域的重要性,已逐漸成為目前的熱點研究方向.機器人的工作原理大致相同:機器人通過圖像采集系統,快速檢測到運動目標的具體位置和運動狀態,并實時的對運動目標實現擊打.桌上冰球機器人是在二維平面內工作,對本文算法的驗證較為簡單,故而本文選取桌上冰球機器人作為算法的應用對象.冰球機器人通過圖像采集系統獲得冰球滑行過程中的位置信息并對其軌跡進行提前預測,等到冰球滑行到機器人的攻擊范圍內,通過伺服控制系統操縱機械臂,對冰球實現擊打.由于冰球滑行的速度非常快,這就對運動目標預測算法提出了較高要求.由實際工程測試知道,算法運行時間在30 ms內時,冰球機器人才能實時擋住冰球,并有時間進行擊打操作.對于運動目標的軌跡預測算法,目前應用最多的是卡爾曼濾波算法,使用卡爾曼濾波算法對觀測到的軌跡信息進行濾波即可估計出運動目標的運動速度,用以預測軌跡,但當運動目標發生突變如碰撞后運動方向改變,可能會導致運動目標丟失.基于受力分析的運動建模方法目前應用也十分廣泛,但其經常應用于無碰撞或碰撞發生后的軌跡預測情況[1].考慮到算法運行速度的問題,本文通過幀間差分結合碰撞算法,在冰球與桌邊碰撞前對冰球目標軌跡進行預測,提高了算法的運行速度,滿足實時性的要求.
常用的運動目標檢測算法主要有光流法、幀間差分法和背景差分法三類.光流法是利用目標的矢量流特征[2],如大小和方向等來檢測運動區域,其主要優點在于能夠檢測出獨立的運動對象,而不需預知場景的任何信息;缺點是大多數光流方法的計算比較復雜,且抗噪性能差,不能夠快速檢測到運動目標.背景差分法是目前目標檢測中最常用的方法之一[3,4],它將圖像分為背景和前景,對背景進行建模,然后用當前幀與背景圖像的差分來檢測運動區域.該方法能夠得到比較精確的運動目標信息,但對于動態場景的變化,如光照和外來無關事件的干擾特別敏感,因此在實際應用中需要加入背景圖象的更新機制,降低了算法的運行速度.幀間差分法是在連續的圖像序列中兩個或三個相鄰幀間,采用逐像素的差分并閾值化來提取出圖像中的運動區域,它能較快地檢測出視頻圖像中發生變化的部分[5–8].由于連續兩幀圖像之間的時間間隔較短,差分圖像受光線、氣候等環境因素變化的影響較較小,因此它具有很強的自適應性.但是如果目標速度過慢,則會造成過度覆蓋,使檢測的運動目標不夠完整.
對運動目標冰球來說,其運動速度很快,滿足了幀間差分法對運動速度的限制要求.又由于差分圖像受光線、氣候等環境因素的影響較小,所以當應用幀間差分法去檢測冰球目標,能使運動目標檢測算法具有更好的穩定性,并且幀間差分法能夠快速地檢測出冰球運動目標.
本算法是在VS2010+OpenCV平臺上編寫運行的.首先從圖像采集系統采集的序列圖像中讀取兩張相鄰幀圖像,并將這兩張相鄰幀圖像分別用Ik+1(x,y)和Ik(x,y)表示.然后,用灰度函數 cvtColor();將兩張相鄰幀圖像轉化成灰度圖.其次,把得到的兩張相鄰幀灰度圖進行差分運算如公式(1),得到差分圖像DK(x,y),如圖1所示.


圖1 幀間差分圖像
為清晰明確的顯示冰球目標,我們將所得到的差分圖像進行二值化運算,其算法如公式(2),得到二值化的目標差分圖如圖2.
其中,T是二值化時所選取的閾值,其值一般由實際場景決定,本文中選取T=50.

圖2 差分圖像二值化
為找到冰球的具體位置,我們要用findContours()函數去查找圖像中所有輪廓.從圖2中可以看到冰球位置和人手的干擾噪聲,為準確的找到冰球位置,需要去掉噪聲影響.首先,從圖2中可以知道,冰球的面積大于噪聲的面積且人手的干擾噪聲只位于圖像最左側,所以在這里本文設置面積閾值area結合位置閾值center.x來除去噪聲干擾,面積閾值area可以除去所有面積小于冰球目標的噪聲,位置閾值center.x是所查找的輪廓中心在像素坐標系中橫坐標的位置.由程序測試知,當面積閾值area大于100,位置閾值center.x大于150的時候,只選中冰球目標.對于冰球的具體位置我們找的是它的球心坐標,而對于快速滑行中的冰球來說,檢測到的冰球目標會是一個橢圓輪廓,其有大部分圓的特性,且其最大外廓直徑與原冰球目標直徑相比基本保持不變,所以這里我們用OpenCV自帶的最小外接圓函數minEnclosingCircle(contours[i],center,radius);去擬合圖像中選中的橢圓輪廓,擬合結果如圖3.

圖3 冰球輪廓最小外接圓
最小外接圓的圓心,即為冰球在像素坐標位置的球心坐標位置,將其圓心和半徑存儲起來,如圖4所示為所檢測到的冰球的位置信息.

圖4 冰球在像素坐標中的位置
冰球滑行過程中會與桌邊產生碰撞,從而改變其原有的運行軌跡,增加了冰球軌跡預測的難度.針對這一問題,采用ANSYS/LS-DYNA顯示非線性動力分析軟件進行仿真模擬[9,10],建立冰球碰撞軌跡預測模型.通過仿真模擬獲得實驗數據,并用MATLAB對獲得的數據進行數據擬合[11],從而得到了一種碰撞函數關系作為冰球碰撞過程的算法.研究主要針對兩種運動狀態:一種是以冰球的運動速度大小為變量,保持碰撞前冰球的運動速度方向與桌邊的夾角不變;另一種是保持冰球的運動速度大小不變,只改變冰球的運動方向與桌邊的夾角.
對于冰球與桌邊碰撞角度不變的運動狀態,通過改變自變量速度的值,來獲得碰撞后冰球的運動狀態,其實驗結果如表1所示.

表1 角度不變,改變速度大小 (單位:m/s)
對于速度大小不變的運動狀態,通過改變冰球與桌邊的碰撞角度,來獲得碰撞后冰球的運動狀態,設定冰球速度恒為0.4 m/s,其實驗結果如表2所示.

表2 速度大小不變,改變角度 (單位:m/s)
如表2中X,Y的數據值所示,所采集的數據中當速度方向沿坐標軸正方向,則速度為正,否則速度為負.Y方向的速度均為負值,表示冰球在Y方向的速度沿Y軸負方向.這里的X、Y坐標軸并不是像素坐標系的坐標軸,而是建立的碰撞仿真模型中的坐標軸.由于研究對象是速度矢量,這里并不影響結果.
為了得到碰撞前后速度之間的關系,分別對X軸方向和Y軸方向的速度分量進行分析.將上述仿真實驗中獲得的碰撞前和碰撞后的速度數據進行擬合[10],從而得到一種簡單的函數關系,作為碰撞模型的碰撞預測算法.通過觀察相關系數(R-square)、和方差(SSE)及均方差(RMSE)的值,來判定該碰撞預測算法的可行性.
如圖5,6所示,分別為以X軸、Y軸方向碰撞前速度Vx、Vy為自變量,以X軸、Y軸方向碰撞后的速度V_x、V_y為因變量,進行數據擬合的顯示圖像.

圖5 X 軸方向速度擬合

圖6 Y 軸方向速
如表3所示,為經過MATLAB擬合的結果,從而得到碰撞算法的函數關系式如下:

表3 X 軸、Y 軸方向速度擬合結果
X軸方向速度函數關系式:

Y軸方向速度函數關系式:

上述(3)、(4)式中Vx和Vy分別表示碰撞前冰球在X軸方向和Y軸方向上的速度,V_x和V_y分別表示碰撞后冰球在X軸方向和Y軸方向上的速度.由于相關系數 (R-square)的正常取值范圍為[0,1],越接近 1,表明模型函數對數據擬合得越好.和方差(SSE)及均方差(RMSE)的值越接近0,說明模型函數擬合的越好,數據預測也越成功.在表3的擬合結果中,上述兩式的相關系數 (R-square)分別為:0.9994 和 0.9998,和方差(SSE)與均方差(RMSE)的值也近乎為0,所以本模型算法的建立能夠很好的預測碰撞后冰球的運動狀態.
本文運用幀間差分結合碰撞算法,使冰球的運行軌跡只與冰球的初始運動狀態有關,算法在處理到前幾幀便可以預測出冰球運行到機器人攻擊點的最終位置,極大地縮短了冰球軌跡的預測時間,使機器人能夠有充足的時間對冰球進行擊打,滿足了機器人實時性的要求.通過采集幾組實際工程中連續幀圖像來驗證本文算法,將預測位置與實際檢測位置的差值P與冰球直徑D作對比,且由于機器人手柄直徑大于冰球直徑,所以若P<D,則機器人能夠擋住并實現對冰球的擊打,以此驗證本文算法切實可行.
實驗中所建立的坐標系為像素坐標系,其整體尺寸為 6 94×370,數值均為像素坐標值[12].由于本文主要解決算法運行速度慢的問題,所以應該盡可能地在檢測到冰球的前幾幀時就能夠預測出冰球到達機器人攻擊范圍內的目標位置 (XL,YL).該目標位置是根據機器人的攻擊范圍合理的設定了一個X方向的閾值XL,本文根據實際情況取XL=500,對于預測目標只需要求出YL的值即可預測到目標位置.本文用幀速表示冰球的速度,通過幀間差分檢測,可以得到冰球在像素坐標中的具體位置I(x,y),冰球在像素坐標中的半徑R,檢測出R=15.
冰球在桌面上運行的軌跡主要分為兩種:一種是不與桌邊發生碰撞的滑行;另一種是滑行過程中與桌邊發生碰撞,改變了其原有的運動軌跡.針對這兩種情況,本文用幀間差分和碰撞算法相結合的方法去進行軌跡預測實驗,其具體算法運行流程圖如圖7所示.
這種情況對冰球軌跡的預測相對來說較為簡單,只需要知道冰球滑行的初始速度就能夠預測出冰球滑行到機器人攻擊范圍內的具體坐標位置 (XL,YL),并提前將這個坐標位置發送給機器人,以實現對運動目標冰球的擊擋.
3.1.1 滑行中無碰撞的軌跡預測算法
如圖8所示,為無碰撞時冰球軌跡預測示意圖.本文用幀差法第一次檢測到冰球位置I1(x1,y1),第二次檢測到冰球位置為I2(x2,y2),則冰球的初始速度為:

圖7 算法運行流程圖

圖8 無碰撞軌跡預測示意圖

其中,Vx為冰球在X方向上的幀速,Vy為冰球在Y方向上的幀速.
對于需要預測的目標位置 (XL,YL)來說,由于XL=500,則冰球從第二次檢測位置運行到該目標位置所需要的時間T為:

由式(8),可以計算出冰球滑行到機器人攻擊范圍內的具體坐標位置(XL,YL).
3.1.2 無碰撞的軌跡預測實驗驗證
如圖9,10為檢測到冰球相鄰兩幀的位置,根據算法判斷此時冰球與桌邊不發生碰撞,其具體滑行軌跡如圖11所示.

圖9 檢測到冰球位置 (一)

圖10 檢測到冰球位置 (二)

圖11 無碰撞時冰球目標軌跡
將圖9,10中所獲得的像素坐標值帶入軌跡預測公式(5)至公式(8),得到預測目標位置為(500,157.727),對比圖12中用幀差法檢測的實際最近目標位置(495,155)(因幀差法限制,檢測不到橫坐標為500的位置,故取其最鄰近位置),由于冰球直徑為D=2R=30>2.727,所以冰球機器人能夠擋住冰球,該預測算法能夠準確預測冰球軌跡.

圖12 檢測到實際目標位置
當冰球與桌邊發生碰撞時,其情況更為復雜.首先要根據檢測到的冰球目標,與桌邊哪一側碰撞,并預測到碰撞點的位置.其次根據碰撞點的位置結合碰撞算法,預測出冰球滑行到機器人攻擊范圍內的具體坐標位置(XL,YL).
3.2.1 滑行中有碰撞的軌跡預測算法
如圖13所示,為冰球軌跡預測示意圖,與無碰撞時一樣先用幀差法測到前幾幀中冰球位置為I1(x1,y1),I2(x2,y2),求出冰球在碰撞前的速度為:

其中,Vx為冰球在X方向上的幀速,Vy為冰球在Y方向上的幀速,帶入式(3)、(4)可以求出碰撞后的速度V_x、V_y的值.并且通過判斷Vy的方向,知曉撞向桌邊的哪一側.

圖13 冰球軌跡預測示意圖
(1)冰球在Y方向上的幀速沿負方向
當冰球在Y方向上的幀速為負值時,Vy沿負方向,冰球從第二次檢測位置到達碰撞點的時間T1為:

到達碰撞點時,冰球的坐標位置為 (x0,y0),其中y0=R,x0為:

冰球從碰撞點到預測目標位置所用的時間為T2,其值為:

由此可以求出冰球到達機器人攻擊范圍內的目標位置(XL,YL),其中XL=500,YL的值則為:

(2)冰球在Y方向上的幀速沿正方向
當冰球在Y方向上的幀速為正值時,Vy沿正方向,冰球從第二次檢測位置到達碰撞點的時間為:



同理可以求出冰球到達機器人攻擊范圍內的目標位置(XL,YL),其中XL=500,YL為:

3.2.2 碰撞軌跡預測實驗驗證
如圖14,15為檢測到的碰撞前冰球相鄰兩幀的位置,根據算法判斷此時冰球與桌邊發生碰撞,其具體滑行軌跡如圖16所示.

圖14 檢測到冰球位置 (一)

圖15 檢測到冰球位置 (二)

圖16 碰撞時冰球目標軌跡
將圖14,15中所獲得的像素坐標值帶入軌跡預測公式 (9)~公式 (1 4),得到預測目標位置為(500,156.693).對比用幀差法檢測到的實際目標位置,如圖17,因為冰球直徑D=2R=30>6.693,所以機器人能夠成功擋住冰球,由此也驗證了本文算法的可行性.

圖17 實際冰球位置
為驗證本文算法的快速性,本文用GetTickCount()函數來記錄系統運行算法的時間,該函數可以返回從算法啟動到結束所經過的毫秒數,精度非常高.如圖18所示,本文算法運行時間為 16 ms<30 ms,完全能夠滿足機器人對目標跟蹤預測算法快速性的要求.

圖18 算法運行時間
本文通過幀間差分法快速找到冰球目標,再結合碰撞算法,對冰球軌跡進行預測.算法僅通過兩次幀間差分,就能夠預測出運動目標的位置信息,滿足了冰球機器人對算法快速性的要求,使冰球機器人能夠成功擋住冰球,并且有充足的時間進行擊打操作.相對于傳統的運動目標跟蹤預測算法,本文算法對于運動目標的跟蹤預測速度更快,實時性更好.對于算法速度要求高的工程性問題,本文算法具有很高的參考價值.