1.一種基于Kinect傳感器的四旋翼無人機(jī)控制方法,其特征在于包括以下步驟:
步驟一、獲取人體關(guān)節(jié)點(diǎn)的數(shù)據(jù):通過處理景深數(shù)據(jù)及骨骼數(shù)據(jù)來建立人體各個關(guān)節(jié)的坐標(biāo),這些關(guān)節(jié)點(diǎn)的位置定義了一個姿勢;采用矩陣復(fù)合變換處理人體關(guān)節(jié)點(diǎn)的數(shù)據(jù),相對于任意點(diǎn)C=[Cx,Cy]通過三個步驟進(jìn)行比例變換;首先進(jìn)行平移,即將變換物移動到坐標(biāo)系的原點(diǎn);然后進(jìn)行比例變換,即按比例進(jìn)行放大或縮??;最后再進(jìn)行平移,即將變換物移回原位;比例變換將平面上任意一點(diǎn)的橫坐標(biāo)放大或縮小s11倍,縱坐標(biāo)放大或縮小s22倍,即x1=s11×x、y1=s22×y,用矩陣表示為整個過程的復(fù)合變換表示為:
步驟二、從步驟一處理得到的像素矩陣中重新劃分像素區(qū)域,某個像素點(diǎn)的坐標(biāo)為(xi,yi),共有n個像素點(diǎn);用公式
計算運(yùn)動區(qū)域的幾何中心作為操作者的特征點(diǎn);使用Canny算子進(jìn)行平滑再求導(dǎo)進(jìn)行邊緣檢測,將從步驟一得到的邊緣輪廓點(diǎn)集表示為(X,Y)={(xi,yi)|i=1,2,3…},
選用高斯平滑函數(shù)平滑圖像f(x,y),平滑后圖像g(x,y)=h(x,y,σ)*f(x,y);使用一階有限差分計算偏導(dǎo)數(shù)陣列P和Q,已平滑的圖像g(x,y)的梯度使用一個2×2一階有限差分近似式計算x與y偏導(dǎo)數(shù)的兩個陣列
fx′(x,y)≈Gx=[f(x+1,y)-f(x,y)+f(x+1,y+1)-f(x,y+1)]/2
fy′(x,y)≈Gy=[f(x,y+1)-f(x,y)+f(x+1,y+1)-f(x+1,y)]/2
幅值和方位角通過直角坐標(biāo)轉(zhuǎn)化到極坐標(biāo)公式計算得到;
步驟三、使用最小二乘法對步驟二得到的圓形區(qū)域的邊緣輪廓點(diǎn)集擬合以減小誤差,點(diǎn)(xi,yi)處的誤差為δi,圓的標(biāo)準(zhǔn)方程(x-a)2+(y-b)2=r2,(a,b)為圓心坐標(biāo),r為半徑;整理圓的標(biāo)準(zhǔn)方程得到x2+y2-2ax-2by+a2+b2-r2=0,此方程中令-2a=D,-2b=E,a2+b2-r2=F,得到x2+y2+Dx+Ey+F=0;誤差滿足對誤差求平方和,得到:
最小二乘擬合通過函數(shù)求極值來解J(D,E,F(xiàn))最小時的各參數(shù)值
當(dāng)D,E,F(xiàn)同時滿足上述三式,取到J(D,E,F(xiàn))最小值;把得到的邊緣輪廓點(diǎn)集帶入上述三式,求得圓的半徑及圓心坐標(biāo)值,該坐標(biāo)值代表操作者位置;
步驟四、將步驟一、步驟二獲取到的骨骼數(shù)據(jù)繪制到UI界面上:采用基于事件的方式訪問骨骼數(shù)據(jù)、彩色影像數(shù)據(jù)和景深數(shù)據(jù);獲取的每一幀數(shù)據(jù)都是一個骨骼對象集合,每一個骨骼對象包含有描述骨骼位置以及骨骼關(guān)節(jié)的數(shù),定義的每一個關(guān)節(jié)擁有一個唯一標(biāo)識符;在整個應(yīng)用程序中一次性的為獲取的每一幀骨骼數(shù)據(jù)分配內(nèi)存,并在程序中定義一個能夠追蹤到骨骼最大個數(shù)的常量,使其方便的對獲取的每一幀數(shù)組初始化;之后在UI界面通過關(guān)節(jié)點(diǎn)將骨骼連接起來,用一條直線代表一根骨骼,這樣便在應(yīng)用程序界面上輸出了骨骼圖像;
步驟五、確定操作者的邏輯實(shí)現(xiàn),定義不同的姿勢動作:提取UI界面上的骨骼連線數(shù)據(jù),同時移動手,能夠看到手部骨骼節(jié)點(diǎn)會跟著移動;接著取三個節(jié)點(diǎn)構(gòu)成一個三角形,使用余弦定理對各個節(jié)點(diǎn)之間的角度進(jìn)行計算;設(shè)定一個閾值角度,循環(huán)遍歷檢測并判斷該閾值角度,若超過該閾值角度初始閾值則視為操作者進(jìn)行了一次動作;根據(jù)兩個關(guān)節(jié)點(diǎn)繪制一個三角形,第三個點(diǎn)由這兩個關(guān)節(jié)點(diǎn)來決定;根據(jù)每個節(jié)點(diǎn)的坐標(biāo)計算每個邊長的值;由余弦定理公式:c2=a2+b2-2ab cos C以及計算出角度;
步驟六、對步驟四捕獲確定的不同姿勢編碼,對應(yīng)不同的四旋翼無人機(jī)飛行控制控制指令:選取五種不同的姿勢對應(yīng)不同的飛控指令,握拳對應(yīng)四旋翼無人機(jī)起飛,飛行控制指令編碼為0000;松拳對應(yīng)四旋翼無人機(jī)降落,飛行控制指令編碼為0001;左搖頭,利用頭部與肩部夾角信息控制四旋翼無人機(jī)向左平飛,飛行控制指令編碼為0010;右搖頭,利用頭部與肩部夾角信息控制四旋翼無人機(jī)右平飛,飛行控制指令編碼為0011;雙臂平舉胸前,利用手臂關(guān)節(jié)與腰部的夾角信息控制四旋翼無人機(jī)向前平飛,飛行控制指令編碼為0100;單臂平舉胸前,利用手臂關(guān)節(jié)與腰部的夾角信息控制四旋翼無人機(jī)向后平飛,飛行控制指令編碼為0101;
步驟七、通過NRF2401使Kinect識別端與四旋翼無人機(jī)建立無線連接:NRF2401是單片射頻收發(fā)芯片,工作于2.4~2.5GHz ISM頻段,芯片內(nèi)置頻率合成器、功率放大器、晶體振蕩器和調(diào)制器;使用NRF2401進(jìn)行無線通信,最遠(yuǎn)通信距離為一千米,輸出功率和通信頻道通過所編寫的程序進(jìn)行配置;NRF2401配置參數(shù)為16位CRC,主發(fā)送從接收模式;允許接收地址只有頻道0,頻道0自動ACK應(yīng)答允許,設(shè)置信道工作為2.4GHz;設(shè)置接收數(shù)據(jù)長度為4字節(jié),發(fā)射速率為1MHz,發(fā)射功率為最大值0dB;
步驟八、四旋翼無人機(jī)接收體感姿勢識別指令編碼,執(zhí)行相應(yīng)的飛行動作:四旋翼無人機(jī)接收到操作者的姿勢識別指令后,進(jìn)行相應(yīng)的解碼;解碼后將得到步驟四所述對應(yīng)的無人機(jī)飛行控制指令,四旋翼接收飛行控制指令后將執(zhí)行自動飛行狀態(tài)、自動起飛到達(dá)預(yù)定高度,前、后、左、右四個方向自動平飛五米距離、自動降落動作。