基于Kinect传感器的四旋翼无人机控制方法与流程

文档序号:12361387阅读:来源:国知局

技术特征:

1.一种基于Kinect传感器的四旋翼无人机控制方法,其特征在于包括以下步骤:

步骤一、获取人体关节点的数据:通过处理景深数据及骨骼数据来建立人体各个关节的坐标,这些关节点的位置定义了一个姿势;采用矩阵复合变换处理人体关节点的数据,相对于任意点C=[Cx,Cy]通过三个步骤进行比例变换;首先进行平移,即将变换物移动到坐标系的原点;然后进行比例变换,即按比例进行放大或缩小;最后再进行平移,即将变换物移回原位;比例变换将平面上任意一点的横坐标放大或缩小s11倍,纵坐标放大或缩小s22倍,即x1=s11×x、y1=s22×y,用矩阵表示为整个过程的复合变换表示为:

<mfenced open = "" close = ""> <mtable> <mtr> <mtd> <mrow> <mi>T</mi> <mo>=</mo> <msub> <mi>T</mi> <mn>1</mn> </msub> <mo>&CenterDot;</mo> <msub> <mi>T</mi> <mn>2</mn> </msub> <mo>&CenterDot;</mo> <msub> <mi>T</mi> <mn>3</mn> </msub> <mo>=</mo> <mfenced open = "|" close = "|"> <mtable> <mtr> <mtd> <mn>1</mn> </mtd> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mrow> <mo>-</mo> <msub> <mi>C</mi> <mi>X</mi> </msub> </mrow> </mtd> <mtd> <mrow> <mo>-</mo> <msub> <mi>C</mi> <mi>Y</mi> </msub> </mrow> </mtd> <mtd> <mn>1</mn> </mtd> </mtr> </mtable> </mfenced> <mo>&CenterDot;</mo> <mfenced open = "|" close = "|"> <mtable> <mtr> <mtd> <msub> <mi>s</mi> <mn>11</mn> </msub> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <msub> <mi>s</mi> <mn>22</mn> </msub> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>1</mn> </mtd> </mtr> </mtable> </mfenced> <mo>&CenterDot;</mo> <mfenced open = "|" close = "|"> <mtable> <mtr> <mtd> <mn>1</mn> </mtd> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <msub> <mi>C</mi> <mi>x</mi> </msub> </mtd> <mtd> <msub> <mi>C</mi> <mi>y</mi> </msub> </mtd> <mtd> <mn>1</mn> </mtd> </mtr> </mtable> </mfenced> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mo>=</mo> <mfenced open = "|" close = "|"> <mtable> <mtr> <mtd> <msub> <mi>s</mi> <mn>11</mn> </msub> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <msub> <mi>s</mi> <mn>22</mn> </msub> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mrow> <msub> <mi>C</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <msub> <mi>s</mi> <mn>11</mn> </msub> <mo>)</mo> </mrow> </mrow> </mtd> <mtd> <mrow> <msub> <mi>C</mi> <mi>y</mi> </msub> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <msub> <mi>s</mi> <mn>22</mn> </msub> <mo>)</mo> </mrow> </mrow> </mtd> <mtd> <mn>1</mn> </mtd> </mtr> </mtable> </mfenced> </mrow> </mtd> </mtr> </mtable> </mfenced>

步骤二、从步骤一处理得到的像素矩阵中重新划分像素区域,某个像素点的坐标为(xi,yi),共有n个像素点;用公式

<mrow> <mo>(</mo> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>,</mo> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>)</mo> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <mo>(</mo> <msub> <mi>x</mi> <mi>i</mi> </msub> <mo>,</mo> <msub> <mi>y</mi> <mi>i</mi> </msub> <mo>)</mo> <mo>/</mo> <mi>n</mi> </mrow>

计算运动区域的几何中心作为操作者的特征点;使用Canny算子进行平滑再求导进行边缘检测,将从步骤一得到的边缘轮廓点集表示为(X,Y)={(xi,yi)|i=1,2,3…},

选用高斯平滑函数平滑图像f(x,y),平滑后图像g(x,y)=h(x,y,σ)*f(x,y);使用一阶有限差分计算偏导数阵列P和Q,已平滑的图像g(x,y)的梯度使用一个2×2一阶有限差分近似式计算x与y偏导数的两个阵列

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

