曹尔凡, 崔建伟
(东南大学 仪器科学与工程学院,江苏 南京 210096)
手臂运动识别技术广泛地应用于众多领域,包括残疾人康复、运动员的动作分析、VR应用等[1-3]。比如在助残领域,对于失去手部的残疾人,通过采集并分析他们手臂运动的相关信息,判断手臂与日常活动相对应的运动状态,将识别出的手臂动作标签作为信号,去触发与手臂动作相匹配的机械假手张合操作,可以帮助完成残疾人的日常抓握行为。人的手臂动作识别常见的方法包括计算机视觉处理[4]、肌电信号处理[5]和可穿戴式MEMS传感器等。计算机视觉识别对硬件要求高,摄像设备不便于佩戴,在本文应用的助残场景里具有一定局限性。肌电信号识别硬件成本较低、携带方便,然而受肌肉状态影响大,识别效果不稳定。
MEMS传感器具有功耗低、成本低、便于携带等优点,是目前研究的热点[6]。张俊杰等[7]通过采集手臂关键节点的加速度和角速度值,对数据进行时域特征计算,采用BP神经网络和支持向量机两种方法进行动作识别,总识别率可达90%。这种方法硬件设备用量少,便于穿戴,有一定的识别精度,但是传感器的加速度、角速度信号存在振荡等不稳定因素,导致从中提取的时域特征也不稳定,从而影响识别效果。基于多传感器融合的方法能有效地提高识别的精度和可靠性,如Wang等[8]在老年人手腕部位佩戴加速度传感器并结合环境传感器对17种日常人体活动进行识别,总识别率达到96.82%。该方法使用环境传感器辅助加速度传感器对人体动作进行识别,弥补了加速度传感器时域特征不稳定的缺陷,达到了很好的识别效果。但环境传感器不便于穿戴,特别是在助残应用领域并不方便。
人类在完成不同动作时有自然形成的习惯,可以设想手臂的运动轨迹有可能隐含人的动作意图,借此可进一步提高MEMS传感器对人手臂运动的识别率。受此启发,基于助残假手的应用背景,研究了将MEMS传感器与手臂运动轨迹相结合的手臂运动识别方法。
为了弥补传感器时域特征不稳定的缺点,本文在虚拟交互环境中建立了3D手臂模型,将传感器角度数据映射至手臂模型,完成手臂动作复现,获取稳定的轨迹特征。为了满足助残手连续精细动作的识别需求,提出了一种有效动作数据分割算法,剔除连续动作信号中的无效数据,分割出有意义的数据窗口。最后设计了支持向量机算法对预定义的5种手臂动作进行了分类识别实验。
本文使用的数据手套包含了3个九轴MEMS传感器和5个弯曲传感器,其中3个MEMS传感器分别佩戴在手臂的大臂、小臂、手背部位,5个弯曲传感器依附于5根手指处,如图1所示。
图1 传感器佩戴位置
图1中,X0、Y0、Z0为参考坐标系方向,X0指向肩部,Y0指向手臂前方,Z0指向手背外侧。X1~X3、Y1~Y3、Z1~Z3分别为3个MEMS传感器的初始三轴方向,与参考坐标系一致。弯曲传感器为长条形的压阻传感器,可测量手指的弯曲程度。
整个动作识别系统的总体框图如图2所示。主控单片机采集大臂、小臂、手背3个部位的三轴加速度、角速度、磁强度信号并进行四元数解算,得到俯仰角、偏航角、横滚角的三轴姿态角度数据。再通过串口将原始数据、解算好的角度数据上传至计算机中。计算机将数据复制为两份,一份用于虚拟环境的手臂动作复现,获取手臂模型轨迹数据,提取轨迹特征,另一份用于时域特征提取。最后将传感器时域特征和轨迹特征输入支持向量机算法模型,完成手臂动作的分类识别。
图2 手臂动作识别系统总体设计框图
常见的获取手臂运动轨迹信息的方法是通过对手臂建立坐标系,基于手臂旋转姿态角对手臂末端位置进行矩阵解算,得到运动轨迹[9-10]。采用了虚拟交互技术,通过建立3D手臂模型,绑定传感器姿态数据,实现动作复现,并可以从虚拟环境中直接读取手臂模型的轨迹信息。这种方法的好处在于可以减少传统方法解算轨迹所需要的巨大计算量,同时能直观地看到手臂运动状态。
首先参照文献[11]的方法,将手臂模型简化为棍状模型,通过建立关节层级关系、添加骨骼蒙皮、添加碰撞器组件等步骤[11],建立虚拟手臂模型,如图3所示。
图3 虚拟手臂模型
手臂模型在虚拟环境中的运动由四元数驱动。模型在虚拟空间中的姿态变化基于四元数在新的时刻相对于上一时刻四元数的更新,即四元数的状态转移。四元数的实时状态转移使用二阶龙格-库塔法实现[12],首先对四元数关于时间求微分方程:
(1)
计算得到
(2)
式中,ωx、ωy、ωz为角速度三轴分量。接着将四元数套用到二阶龙格-库塔方程中,形成四元数状态转移方程:
(3)
式中,Q为四元数;K1为t到t+T时刻四元数微分斜率初始端点;K2为斜率末尾端点。通过求T时间内的四元数微分平均斜率来估计T时刻后的四元数状态,完成状态转移。
将手臂模型导入Unity虚拟平台,将上述公式求得的实时四元数数据绑定至相应模型碰撞器,完成动作复现,效果如图4所示。
图4 动作复现效果图
由图4可以看出,手臂模型的动作与真实手臂基本一致。本文建立的虚拟手臂模型旨在能够获取手臂的动作意图,勾画出基本运动趋势,不要求动作能够精确复现。
完成动作复现后,手臂模型的运动状态能够基本代表真实手臂运动状态,此时就可以从虚拟环境中直接获取手臂模型的轨迹数据。常见获取手臂运动轨迹的方法为了便于计算,大多以小臂末端作为轨迹的计算对象。本文充分发挥虚拟模型的优势,以右手大拇指末端的坐标数据作为采集对象,轨迹范围从手臂延伸到手指,提高了轨迹的精确度。采集部位与Unity坐标系方向如图5所示。
图5 轨迹数据采集部位与坐标系方向
经过一个动作周期,即可对位置坐标形成动作轨迹路线,图6为“喝水”动作的轨迹路线。
图6 “喝水”动作轨迹路线
加速度、角速度能反映手臂运动的幅度与剧烈程度,轨迹数据能反映手臂运动的位移趋势,因此选用3个MEMS传感器的加速度、角速度作为时域特征的数据源,虚拟环境中提取出的轨迹数据作为轨迹特征的数据源,数据采集频率为50 Hz。在提取特征前需要对原始数据进行预处理。
首先使用滑动平均滤波法对原始数据滤波进行处理,去除振荡毛刺。
(4)
式中,Yk为k时刻滤波后信号值;Xk+i为k时刻滑动窗口内第i个原始信号值。为保证滤波效果良好且原始数据损失较小,滑动窗口大小w设置为10个采样点。
从虚拟环境中采集到的拇指末端坐标为三轴分量。为了直观清晰地获取轨迹特征,以手臂自然下垂于裤缝的位置为所有手臂动作的起点,让三轴坐标值对设定的起点值计算差的平方和,得出手臂运动时拇指末端相对于起点的直线位移值,作为表示动作轨迹的物理量,以便于后续的动作分割工作和特征提取。位移值计算公式为
(5)
式中,Dk为k时刻大拇指末端相对于起点的位移值;Xk、Yk、Zk分别为k时刻拇指末端的三轴坐标值;X0、Y0、Z0分别为拇指末端的三轴起点值。图7(a)为“喝水”动作中一个动作周期内的模型末端原始三轴坐标值,图7(b)为式(5)计算后的位移值。
图7 “喝水”动作位移值的获取
由图7(b)可以看出,计算出的手臂位移值变化趋势明显,且没有振荡波动现象,稳定性较好。
由于采集到的整段动作数据有一部分不属于有效动作数据,需要通过分割算法提取出有效动作的片段。传统的动作分割方法大多是通过手动标识动作起始点[13],或者是设定加速度阈值判断有效数据段[14]。手动标识的方法操作烦琐,对连续动作信号不适用,而判断加速度阈值的方法由于加速度信号不够稳定的特点,会产生很多干扰点。本文提出一种动作分割算法,基于3.1节得到的稳定的手臂位移值,通过计算差分和并联合判断阈值得到有效动作的起始点。
以“喝水”动作为例,观察图7(b),做出喝水动作之前的一段时间,手臂的位移值处于平稳状态且接近于0。当开始做出喝水动作,手臂位移值有一个短暂且大幅度上升的趋势,这段时间即对应着抬臂的过程。接着喝水的这段时间对应的位移值又较为平稳。最后放下手臂的时间段对应的位移值呈现一个短暂且大幅度下降的趋势,至此一个动作周期结束。因此得出这样的规律:在每一个有效动作片段的起始点之后和结束点之前,手臂的位移值都会有一个短时间的陡峭的上升或下降趋势。因此可以通过判断这两段趋势来确定有效动作片段的起始点和结束点。基于上述分析,本文提出了一种计算滑动窗口的差分和与波峰波谷检测相结合的动作片段分割算法,算法流程如图8所示。
图8 动作分割算法流程图
其中差分和的计算公式为
(6)
式中,Diffk为k时刻的差分和值;Xk+i为k时刻窗口内第i个点的手臂位移值;Xk+i-1为k时刻窗口内第i-1个点的位移值。滑动窗口大小w设置为10个采样点。
对于连续的“喝水”动作位移值采用该动作片段分割算法,分割结果如图9所示。其中l1、l2为阈值线,两条阈值线中间的波峰波谷点均为干扰点;d1、d2为窗口长度偏移的补偿值;S1、E1、S2、E2为识别出的动作起始点。
图9 动作片段分割算法结果
为传感器数据和轨迹数据分别选取了5种能表征手臂运动特性的特征量。
对传感器信号提取了均值、标准差、最大值、最小值、偏度5种时域特征。其中,均值反映了信号平均强度,标准差反映了信号分散程度,最大值最小值反映了信号的幅度,偏度反映了信号的偏斜方向和程度。
对于传感器的三轴信号计算出的特征量,采取求平方和的方式得出其综合特征量:
(7)
式中,Fx、Fy、Fz分别为传感器的三轴特征值分量。这种融合三轴特征值分量的方法,不仅降低了算法模型的输入维度,同时提高了特征值的稳定性。
对轨迹位移值提取了均值、标准差、最大值、窗口宽度、差分绝对值和5种轨迹特征。其中,均值反映了动作的平均幅度大小,标准差反映了每个采样点的位移相对于均值的偏离程度,最大值表示动作的最远位移值,窗口宽度反映了动作的持续时间,差分绝对值和反映了位移值变化的剧烈程度。表1列出了各特征值的公式,其中,ds为样本标准差,XS、XE分别为动作起始点的索引值。
表1 选用特征值的公式定义
经过特征量计算,得到传感器数据的时域特征共30维,轨迹特征共5维。在实验阶段会对单时域特征和时域+轨迹特征分别测试识别效果。
定义了5种手臂动作标签,定义规则如下。
① 选取的动作需为日常生活常见动作,与助残的应用背景相吻合。
② 选取的动作中应当存在相似动作。相似动作的各特征值较为相近,识别难度较大。
③ 选取的有差别的动作,既作为识别目标,也作为干扰源,用以验证识别方法是否可行。
选取的5种手臂动作标签和说明如表2所示。
表2 手臂动作标签选取
表2中动作类别按动作的相似程度划分。其中,共性动作是从桌子取物,下面进行进一步细分。“喝水”动作的活动范围从起点到头部,为大范围动作,划为A类;“解衣服扣子”动作范围从起点到胸口,为中范围动作,划为B类;“翻书”、“敲键盘”、“使用手机”3种动作范围从起点到桌子,为小范围动作,划为C类。C类中的3种动作属于相似动作,识别难度较高,本文将传感器时域特征与运动轨迹特征相结合测试其分类效果。
寻找了4位志愿者进行数据集采集,每个人对5种动作以平稳的速度重复做15次,一次手臂动作周期约5 s。一共采集了4×5×15=300个样本。基于5种动作标签和300个实验样本,对选取的5种轨迹特征作平行坐标图,如图10所示。由图得知每种轨迹特征对于每个动作类别分布较为集中,且不同动作类别的同种轨迹特征存在一定间距,易于对动作进行分类,说明5种轨迹特征选取合适。
图10 5种轨迹特征平行坐标分布
使用Matlab中的Classification Learner工具箱对数据集进行训练和分类。将数据集中的300个样本随机平均分为两份,其中150个为训练集,用来训练算法模型,另外150个作为测试集,用来测试模型的识别准确度。使用能良好支持非线性分类模型的支持向量机算法(Support Vector Machines,SVM)对数据集进行训练[15]。对SVM模型采用5折交叉熵验证,使模型更稳定,泛化能力更强。核函数采用高斯核模型:
(8)
式中,x′为核函数中心;‖x-x′‖2为向量x到向量x′的欧氏距离;σ为带宽,控制核函数作用范围。高斯核函数是SVM算法常用核函数,将输入空间映射到高维空间,再用超平面对不同类样本进行划分。
为了验证提出的轨迹特征对识别结果的影响,对传感器时域特征和传感器时域特征+轨迹特征分别训练算法模型,两种模型的特征值输入维数分别为30维和35维,输出均为5维。经过模型训练与测试集验证,得到结果。表3和表4分别为传感器时域特征和时域+轨迹特征的分类结果混淆矩阵。其中纵列为标签,横行为预测结果,M1~M5分别为喝水、解衣服扣子、翻书、敲键盘、使用手机5种动作,P为识别率。
表3 传感器时域特征下的动作识别混淆矩阵
表4 时域+轨迹特征下的动作识别混淆矩阵
从表3可以看出,喝水、敲键盘、使用手机3种动作的识别率为100%,解衣服扣子的识别率为96.88%。而翻书与敲键盘属于C类中的相似动作,单传感器时域特征下,10次翻书动作被错识别为敲键盘动作,识别率仅为69.70%,识别效果较差,总识别率仅为92.67%。在传感器时域特征的基础上加上轨迹特征训练模型,如表4所示,喝水、敲键盘、使用手机3种动作识别率仍为100%,解衣服扣子也提高到了100%。对于单传感器时域特征下识别效果较差的翻书动作,融合轨迹特征后只有1次将翻书动作错识别为敲键盘动作,识别率提高到了96.97%,总识别率提高到了99.33%。由此可以验证所提出的传感器时域特征与轨迹特征结合的手臂动作识别方法的可行性,且对于相似动作,轨迹特征的加入大幅度提高了识别率,验证了基于虚拟手臂模型获取的轨迹特征对手臂动作识别具有一定意义。
基于数据手套和虚拟手臂模型,提出了一种手臂动作识别方法。通过虚拟环境中手臂模型对真实手臂动作的复现,获取了手臂的轨迹数据,并提出了一种基于差分和加波峰波谷检测的动作片段分割算法,正确地获取了有效手臂动作数据片段。最后提取传感器时域特征和轨迹特征,使用支持向量机算法完成了对5种手臂动作标签的识别。在传感器时域特征下,总识别率为92.67%,融合了轨迹特征后,总识别率提高了6.66%,达到了99.33%,验证了提出的手臂动作识别方法的可行性,且证明了基于虚拟手臂模型获取的轨迹特征能有效提高识别准确率。
提出的手臂动作识别方法也存在一定的不足。由于手臂模型的静止参考坐标系是固定的,因此本系统无法对身体在运动状态下的手臂动作进行识别,存在一定的局限性。今后的工作也会针对手臂模型、识别算法加以改进,让本文方法适应复杂状态下的手臂运动。