本發(fā)明屬于計算機(jī)應(yīng)用技術(shù)領(lǐng)域,具體涉及一種基于手勢遠(yuǎn)程操控機(jī)器人的系統(tǒng)及其實現(xiàn)方法。
背景技術(shù):
隨著機(jī)器人及其智能化的不斷發(fā)展,人類現(xiàn)代生活越來越離不開智能機(jī)器,很多工作都有了機(jī)器人的參與。機(jī)器人的控制方法有很多,本文將目前的探測機(jī)器人的控制方式以有限與無線的方法分為兩種,并以無線為主要發(fā)展方向。而無線控制又多以手柄、鼠標(biāo)或計算機(jī)直接控制,不僅在探險救災(zāi)等緊急情況下不方便操作,而且還會降低機(jī)器人的靈動性。
技術(shù)實現(xiàn)要素:
:
本發(fā)明針對現(xiàn)有技術(shù)的不足,提供一種基于手勢遠(yuǎn)程控制機(jī)器人的系統(tǒng)及方法,并通過六足機(jī)器人來實現(xiàn)。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案如下
一種基于手勢遠(yuǎn)程控制機(jī)器人的系統(tǒng),包括兩個攝像頭、本地網(wǎng)絡(luò)終端、遠(yuǎn)程網(wǎng)絡(luò)終端、六足機(jī)器人。
一個攝像頭安裝在本地,用于采集手勢指令數(shù)據(jù),另一個攝像頭安裝在六足機(jī)器人上,用于實時采集并反饋六足機(jī)器人的所處環(huán)境;本地網(wǎng)絡(luò)終端用于數(shù)據(jù)處理和傳輸,當(dāng)本地網(wǎng)絡(luò)終端接收到手勢指令時,對手勢指令進(jìn)行解析處理,并將解析結(jié)果遠(yuǎn)程無線發(fā)送給六足機(jī)器人;遠(yuǎn)程網(wǎng)絡(luò)終端用于數(shù)據(jù)接收和傳輸,接收來自本地網(wǎng)絡(luò)終端的解析結(jié)果,并通過解析結(jié)果對六足機(jī)器人進(jìn)行控制。
所述的本地網(wǎng)絡(luò)終端設(shè)置有手勢指令數(shù)據(jù)庫,手勢指令數(shù)據(jù)庫包括靜態(tài)手勢和動態(tài)手勢;
所述的靜態(tài)手勢是指對手勢指令進(jìn)行拍照,通過Opencv的HSV膚色識別標(biāo)記圖中的手勢特征,并對該手勢特征賦予相應(yīng)的手勢指令,然后將該手勢指令存儲在手勢指令數(shù)據(jù)庫中并賦予相應(yīng)的字符,等待匹配;
所述的動態(tài)手勢,首先將動態(tài)手勢指令的視頻流進(jìn)行特征圖像選取,獲得動態(tài)手勢的中心位置,然后通過多張?zhí)卣鲌D像判斷手勢的運動方向,對該動態(tài)手勢賦予相應(yīng)的指令,并將該對應(yīng)的指令存儲在手勢指令數(shù)據(jù)庫中并賦予相應(yīng)的字符,等待匹配;
一種基于手勢遠(yuǎn)程操控機(jī)器人的系統(tǒng)的實現(xiàn)方法,具體包括如下步驟:
步驟1、在本地網(wǎng)絡(luò)終端建立手勢指令數(shù)據(jù)庫,同時在六足機(jī)器人的遠(yuǎn)程網(wǎng)絡(luò)終端設(shè)置手勢指令對應(yīng)的動作指令數(shù)據(jù)庫。
手勢指令包括靜態(tài)手勢和動態(tài)手勢;所述的靜態(tài)手勢是指對手勢指令進(jìn)行拍照,通過Opencv的HSV膚色識別標(biāo)記圖中的手勢特征,并對該手勢特征賦予相應(yīng)的手勢指令,然后將該手勢指令存儲在手勢指令數(shù)據(jù)庫中并賦予相應(yīng)的字符,等待匹配;
所述的動態(tài)手勢,首先將動態(tài)手勢指令的視頻流進(jìn)行特征圖像選取,獲得動態(tài)手勢的中心位置,然后通過多張?zhí)卣鲌D像判斷手勢的運動方向,對該動態(tài)手勢賦予相應(yīng)的指令,并將該對應(yīng)的指令存儲在手勢指令數(shù)據(jù)庫中并賦予相應(yīng)的字符,等待匹配;
所述的動作指令數(shù)據(jù)庫,是指對六足機(jī)器人的十八個舵機(jī)一一進(jìn)行角度調(diào)整,形成相應(yīng)的運動順序,達(dá)到所預(yù)想的動作,并將該對應(yīng)的指令組存儲在動作指令數(shù)據(jù)庫中并賦予相應(yīng)的字符,等待匹配。
步驟2、對采集到的手勢指令進(jìn)行解析
2-1.在本地網(wǎng)絡(luò)終端設(shè)置攝像頭,用于采集手勢;
2-2.對采集到的手勢進(jìn)行分析,從而與數(shù)據(jù)庫中的手勢指令進(jìn)行匹配,具體如下;
2-2-1.對采集到的視頻流進(jìn)行減幀處理,對模糊圖片進(jìn)行逆濾波處理,得到手勢特征明顯的圖片;
2-2-2.通過Opencv的HSV膚色識別,對獲取的圖像進(jìn)行中值濾波等預(yù)處理,并把圖像轉(zhuǎn)換成HSV色彩空間,根據(jù)膚色在HSV空間的分布情況進(jìn)行篩選,得到比較干凈的帶手勢區(qū)域的二值圖像,從而確定從收集到的視頻流中確定的手勢模型。
2-2-3.得到視頻流中的手勢后,通過matchShapes()函數(shù)比較實時獲取的圖像與本地網(wǎng)絡(luò)終端的手勢指令數(shù)據(jù)庫中輪廓的相似值,從而達(dá)到匹配的 效果。
如若匹配不成功,即本地網(wǎng)絡(luò)終端的手勢指令數(shù)據(jù)庫中無此靜態(tài)手勢,則進(jìn)行動態(tài)手勢匹配,方法如下:
首先,利用Opencv中的函數(shù)boundingRect()來對剛才匹配失敗的圖片中的手勢點集進(jìn)行包含,使得形成一個最合適的正向矩形框把當(dāng)前指定的手勢點集都框住,從而得到外接矩形并通過函數(shù)rectangle()在圖像上繪制矩形。
然后,對得到的手勢區(qū)域進(jìn)行輪廓檢測,通過數(shù)學(xué)形態(tài)學(xué)中的腐蝕操作獲取手勢區(qū)域中心位置點。由于手掌作為手勢表觀的主要組成部分,在手勢區(qū)域中它占有最大的面積而且點較為集中。通過連續(xù)的腐蝕操作,可以消除手勢區(qū)域的邊界點,使手勢區(qū)域逐步縮小,最終得到手勢區(qū)域的中心位置點O。
最后,通過對多幀圖片的中心位置點O進(jìn)行位置對比從而判斷手勢的運動方向,根據(jù)運動方向與動作指令數(shù)據(jù)庫進(jìn)行匹配匹配的效果。
步驟3、將匹配成功的手勢指令發(fā)送給六足機(jī)器人
在確定好手勢后,根據(jù)手勢識別結(jié)果中的相應(yīng)字符,建立socket通信,遵循TCP/IP協(xié)議簇把字符發(fā)送到機(jī)器人控制板上,即遠(yuǎn)程網(wǎng)絡(luò)終端。
步驟4、在遠(yuǎn)程網(wǎng)絡(luò)終端將接收到的字符后與動作指令數(shù)據(jù)庫進(jìn)行匹配,然后調(diào)用相應(yīng)的動作組控制六足機(jī)器人執(zhí)行。
本發(fā)明有益效果如下:
本發(fā)明以手勢識別和無線傳輸為基礎(chǔ),用以組成未來勘測或搶險救災(zāi)的機(jī)器人無線控制系統(tǒng)的雛形,在及其危險或緊急的情況下,免去找控制器或架設(shè)控制系統(tǒng)設(shè)備的麻煩,解放人的雙手并使人類對機(jī)器人的控制更加便利。
具體實施方式
下面對本發(fā)明作進(jìn)一步說明。
一種基于手勢遠(yuǎn)程控制機(jī)器人的系統(tǒng),包括兩個攝像頭、本地網(wǎng)絡(luò)終端、遠(yuǎn)程網(wǎng)絡(luò)終端、六足機(jī)器人。
一個攝像頭安裝在本地,用于采集手勢指令數(shù)據(jù),另一個攝像頭安裝在六足機(jī)器人上,用于實時采集并反饋六足機(jī)器人的所處環(huán)境;本地網(wǎng)絡(luò)終端用于數(shù)據(jù)處理和傳輸,當(dāng)本地網(wǎng)絡(luò)終端接收到手勢指令時,對手勢指令進(jìn)行解析處理,并將解析結(jié)果遠(yuǎn)程無線發(fā)送給六足機(jī)器人;遠(yuǎn)程網(wǎng)絡(luò)終端用于數(shù) 據(jù)接收和傳輸,接收來自本地網(wǎng)絡(luò)終端的解析結(jié)果,并通過解析結(jié)果對六足機(jī)器人進(jìn)行控制。
所述的本地網(wǎng)絡(luò)終端設(shè)置有手勢指令數(shù)據(jù)庫,手勢指令數(shù)據(jù)庫包括靜態(tài)手勢和動態(tài)手勢;
所述的靜態(tài)手勢是指對手勢指令進(jìn)行拍照,通過Opencv的HSV膚色識別標(biāo)記圖中的手勢特征,并對該手勢特征賦予相應(yīng)的手勢指令,然后將該手勢指令存儲在手勢指令數(shù)據(jù)庫中并賦予相應(yīng)的字符,等待匹配;
所述的動態(tài)手勢,首先將動態(tài)手勢指令的視頻流進(jìn)行特征圖像選取,獲得動態(tài)手勢的中心位置,然后通過多張?zhí)卣鲌D像判斷手勢的運動方向,對該動態(tài)手勢賦予相應(yīng)的指令,并將該對應(yīng)的指令存儲在手勢指令數(shù)據(jù)庫中并賦予相應(yīng)的字符,等待匹配;
一種基于手勢遠(yuǎn)程操控機(jī)器人的系統(tǒng)的實現(xiàn)方法,具體包括如下步驟:
步驟1、在本地網(wǎng)絡(luò)終端建立手勢指令數(shù)據(jù)庫,同時在六足機(jī)器人的遠(yuǎn)程網(wǎng)絡(luò)終端設(shè)置手勢指令對應(yīng)的動作指令數(shù)據(jù)庫。
手勢指令包括靜態(tài)手勢和動態(tài)手勢;所述的靜態(tài)手勢是指對手勢指令進(jìn)行拍照,通過Opencv的HSV膚色識別標(biāo)記圖中的手勢特征,并對該手勢特征賦予相應(yīng)的手勢指令,然后將該手勢指令存儲在手勢指令數(shù)據(jù)庫中并賦予相應(yīng)的字符,等待匹配;
所述的動態(tài)手勢,首先將動態(tài)手勢指令的視頻流進(jìn)行特征圖像選取,獲得動態(tài)手勢的中心位置,然后通過多張?zhí)卣鲌D像判斷手勢的運動方向,對該動態(tài)手勢賦予相應(yīng)的指令,并將該對應(yīng)的指令存儲在手勢指令數(shù)據(jù)庫中并賦予相應(yīng)的字符,等待匹配;
所述的動作指令數(shù)據(jù)庫,是指對六足機(jī)器人的十八個舵機(jī)一一進(jìn)行角度調(diào)整,形成相應(yīng)的運動順序,達(dá)到所預(yù)想的動作,并將該對應(yīng)的指令組存儲在動作指令數(shù)據(jù)庫中并賦予相應(yīng)的字符,等待匹配。
步驟2、對采集到的手勢指令進(jìn)行解析
2-1.在本地網(wǎng)絡(luò)終端設(shè)置攝像頭,用于采集手勢;
2-2.對采集到的手勢進(jìn)行分析,從而與數(shù)據(jù)庫中的手勢指令進(jìn)行匹配,具體如下;
2-2-1.對采集到的視頻流進(jìn)行減幀處理,對模糊圖片進(jìn)行逆濾波處理,得 到手勢特征明顯的圖片;
2-2-2.通過Opencv的HSV膚色識別,對獲取的圖像進(jìn)行中值濾波等預(yù)處理,并把圖像轉(zhuǎn)換成HSV色彩空間,根據(jù)膚色在HSV空間的分布情況進(jìn)行篩選,得到比較干凈的帶手勢區(qū)域的二值圖像,從而確定從收集到的視頻流中確定的手勢模型。
2-2-3.得到視頻流中的手勢后,通過matchShapes()函數(shù)比較實時獲取的圖像與本地網(wǎng)絡(luò)終端的手勢指令數(shù)據(jù)庫中輪廓的相似值,從而達(dá)到匹配的效果。
如若匹配不成功,即本地網(wǎng)絡(luò)終端的手勢指令數(shù)據(jù)庫中無此靜態(tài)手勢,則進(jìn)行動態(tài)手勢匹配,方法如下:
首先,利用Opencv中的函數(shù)boundingRect()來對剛才匹配失敗的圖片中的手勢點集進(jìn)行包含,使得形成一個最合適的正向矩形框把當(dāng)前指定的手勢點集都框住,從而得到外接矩形并通過函數(shù)rectangle()在圖像上繪制矩形。
然后,對得到的手勢區(qū)域進(jìn)行輪廓檢測,通過數(shù)學(xué)形態(tài)學(xué)中的腐蝕操作獲取手勢區(qū)域中心位置點。由于手掌作為手勢表觀的主要組成部分,在手勢區(qū)域中它占有最大的面積而且點較為集中。通過連續(xù)的腐蝕操作,可以消除手勢區(qū)域的邊界點,使手勢區(qū)域逐步縮小,最終得到手勢區(qū)域的中心位置點O。
最后,通過對多幀圖片的中心位置點O進(jìn)行位置對比從而判斷手勢的運動方向,根據(jù)運動方向與動作指令數(shù)據(jù)庫進(jìn)行匹配匹配的效果。
步驟3、將匹配成功的手勢指令發(fā)送給六足機(jī)器人
在確定好手勢后,根據(jù)手勢識別結(jié)果中的相應(yīng)字符,建立socket通信,遵循TCP/IP協(xié)議簇把字符發(fā)送到機(jī)器人控制板上,即遠(yuǎn)程網(wǎng)絡(luò)終端。
步驟4、在遠(yuǎn)程網(wǎng)絡(luò)終端將接收到的字符后與動作指令數(shù)據(jù)庫進(jìn)行匹配,然后調(diào)用相應(yīng)的動作組控制六足機(jī)器人執(zhí)行。
所述的步驟2中對采集到的手勢指令進(jìn)行解析,針對靜態(tài)手勢具體情況如下:
首先,通過Opencv的HSV膚色識別,對獲取的圖像進(jìn)行中值濾波等預(yù)處理,并把圖像轉(zhuǎn)換成HSV色彩空間,根據(jù)膚色在hsv空間的分布情況進(jìn)行篩選,得到比較干凈的帶手勢區(qū)域的二值圖像,從而確定從收集到的視頻流 中確定的手勢模型。其中,H參數(shù)表示色彩信息,即所處的光譜顏色的位置。該參數(shù)用一角度量來表示,紅、綠、藍(lán)分別相隔120度?;パa(bǔ)色分別相差180度。純度S為一比例值,范圍從0到1,它表示成所選顏色的純度和該顏色最大的純度之間的比率。S=0時,只有灰度。V表示色彩的明亮程度,范圍從0到1。有一點要注意:它和光強(qiáng)度之間并沒有直接的聯(lián)系。
RGB轉(zhuǎn)化到HSV的部分算法
max=max(R,G,B)
min=min(R,G,B)
if R=max,H=(G-B)/(max-min)
if G=max,H=2+(B-R)/(max-min)
if B=max,H=4+(R-G)/(max-min)
H=H*60
if H<0,H=H+360
V=max(R,G,B)
S=(max-min)/max
HSV轉(zhuǎn)化到RGB的部分算法
if s=0
R=G=B=V
else
H/=60;
i=INTEGER(H)
f=H-i
a=V*(1-s)
b=V*(1-s*f)
c=V*(1-s*(1-f))
switch(i)
case 0:R=V;G=c;B=a;
case 1:R=b;G=v;B=a;
case 2:R=a;G=v;B=c;
case 3:R=a;G=b;B=v;
case 4:R=c;G=a;B=v;
case 5:R=v;G=a;B=b;
其次,得到視頻流中的手勢后,通過matchShapes()函數(shù)比較實時獲取的圖像與模板庫中輪廓的相似值,從而達(dá)到匹配的效果。其中的matchShapes函數(shù)的作用是比較兩個形狀的相似度
double MatchShapes(
const void*object1,
const void*object2,
int method,
double parameter=0
);
所述的步驟2中對采集到的手勢指令進(jìn)行解析,針對動態(tài)手勢具體情況如下:
(1)通過Opencv的HSV膚色識別,確定從收集到的視頻流中手勢的大概區(qū)域,方法同靜態(tài)手勢相同。
(2)利用Opencv中的函數(shù)boundingRect()來對指定的手勢點集進(jìn)行包含,使得形成一個最合適的正向矩形框把當(dāng)前指定的手勢點集都框住,從而得到外接矩形并通過函數(shù)rectangle()在圖像上繪制矩形,得到手勢區(qū)域后進(jìn)行輪廓檢測,用到函數(shù)findContours(
InputOutputArray image,
OutputArrayOfArrays contours,
OutputArray hierarchy,
int mode,
int method,
Point offset=Point());
第一步、mode取值“CV_RETR_EXTERNAL”,method取值“CV_CHAIN_APPROX_NONE”,即只檢測最外層輪廓,并且保存輪廓上所有點。(只有最外層的輪廓被檢測到,內(nèi)層的輪廓被忽略)
第二步、mode取值“CV_RETR_LIST”,method取值“CV_CHAIN_APPROX_SIMPLE”,即檢測所有輪廓,但各輪廓之間彼此獨立, 不建立等級關(guān)系,并且僅保存輪廓上拐點信息:
contours向量中所有的拐點信息得到了保留,但是拐點與拐點之間直線段的部分省略掉了。
第三步、mode取值“CV_RETR_TREE”,method取值“CV_CHAIN_APPROX_NONE”,即檢測所有輪廓,輪廓間建立外層、內(nèi)層的等級關(guān)系,并且保存輪廓上所有點。(所有內(nèi)外層輪廓都被檢測到,contours點集組成的圖形跟輪廓表現(xiàn)一致)
第四步、Point()偏移量設(shè)置
這個偏移量的設(shè)置不能過大或過小(負(fù)方向上的過小),若圖像上任一點加上該偏移量后超出圖像邊界,程序會內(nèi)存溢出報錯。
drawContours中最后一個參數(shù)是一個Point類型的offset,這個offset跟findContours函數(shù)中的offset含義一致,設(shè)置之后所繪制的輪廓是原始輪廓上所有像素點加上該偏移量offset后的效果。
當(dāng)所分析圖像是另外一個圖像的ROI的時候,通過加減offset這個偏移量,就可以把ROI圖像的檢測結(jié)果投影到原始圖像對應(yīng)位置上。
此時已經(jīng)根據(jù)手勢輪廓的面積和輪廓長度的閾值消除未去除干凈的噪音輪廓,再用函數(shù)boundingRect()返回的參數(shù)計算矩形的中心位置。
(3)通過數(shù)學(xué)形態(tài)學(xué)中的腐蝕操作獲取手勢區(qū)域中心位置點。由于手掌作為手勢表觀的主要組成部分,在手勢區(qū)域中它占有最大的面積而且點較為集中。通過連續(xù)的腐蝕操作,可以消除手勢區(qū)域的邊界點,使手勢區(qū)域逐步縮小,最終得到手勢區(qū)域的中心位置點C0。
計算出中心點與手勢區(qū)域邊緣的最大距離值l,對距離進(jìn)行10等分,以d=l/10。以手勢區(qū)域中心點為圓心做出圓軌跡,圓半徑從d開始到l,每次遞加值為d,得到10個圓軌跡線。
按順時針方向記錄每條圓軌跡線上像素值變化點Pij(0~1,即從黑色區(qū)域到白色區(qū)域)和Qij(1~0,即從白色區(qū)域到黑色區(qū)域)的位置坐標(biāo)值,i表示軌跡圓的編號,j表示同一軌跡圓上P或者Q點編號,同時刪除單獨存在的Pij點和Qij點。
通過Pij和Qij的位置坐標(biāo),計算每對Pij和Qij之間的距離Dij,當(dāng)軌跡圓與指尖部分區(qū)域相截時獲得較小的Dij,不能表現(xiàn)手指的實際寬度值, 所以當(dāng)Dij小于閾值δ時,刪除對應(yīng)的Pij和Qij點,根據(jù)經(jīng)驗設(shè)置閾值為δ=d/4。
每個軌跡圓上獲得的j最大值,為與手掌相連分支數(shù)量總和N=max(j)。由于分支中包含手指和手腕分支,則手指數(shù)量是Nf=N-1。
由每個分支的平均值計算得到分支的平均寬度Wj=Dij。在手形上可知手腕寬度大于手指,在分支中手腕對應(yīng)于最大寬度的分支。由除手腕分支外的其他分支在各自截取的最大軌跡圓上取Pij和Qij的中點與中心位置點C0連線,得到指間夾角Aj-1。
通過比較多幀圖像的中心位置點和指間夾角從而判斷手勢的運動方向,并將發(fā)送相應(yīng)的指令給機(jī)器人。
本發(fā)明的傳輸為無線傳輸,在確定好手勢后,根據(jù)手勢識別結(jié)果匹配相應(yīng)的字符,建立socket通信,遵循TCP/IP協(xié)議簇把字符發(fā)送到機(jī)器人控制板上,即遠(yuǎn)程網(wǎng)絡(luò)終端。
本發(fā)明步驟4中所述的調(diào)用相應(yīng)的動作組控制六足機(jī)器人執(zhí)行,具體的執(zhí)行過程如下:
將六足機(jī)器人的六條腿分別分為兩組,其中腿1、3、5為一組,腿2、4、6為一組。前進(jìn)時,腿2、4、6作為擺動腿抬起,為保持平衡,機(jī)器人的重心與腿1、3、5形成的三角形的重心重合,此時,1、3、5腿為站立腿來支撐整個機(jī)體;擺動腿向前跨步;此時,作為站立腿的1、3、5一面起到支撐整個機(jī)體的作用,一面通過直流驅(qū)動電機(jī)和皮帶傳動機(jī)構(gòu)來驅(qū)動機(jī)體向前移動一個步長s;當(dāng)機(jī)器人移動完成后,腿2、4、6落地作為站立腿來支撐機(jī)體,機(jī)器人的機(jī)體重心落在這三條腿構(gòu)成的三角形的穩(wěn)定區(qū)域內(nèi),此時的1、3、5腿作為擺動腿抬起,準(zhǔn)備做跨步運動,腿2、4、6作為支撐腿來支撐整個機(jī)體,此時機(jī)器人的重心落在支撐腿構(gòu)成的三角形的穩(wěn)定區(qū)域內(nèi),來保證機(jī)器人能夠穩(wěn)定地站立;擺動腿1、3、5向前跨出一步;2、4、6腿作為站立腿一面支撐機(jī)體使其能夠穩(wěn)定地站立,一面驅(qū)動機(jī)體向前移動一個步長s。因此,a—b—c—d—e—f為機(jī)器人的一個運動周期,機(jī)器人向前移動就是循環(huán)往復(fù)從a到f的過程。