本发明涉及人机交互技术领域,更具体地,涉及一种基于三维连续动态手势识别的无人机人机交互方法。
背景技术:
手势识别技术是新一代自然人机交互的一项关键技术,相对于传统的鼠标,键盘等接触式的操作方式,手势具有自然直观、容易理解、操作简单、体验性好等优点,更加符合人类日常交流习惯,手势识别已经成为人机交互方案的研究热点。手势作为一门自然、方便的语言,在情感上和实用性上都非常适合用于人机交互。手势识别技术的研究意义在于将手势这种自然且直观的交流方式应用到人机交互的接口技术上,使得人机接口更加接近于人类的使用习惯,进而使得人机交互变得更自然方便。随着机器人控制技术的发展,人与机器人之间的交互活动变得越来越普遍。利用手势来控制机器人可方便地操纵机器人,向机器人发布命令,与机器人进行交互。
手势是指人手产生的各种姿势和动作,广义的手势可分为两种,一种为由连续手部动作组成的动态手势(gesture),另一种为静态的手部姿势(posture)。静态手势识别考虑某个时间点上手势的外形特征,动态手势关注一段时间内手部及手臂的一系列动作,增加了时间信息和动作特征。研究静态手势对于理解分析动态手势具有重要的意义。由于动态手势的识别可以归结为几个静态姿势识别的综合,所以两种手势识别的过程和方法基本一致。但是,动态手势的识别需要考虑时间、空间等因素,即不同因素会造成手势轨迹在时间上的非线性波动,因此,动态手势识别必须考虑如何消除这些波动的影响,比静态手势识别更富有技术挑战性。
旋翼无人机具有成本低廉、可垂直起降、易于操控等优点,在搜索、救援、测绘、农业、航拍等领域具有广阔的应用前景。研究人体与旋翼飞行器之间的人机交互具有良好的应用价值。
技术实现要素:
本发明为克服上述现有技术所述的至少一种缺陷,提供一种基于三维连续动态手势识别的无人机人机交互方法,能够准确识别手势,从而使得用户可以更自由、便捷地控制无人机飞行。
为解决上述技术问题,本发明的技术方案如下:
一种基于三维连续动态手势识别的无人机人机交互方法,所述方法包括以下步骤:
S1:通过Kinect传感器获取人体骨骼跟踪数据,所述人体骨骼跟踪数据至少包括右手、左手、右肘、左肘、右肩和左肩的骨骼点跟踪数据;
S2:提取手势轨迹特征并对其进行预处理,所述预处理包括手势起止检测、平滑滤波处理、重采样和位置归一化;
S3:使用神经网络算法进行手势识别;
S4:将手势识别的结果转化对应成控制指令控制无人机的飞行。
在一种优选的方案中,步骤S1中,通过Kinect传感器获取实时的人体骨骼跟踪数据的具体方法包括以下步骤:
S1.1:通过Kinect传感器获取深度图像;
S1.2:微软提供Kinect SDK从深度图像中获得20个关节骨骼点的三维位置信息和四元数旋转信息;
S1.3:获取右手、左手、右肘、左肘、右肩和左肩的骨骼点跟踪数据,从而定位用户手部位置。
在一种优选的方案中,步骤S2中,提取手势轨迹特征的具体方法为:
S2.1.1:将左手LH、左肘LE、右手RH、右肘RE的骨骼点位置信息三维坐标值(x,y,z)的每一帧分别按顺序排列成一列向量,此时代表动态手势的原始三维轨迹特征为:
其中,表示第n帧深度图的4个骨骼点的特征向量,表示第n帧深度图中左手的x轴坐标;
S2.1.2:定义基准点A(xa,ya,za)为左肩和右肩连线的中心,则基准点A即为左肩节点LS(xLS,yLS,zLS)和右肩节点RS(xRS,yRS,zRS)的中间值;
S2.1.3:计算出基准点A后,釆用左肩和右肩的距离作为标准长度对右手RH、左手LH、右肘RE及左肘LE这4个骨骼点进行归一化处理:
其中,表示第n帧深度图基准点,表示第n帧深度图的左肩,表示第n帧深度图的右肩;
S2.1.4:采用归一化后的骨骼点的空间坐标变化来表示一段手势的特征向量:
其中,表示手势的特征向量,是由按顺序排列组成的列向量,N代表这个序列有N帧深度图。
在一种优选的方案中,步骤S2中,所述手势起止检测包括以下步骤:
S2.2.1:定义手势的运动能量函数E为前后两帧深度图中手部骨骼点的三维位置的变化之和,即左手、左肘、右手、右肘这4个骨骼点的移动距离之和,则手势的运动能量函数为:
E=dLH+dLE+dRH+dRE (8)
S2.2.2:如果连续M帧E的值都大于预设的E的阈值,M≥1,则将第一次检测到E大于该阈值的那一帧作为手势开始的起点;
S2.2.3:当检测到连续M帧E的值都小于预设的E的阈值,则将第一次检测到的E小于该阈值的那一帧作为手势结束的终点,即可从长序列中截取出手势序列。
在一种优选的方案中,步骤S2中,平滑滤波处理、重采样和位置归一化的具体方法包括以下步骤:
S2.3.1:平滑滤波处理:对左手、左肘、右手、右肘这4个骨骼点进行平滑滤波处理,使这4个骨骼点的坐标为对其前后帧的坐标值取均值;
S2.3.2:重采样:对于获得的长短不一的手势序列段,重采样利用均匀线性重采样的方式将所有手势序列进行处理使得两两相邻轨迹点的间隔相等,以消除不同用户做手势的速度差异;
S2.3.3:位置归一化:为了使最终的手势轨迹具有位置不变性,将骨骼点的轨迹序列的每一点均减去初始的轨迹点;
S2.3.4:将左手、右手、左肘及右肘4个骨骼点的手势轨迹分别采用上述的方法进行平滑滤波、重采样与位置归一化的处理,并将经过上述预处理的手势轨迹特征向量作为神经网络算法的输入,其中VLH、VRH、VLE、VRE分别表示左手、右手、左肘和右肘预处理后的轨迹序列。
在一种优选的方案中,步骤S3中,所述神经网络算法采用网络隐藏层神经元数目自适应算法,其具体方法包括以下步骤:
(1)先给定神经网络目标精度为ε=10-5,设定隐藏层神经元数目范围,最小值最大值其中n、m分为为输入节点数和输出节点数,l为搜索窗口的步长,取l=20;
(2)通过计算当隐藏层节点数目分别为min,max时的权值矩阵W和网络最小均方误差MSEmin,MSEmax,判断MSEmin,MSEmax跟ε的大小关系,然后调整min,max的范围直到计算出来的MSEmin,MSEmax的范围包含ε的值;
(3)在确定的[min,max]的范围里面使用二分法找的最先使得MSE≤ε的值,即为所要找到的最小的隐藏层神经元节点数目。
在一种优选的方案中,步骤S4中,右手向左挥动、右手向右挥动,右手向前平推、右手向后收回、画圆、画“S”形手势,分别对应无人机向左飞行、向右飞行、前进、后退、飞圆形、“S”轨迹。
在一种优选的方案中,步骤S4中,设置一对开始交互和结束交互的动作指令,开始交互动作指令表示开始动作,结束交互动作指令表示动作结束。
与现有技术相比,本发明技术方案的有益效果是:本发明公开一种基于三维连续动态手势识别的无人机人机交互方法,通过Kinect传感器获取人体骨骼跟踪数据,所述人体骨骼跟踪数据至少包括右手、左手、右肘、左肘、右肩和左肩的骨骼点跟踪数据;提取手势轨迹特征并对其进行预处理,所述预处理包括手势起止检测、平滑滤波处理、重采样和位置归一化;使用神经网络算法进行手势识别;将手势识别的结果转化对应成控制指令控制无人机的飞行。本发明能够准确识别手势,从而使得用户可以更自由、便捷地控制无人机飞行。
附图说明
图1为MIMO-Chevbyshev神经网络模型图。
图2为网络隐藏层神经元数目自适应算法的流程框图。
图3为无人机、Kinect传感器与电脑的通讯模型图。
图4为利用手势控制无人机系统的控制流程图。
图5为顺时针圆周轨迹分段示意图。
图6为S型轨迹分段示意图。
图7为手势指令控制无人机飞行轨迹交互逻辑框图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;下面结合附图和实施例对本发明的技术方案做进一步的说明。
实施例1
本发明提出的技术方案具体步骤如下:
(一)人体骨骼追踪与手势轨迹特征提取及其预处理
1、人体骨骼追踪
微软Kinect传感器可识别获得人体的骨骼信息。微软提供的Kinect SDK可以追踪识别人体,从单帧深度图像中获得20个关节骨骼点的三维位置信息和四元数旋转信息。本发明基于Kinect SDK获得的运动关键骨骼点的数据建立动态手势的运动轨迹特征描述子,并利用Kinect SDK来跟踪人体关节点,从而定位用户手部位置。
2、手势轨迹特征提取及其预处理
提取手势轨迹特征
由于手势识别的运动集中在手部,我们需要6个骨骼点用于本发明中运动手势的描述子建立,分别是:右手(RH)、左手(LH)、右肘(RE)、左肘(LE)、右肩(RS)、左肩(LS)。将肩部的骨骼点用于标准化校准,由此将手和肘作为联合特征用于动态手势轨迹的特征向量,将左手、左肘、右手、右肘的骨骼点位置信息三维坐标值(x,y,z)按照每一帧按顺序排列成一列向量,此时代表动态手势的原始三维轨迹特征为:
其中,代表第n帧图的4个骨骼点的特征向量,n代表第n帧深度图。
从Kinect获得的每个骨骼点的三维坐标信息与不同的操作者的体型、使用者与Kinect的相对位置以及手部移动的速度和尺度都有关系,即使是同一个用户也很难确保每次做同一个动作时轨迹一样。因此,由Kinect获取的人体骨骼数据不能直接用于手势识别,而需要对所获取骨骼点的数据进行归一化等处理。
在动态手势识别过程中,肩部的移动相对比较微小,因此将肩部的位置用作基准点的计算。定义基准点A(xa,ya,za)为肩部连线的中心,则基准点A可通过左肩节点LS(xLS,yLS,zLS)为和右肩节点RS(xRS,yRS,zRS)为的中间值来计算:
计算出基准点A后,对右手(RH)、左手(LH)、右肘(RE)及左肘(LE)这4个节点进行归一化处理:
其中,由于左肩和右肩的距离具有相对固定性,归一化处理时釆用左肩和右肩的距离作为标准长度。
通过以上方式将原有的人体化坐标系转换成以双肩中心点为原点的双手坐标系,其中基准点A为双手坐标系原点,从而消除人体尺寸以及人体距离Kinect的远近对特征向量所产生的变化。
因此,一段手势的特征向量可采用归一化后的骨骼点的空间坐标变化来表示:
其中,是由按顺序排列组成的列向量,N代表这个序列有N帧深度图。
手势起止检测:
在交互过程中自然而实时地识别手势,需要将有意义的手势序列帧从数据流中截取出来,这需要我们能判断用户何时开始做手势。在做手势的过程中,手的位置不停地变化,因此,本方案采用了计算手部节点的运动能量函数来作为判断手势起止的依据。手势的运动能量函数定义为从Kinect中获得的前后两帧图像中手部骨骼点的三维位置的变化之和,即左手、左肘、右手、右肘这4个骨骼点的移动距离之和,其中移动距离用前后两帧的坐标之间的欧式距离计算。
令n和n-1分别代表当前帧和前一帧。以左手骨骼点LH为例说明单个骨骼点的移动距离:
则手势的运动能量函数E定义为:
E=dLH+dLE+dRH+dRE (14)
手势起止检测是为了分割前后两个动态手势的序列帧,从而提取有意义的手势序列,去除无意义数据帧对识别结果的干扰。通过判断E大于某个设定的阈值可作为手势开始的判断依据,由于可能出现数据波动,需要连续观测。如果连续M帧(M=5)E的值都大于设定的阈值,则将第一次检测到E大于该阈值的那一帧作为手势开始运动的起点,并将是否进行手势标志为是。另一方面,当检测到连续M帧(M=5)E的值都小于设定的阈值,则将第一次检测到的位置作为手势结束的终点,并将是否进行手势标志为否。通过运动能量函数判断法可将运动的手势序列截取出来。由于实际操作时手会出现抖动的情况,且每打一个手势大约需要15帧以上的时间(0.5秒以上的时间,Kinect获取骨骼帧的速度为30帧/s),所以将截取到的手势序列的帧数小于10帧的序列段舍弃,判定为无意义手势。至此,就将手势序列从长序列中截取出来。为了将序列用于训练和识别并获得更好的识别效果,需要对提取出来的手势序列段进行平滑滤波、重采样、位置归一化等处理。
平滑滤波处理:
由于操作者的动作不够连贯以及Kinect SDK的性能等原因,Kinect传感器在骨骼跟踪过程中会出现含有骨骼特征信息的数据帧出现跳跃的情况,此时骨骼关节点上一帧与下一帧之间的相对位置变动很大,这对程序的稳定造成严重的影响。比如会影响用户体验和出现不可控制的错误等问题。通过对骨骼数据进行平滑处理,减少视频上一帧与下一帧之间的关节点位置差异。以此减小骨架跳跃所带来的影响。以右手节点RH为例,对于第t帧图像,进行平滑滤波处理的右手节点的坐标为对其前后帧的坐标值取均值:
重采样:
对于获得的长短不一的手势序列段,重采样利用均匀线性重采样的方式将所有手势序列进行处理使得两两相邻轨迹点的间隔相等,以消除不同用户做手势的速度差异。需要对每一个骨骼点的序列点轨迹分别进行处理。假设原始手势轨迹共包含N0个轨迹点,这样右手骨骼点RH的轨迹包含N0个轨迹点的三维坐标。定义l为右手骨骼点的轨迹长度,并假设重采样后的轨迹点数为Nr,则有
使用l/Nr作为采样间隔,在原始手势轨迹上用采样间隔等间距抽取Nr个新的轨迹点作为重采样后的轨迹。
位置归一化:
为了使最终的手势轨迹具有位置不变性,将骨骼点的轨迹序列的每一点均减去初始的轨迹点。以右手骨骼点RH的轨迹为例,轨迹序列的每一点均对应减去初始点的坐标,从而获得新的三维轨迹点序列:
经过此位置归一化后的轨迹点序列不因初始轨迹点位置的差异而变化。将左手、右手、左肘及右肘四个骨骼点的手势轨迹分别采用上面所述的方法进行平滑滤波、重采样与位置归一化的处理,并将经过上述预处理的手势轨迹特征向量作为神经网络的输入。
(二)神经网络手势识别算法
1、神经网络动态手势识别算法
MIMO-Chebyshev神经网络算法:
在区间[-1,1]上,关于权函数两两正交的多项式簇称为Chevbyshev正交基,它可以表示为Th(x):
Chevbyshev多项式可用如下递推公式定义:
MIMO-Chebyshev神经网络模型和权值矩阵确定方法:
基于上述Chevbyshev正交基,本方案构造的MIMO-Chebyshev神经网络的模型如下图所示。该网络为单隐藏层神经网络,输入层有n个神经元节点(输入层输入的数据即为上面提取出来的手势轨迹特征向量),
Xk=(x1,k,x2,k,K,xn,k)T∈Rn,(k=1,2,K,s)为神经网络输入向量,s代表训练输入样本的个数,输出层有m个节点(代表识别结果即手势的个数),
如图1所示,Yk=(y1,k,y2,k,K,ym,k)T∈Rm为神经网络的输出向量。其中k表示用于训练的第k个样本。假设满足网络精度要求的最小隐藏层神经元数目为h个,则隐藏层神经元线性激励函数可采用Chebyshev正交基的前h项,即输入层到隐藏层神经元的权值可以设定恒为1,隐藏层到输出层的权值矩阵则为W∈Rh×m,其中wj.i为隐藏层的第j个神经元与输出层的第i个节点的连接权值。
用s个训练样本对该神经网络进行训练,这样样本的输入分别为:X1,X2,K,Xs,预期输出为D1,D2,K,Ds,真实的输出为Y1,Y2,K,Ys,因此神经网络的实际输入输出的关系为:
其中Ti是第i+1个隐藏层的神经元。
然而Chevbyshev神经网络只有当输入在区间[-1,1]才是可收敛的,否则神经网络将没办法正常训练学习和收敛。为了解决这一问题,我们定义式(12)中的x为:
其中公式(14)可以将输入从[-∞,+∞]转换到[0,1],并且我们可以调整σ来改变公式(14)的斜率。
定义误差方程如下:
其中是训练样本期望的输出结果,而yj,k是真实的输出结果。则MIMO-Chevbyshev神经网络的权值通过如下迭代公式确定:
Wj,k(r+1)=Wj,k(r)-ηEj,kφ (24)
其中:Wj,k=(wj,1,wj,2,K,wj,k),φ=[T0(x),T1(x),K,Th-1(x)]T,η为学习速度并且要求0<η<1。
权值迭代公式的矩阵形式:
W(r+1)=W(r)-ηφT(φW(r)-D) (25)
其中
为输入转换矩阵,r=0,1,2,K为迭代次数,xk为第k个样本。
由于迭代公式(16)的收敛性,所以当网络学习达到稳态后有:
代入公式(17)则有:
φT(φW-D)=0 (28)
因此可以得到MIMO-Chebyshev神经网络的权值矩阵直接计算公式:
W=(φTφ)-1φTD (29)
其中(φTφ)-1φT=φ+是φ的伪逆。通过上述公式可以直接通过矩阵计算得到网络权值矩阵,避免了训练时间冗长,能够满足动态手势的快速学习和识别的实时性。
根据手势轨迹序列向量的分量数目(即轨迹的长度与节点三维坐标数目的乘积)确定动态手势识别的神经网络输入节点的数量,同时用手势轨迹的各个分量作为神经网络的输入;根据输出层节点数目设置对应动态手势的种类数m。将长度为m的输出向量作为动态手势判断的依据:如果输出向量与第N种手势的预期输出向量越接近,说明输入手势最有可能是第N种手势。由于动态手势分为m种,设置长度为m的单位向量对应m种手势。其中第N种手势的预期输出向量(y1,y2,K,ym)T
由如下公式确定:
2、网络隐藏层神经元数目自适应算法
传统神经网络隐藏层的神经元数目的设定缺乏完善理论指导,大多是设计者根据经验而决定,并且一旦设定,在训练过程中不再进行调整。如果隐藏层神经元数目选取过小,则无法满足精度的要求;选取过大又会造成隐藏层的神经元个数冗余,难以确保神经网络的结构最优。因此本方案还提出了一种选取隐藏层神经元数目的自适应算法。可以根据训练的样本,快速有效自动确定隐藏层神经元数目,使得神经元在满足精度的条件下个数最少。
自适应算法的流程框图如图2所示:
(1)先给定神经网络目标精度为ε=10-5,设定隐藏层神经元数目范围,最小值最大值(n、m分为为输入节点数和输出节点数,l为搜索窗口的步长。可以取l=20)
(2)通过计算当隐藏层节点数目分别为min,max时的权值矩阵W和网络最小均方误差MSEmin,MSEmax,判断MSEmin,MSEmax跟ε的大小关系,然后调整min,max的范围直到计算出来的MSEmin,MSEmax的范围包含ε的值
(3)在确定的[min,max]的范围里面使用二分法找的最先使得MSE≤ε的值,即为我们所要找到的最小的隐藏层神经元节点数目。
(三)、无人机人机交互系统设计
本发明提出了一种用户与无人机之间的交互方案。采用上面提出的连续三维动态手势识别的方法,将用户做出不同的手势识别出来转换成控制指令控制无人机的飞行轨迹。
1、无人机的飞行控制策略
无人机与Kinect、电脑的数据传输模型
本发明方案以法国Parrot公司的AR.Drone旋翼无人机为例阐述基于人与无人机的交互方案。图3展示了整个交互系统的基本架构和各个子模块之间的数据传输。
AR.Drone通过无线WiFi模块与电脑连接,Kinect传感器通过USB数据线与电脑相连接,Kinect SDK和AR.Drone的控制接口允许它们与电脑之间相互传输数据。以利用Kinect传感器识别的手势作为无人机的控制信息,通过无线通信信道传送给AR.Drone,从而实现基于手势控制飞行器的飞行。图4展示了利用手势控制无人机系统的控制流程图。
无人机的PID控制策略及预设轨迹
应用PID算法对飞行器的飞行速度进行闭环控制。设飞行器在X方向的期望速度为want_speedX,而飞行器传感器系统反馈的实时速度为real_speedX,则两者之间速度的误差error_speedX为:
error_speedX=want_speedX-real_speedX (31)
累计的误差sum_speedX为:
sum_speedX=sum_speedX+error_speedX (32)
因此,每个控制周期X方向的速度值speedX为:
speedX=p_speedX.error_speedX
+d_speedX.(error_speedX-lasterror_speedX)+i_speedX.sum_speedX (33)
其中,p_speedX、d_speedX与i_speedX分别为PID算法中的控制参数。
如果需要飞行器的飞行轨迹为直线,如向左或向右飞行一段距离,则可以直接设置目的地的坐标为终点坐标。当飞行路径为不规则曲线,则需要对路径进行分段,即将路径划分成若干个直线段,每个直线段的节点为飞行器的当前目标点。前后左右四个方向的飞行只需要设置一个路径节点即终点。而飞行器画圆和S型飞行则需要将飞行路径分段。将分段后的各节点坐标存入数组,让飞行器顺序遍历,当判断到达当前目标位置,将数组下一项作为新的目标点。
图5显示了画圆的轨迹,将轨迹按圆心角度均分成若干份,由公式(26)分别计算各点的横纵坐标。
图6显示了S型的轨迹,即两个半圆的衔接,由公式(27)计算横纵坐标。
2、用户与无人机交互方案
采用连续三维动态手势识别的方法,将用户做出不同的手势识别出来转换成控制指令控制无人机的飞行轨迹。定义以下几种手势:右手向左挥动、右手向右挥动,右手向前平推、右手向后收回、画圆、画“S”形手势等,分别对应无人机向左飞行、向右飞行、前进、后退、飞圆形、“S”轨迹。
并且为了控制过程中的安全性、实用性考虑,设置一对开始交互和结束交互的指令。并且是使用者不会随意做出来的手势,所以选取用户双手同时高举过头顶作为开始与无人机交互的标志,结束标志为再一次双手同时高举过头顶。整个交互过程的逻辑框图如图7所示。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。