幅值和方位角通过直角坐标转化到极坐标公式计算得到;

步骤三、使用最小二乘法对步骤二得到的圆形区域的边缘轮廓点集拟合以减小误差,点(xi,yi)处的误差为δi,圆的标准方程(x-a)2+(y-b)2=r2,(a,b)为圆心坐标,r为半径;整理圆的标准方程得到x2+y2-2ax-2by+a2+b2-r2=0,此方程中令-2a=D,-2b=E,a2+b2-r2=F,得到x2+y2+Dx+Ey+F=0;误差满足对误差求平方和,得到:

<mrow> <mi>J</mi> <mrow> <mo>(</mo> <mi>D</mi> <mo>,</mo> <mi>E</mi> <mo>,</mo> <mi>F</mi> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mrow> <mi>i</mi> <mo>=</mo> <mi>n</mi> </mrow> </munderover> <msubsup> <mi>&delta;</mi> <mi>i</mi> <mn>2</mn> </msubsup> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mrow> <mi>i</mi> <mo>=</mo> <mi>n</mi> </mrow> </munderover> <msup> <mrow> <mo>(</mo> <msubsup> <mi>x</mi> <mi>i</mi> <mn>2</mn> </msubsup> <mo>+</mo> <msubsup> <mi>y</mi> <mi>i</mi> <mn>2</mn> </msubsup> <mo>+</mo> <mi>D</mi> <mi>x</mi> <mo>+</mo> <mi>E</mi> <mi>y</mi> <mo>+</mo> <mi>F</mi> <mo>)</mo> </mrow> <mn>2</mn> </msup> </mrow>

最小二乘拟合通过函数求极值来解J(D,E,F)最小时的各参数值

<mrow> <mfrac> <mrow> <mo>&part;</mo> <mi>J</mi> <mrow> <mo>(</mo> <mi>D</mi> <mo>,</mo> <mi>E</mi> <mo>,</mo> <mi>F</mi> <mo>)</mo> </mrow> </mrow> <mrow> <mo>&part;</mo> <mi>D</mi> </mrow> </mfrac> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mrow> <mi>i</mi> <mo>=</mo> <mi>n</mi> </mrow> </munderover> <mn>2</mn> <mo>&CenterDot;</mo> <mrow> <mo>(</mo> <msubsup> <mi>x</mi> <mi>i</mi> <mn>2</mn> </msubsup> <mo>+</mo> <msubsup> <mi>y</mi> <mi>i</mi> <mn>2</mn> </msubsup> <mo>+</mo> <mi>D</mi> <mi>x</mi> <mo>+</mo> <mi>E</mi> <mi>y</mi> <mo>+</mo> <mi>F</mi> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <msub> <mi>x</mi> <mi>i</mi> </msub> <mo>=</mo> <mn>0</mn> </mrow>

<mrow> <mfrac> <mrow> <mo>&part;</mo> <mi>J</mi> <mrow> <mo>(</mo> <mi>D</mi> <mo>,</mo> <mi>E</mi> <mo>,</mo> <mi>F</mi> <mo>)</mo> </mrow> </mrow> <mrow> <mo>&part;</mo> <mi>E</mi> </mrow> </mfrac> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mrow> <mi>i</mi> <mo>=</mo> <mi>n</mi> </mrow> </munderover> <mn>2</mn> <mo>&CenterDot;</mo> <mrow> <mo>(</mo> <msubsup> <mi>x</mi> <mi>i</mi> <mn>2</mn> </msubsup> <mo>+</mo> <msubsup> <mi>y</mi> <mi>i</mi> <mn>2</mn> </msubsup> <mo>+</mo> <mi>D</mi> <mi>x</mi> <mo>+</mo> <mi>E</mi> <mi>y</mi> <mo>+</mo> <mi>F</mi> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <msub> <mi>y</mi> <mi>i</mi> </msub> <mo>=</mo> <mn>0</mn> </mrow>

<mrow> <mfrac> <mrow> <mo>&part;</mo> <mi>J</mi> <mrow> <mo>(</mo> <mi>D</mi> <mo>,</mo> <mi>E</mi> <mo>,</mo> <mi>F</mi> <mo>)</mo> </mrow> </mrow> <mrow> <mo>&part;</mo> <mi>F</mi> </mrow> </mfrac> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mrow> <mi>i</mi> <mo>=</mo> <mi>n</mi> </mrow> </munderover> <mn>2</mn> <mrow> <mo>(</mo> <msubsup> <mi>x</mi> <mi>i</mi> <mn>2</mn> </msubsup> <mo>+</mo> <msubsup> <mi>y</mi> <mi>i</mi> <mn>2</mn> </msubsup> <mo>+</mo> <mi>D</mi> <mi>x</mi> <mo>+</mo> <mi>E</mi> <mi>y</mi> <mo>+</mo> <mi>F</mi> <mo>)</mo> </mrow> <mo>=</mo> <mn>0</mn> </mrow>

当D,E,F同时满足上述三式,取到J(D,E,F)最小值;把得到的边缘轮廓点集带入上述三式,求得圆的半径及圆心坐标值,该坐标值代表操作者位置;

步骤四、将步骤一、步骤二获取到的骨骼数据绘制到UI界面上:采用基于事件的方式访问骨骼数据、彩色影像数据和景深数据;获取的每一帧数据都是一个骨骼对象集合,每一个骨骼对象包含有描述骨骼位置以及骨骼关节的数,定义的每一个关节拥有一个唯一标识符;在整个应用程序中一次性的为获取的每一帧骨骼数据分配内存,并在程序中定义一个能够追踪到骨骼最大个数的常量,使其方便的对获取的每一帧数组初始化;之后在UI界面通过关节点将骨骼连接起来,用一条直线代表一根骨骼,这样便在应用程序界面上输出了骨骼图像;

步骤五、确定操作者的逻辑实现,定义不同的姿势动作:提取UI界面上的骨骼连线数据,同时移动手,能够看到手部骨骼节点会跟着移动;接着取三个节点构成一个三角形,使用余弦定理对各个节点之间的角度进行计算;设定一个阈值角度,循环遍历检测并判断该阈值角度,若超过该阈值角度初始阈值则视为操作者进行了一次动作;根据两个关节点绘制一个三角形,第三个点由这两个关节点来决定;根据每个节点的坐标计算每个边长的值;由余弦定理公式:c2=a2+b2-2ab cos C以及计算出角度;

步骤六、对步骤四捕获确定的不同姿势编码,对应不同的四旋翼无人机飞行控制控制指令:选取五种不同的姿势对应不同的飞控指令,握拳对应四旋翼无人机起飞,飞行控制指令编码为0000;松拳对应四旋翼无人机降落,飞行控制指令编码为0001;左摇头,利用头部与肩部夹角信息控制四旋翼无人机向左平飞,飞行控制指令编码为0010;右摇头,利用头部与肩部夹角信息控制四旋翼无人机右平飞,飞行控制指令编码为0011;双臂平举胸前,利用手臂关节与腰部的夹角信息控制四旋翼无人机向前平飞,飞行控制指令编码为0100;单臂平举胸前,利用手臂关节与腰部的夹角信息控制四旋翼无人机向后平飞,飞行控制指令编码为0101;

步骤七、通过NRF2401使Kinect识别端与四旋翼无人机建立无线连接:NRF2401是单片射频收发芯片,工作于2.4~2.5GHz ISM频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器;使用NRF2401进行无线通信,最远通信距离为一千米,输出功率和通信频道通过所编写的程序进行配置;NRF2401配置参数为16位CRC,主发送从接收模式;允许接收地址只有频道0,频道0自动ACK应答允许,设置信道工作为2.4GHz;设置接收数据长度为4字节,发射速率为1MHz,发射功率为最大值0dB;

步骤八、四旋翼无人机接收体感姿势识别指令编码,执行相应的飞行动作:四旋翼无人机接收到操作者的姿势识别指令后,进行相应的解码;解码后将得到步骤四所述对应的无人机飞行控制指令,四旋翼接收飞行控制指令后将执行自动飞行状态、自动起飞到达预定高度,前、后、左、右四个方向自动平飞五米距离、自动降落动作。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1