传统的鼠标与触屏等操作方式,重点都是视觉与屏幕的互动,手的操作只是辅助。随着 3D 成像技术的飞跃,使用者将不再满足于以往的体验方式,交互设备便应运而生。二维屏 幕展现了纷繁的网络世界及逼真的立体空间,使用者在感受时,依靠的只是视觉与听觉感官, 通过视线的聚焦来体会到屏幕的广度与深度。但人类除了观察世界,也有着去触碰与实践的 本能。因此,基于运动捕捉的交互设备能进一步加深人类与虚拟现实的交互,凭借对运动语 言的传递与表达,更真切地感知屏幕中的三维空间。
而手势识别又集中于手指的运动语言,可于屏幕前操作,更符合用户的需求与习惯。通 过识别手指姿态与屏幕交互,可替代或辅助鼠标及触屏等操作方式,进行更为灵活与立体的 人机互动。项目旨在开发手势识别系统及应用平台,通过获取手指运动和姿态数据并分析处 理,再利用 Unity 3D 平台编程开发,可实现丰富多彩的功能。在交互游戏模块,先对物体 建立模型,之后将手指触点运动信息与之匹配,可以实现实时的操控。如设计吉他、架子鼓、 琴等虚拟乐器,用户在假想的形状上操作,设备捕捉到手指触点的对应位置,就能模拟出演 奏效果。或者对魔方等实体玩具建模,通过识别转动魔方时的手势姿态,用户就能隔着屏幕 控制魔方的 3D 动画。手势操作的全方位性,对于 3D 模拟游戏也更具优势,由手指在个角 度进行方位指挥,可以流畅控制飞机等物体的模拟运动。
在更高精度的分析层面,能捕获到指尖触点的具体方位,再导入Unity3D 平台,与手指 骨骼模型匹配,实现对手指的建模。之后开发搭建物理环境,可利用手指模型进行物理操作, 实现仿真效果。此应用可用于一系列仿真教学与研究,如经典力学中的物体运动,微观层面 粒子的形态模拟与构建,天文学中星体的运行演示。指尖运动还可进行 3D 绘图,进而应用 于工程建模等领域。
当前,体感互动尤其是手势互动主要采用的传感设备是手指动作捕获系统,主流设备分 光学系统和惯性传感系统两类。主流的光学动作捕捉系统由多台高速红外摄像机构成,被测 者需要手指佩带捕捉标记,尽管捕获精度高,效果好,但是使用复杂且价格昂贵。最近几年 一种廉价、具有深度感知的光学动作捕获装置 Kinect、Leap motion 的出现,引发了体感 互动热潮,使得体感互动进入主流。这类光学捕获装置主要具有深度感知,采用结构光、飞 行时间或者双目视觉技术。此外,国内外商家也基于光学动作捕获技术开发了一系列体感互 动游戏、健身、设备操控等产品。但是光学类动作捕获设备普遍具有范围、遮挡、户外、光 线、高速移动等限制进而在发展潜力上有很大的局限性。
手势动作捕获的另一类技术和产品是基于惯性传感的动作捕获系统。 典型的产品就是 数据手套,数据手套主要应用于虚拟现实技术,常见的虚 拟现实数据手套有 5DTCyberGlove 、Measurand 、DGTech 、FakespaceX-ISTImmersion CyberGrasp 等,但是 由于其虚拟现实定位的局限性使得价格昂贵,传感器数量多,不利于大范围推广。随着 MEMS 器件的集成度越来越高,应用点越来越广,出现对基于 MEMS 传感器的动作捕获系统的新需 求,即价格相对较低、灵活性较强,便于多模式应用的要求。
对此,我们在本项目的研究重点是通过较少的传感器信息,利用优化后的数据处理模型, 得到更为精准的手势运动数据,并可以结合Unity3D 平台等3D建模编程软件做进一步的数据 加工,扩展其多模式的应用要求。
人体可穿戴设备的组建
根据手势识别需要,该人体可穿戴设备主要由四大模块组成,传感器测量模块、数据解 算模块、微控制器和数据传输模块。以下针对其中较为重要的模块进行分析。图1为最初人 体手部的模型设想。
1.1 传感器测量模块 采用多节点的MEMS九轴惯性测量模块,共6节点,包括五指及手背部分;利用I2C传输至
MCU,支持全速400K速率,可以采集到陀螺仪、加速度和磁力计数据。
1.2 数据解算模块及微控制器
数据解算模块集成至微控制器,数据解算主要是利用AHRS算法四元数姿态解算,根据磁 力计和加速度计修正陀螺仪,得到载体坐标系到地理坐标系的旋转四元数(角度信息)。然 后利用卡尔曼滤波处理,进一步修正滤波动态误差。对加速度计滤波后的进行数据积分得到 地理坐标系下的位置信息。
采用STM32F4作为微控制器,集成了新的DSP和FPU指令,其168MHz的高速性能使得数字 信号控制器应用和快速的产品开发达到了新的水平,有利于提升控制算法的执行速度和代码 效率。因为其具有多重AHB总线矩阵和多通道DMA,支持程序执行和数据传输并行处理,所以 数据传输速率非常快,能满足我们实时传输由传感器带来的数据信息。
为实现更为精准和实时的手势识别功能,需要在嵌入式平台上多传感器收发的算法上多 加投入,这也意味着需要完善上位机接口的协议,要很好的作为开源平台进行进一步开发。 我们通过提出这样的解决方案来处理,进一步根据FIFO缓冲池和MCU的RAM大小合理分配数据 流,来平衡数据发送的冗余度和实时性,实现多传感器数据顺利收发,优化代码结构,完善 接口协议,实现上位机接口协议从Python到C#的移植。
1.3 数据传输模块
将蓝牙传输集成至微控制器,并且同时客户端使用蓝牙串口接收。传输数据为经微控制 器处理后的三维角度位置信息,并打包成16字节的数据帧,其中14 byte数据,1 byte 标记, 1 byte 校验和,以此方式不断将传感器收集到的数据传送到客户端。
为实现数据传输模块集成化小型化的目的,按照人体手部尺寸重新规划了数据传输模 块,并画出PCB板集成加工,其主要实现的功能有蓝牙通信,五个手指关节的惯性传感器连 接,串口调试模块及USB调试集成电源供给模块等,基本实现了小型轻便易于穿戴的功能。 其未封装的PCB板如上图2。图3为人体可穿戴设备实际测量图。
基于反向运动学的手势识别方法
惯性式动作捕捉技术是基于惯性传感器动作捕捉设备的动作捕捉技术,通过利用加速度 计、陀螺仪与磁力计的九轴惯性传感器,测定各个节点的姿态和相对位置来捕捉手部的动作 变化,但是,由于惯性传感器的测量精度相对较低,在进行复杂的手部动作捕捉时,需要大 量的惯性传感器进行位置校准和补偿,即在手指的各个节点或关节处均需要设置有惯性传感 器以获取精确的姿态信息,从而实现手势的识别,这样,由于所使用的惯性传感器数量较多, 导致数据手套的制造困难,成本较高,而且在佩戴方便的便携性不高,使得用户体验较差。
有鉴于此,本项目通过利用一种基于反向运动学的数学计算模型,优化改良成适用的手 势识别方法,并结合上述人体可穿戴设备等硬件资源,达到了人体手势识别的功能。并因此 申请了国家发明专利,基于专利的特殊性,本项目实施总结报告仅对其进行简单概要的描述, 以供参考。
如上图图4,通过设于指尖和第三指关节的惯性传感器获取指尖和第三指关节在世界空 间坐标系下的坐标信息,根据预设的近似求解公式求取所建立的指尖相对于第三指关节坐标 系的指关节弯曲角度求解方程组,将计算得到的弯曲角度 发送至预设三维模型中,生成相应的手势。借助与通过坐标信息反向求解弯曲角度的数学模型,能够高效率德计 算得到精准的弯曲角度的相关信息,减少了传统的手势识别方法中所需用到的惯性传感器的 数量,极大地精简了手势识别产品的结构。同时,由于惯性传感器的使用数量减少,使得数 据手套的便携性和操作性大大提高,并降低了数据手套的制作难度和成本,用户体验更好。
利用Unity3D应用开发
该反向运动学模型需要模拟手指的运动,现只考虑在 x_y 平面上的运动,所以是个二维 空间的计算问题。使用机器学习实现时,不需建立反向运动学的计算方程求解,而是在描述 了具体任务后,让机器学习实现。实际上这是一个回归问题。
首先,分析具体任务。手势模型总共由三个节点构成,它们在 x_y 平面的自由度依次设 为[-0.25*pi, 0.25*pi], [-0.5*pi, 0], [-0.5*pi, 0],并同样假设第二三个节点的角度相同。机器学 习的任务是让这个模型的指尖运动到目标位置。所以,它需要的信息是目标点的坐标,输出 值为一二节点的角度。
搭建神经网络,将输入层的维度设为 2,对应目标坐标的 x、y 轴值,输出层维度为 2, 对应两个角度值,中间添加两个隐藏层。输出层使用 sigmoid 激活函数,使得输出值的范围 是[0, 1],再映射到对应的角度范围。
神经网络由获得角度值后,赋予到节点,计算出指尖的坐标。将归一化的指尖坐标与目 标位置坐标求出距离的平方,作为损失函数的返回值。训练过程中,神经网络会迭代减小该 值,实际效果即减小误差。
和传统的反向运动学算法比较,使用机器学习的思路更简单,而且使用时更加灵活。当 反向运动学的模拟的模型结构改变时,神经网络只需改变网络,还是能用同样的思路求解。
其动态模型已通过实际程序实现,限于文章无法显示动态图,将部分模仿手指关节运 动的截图片刻如下图5.
在 Unity3D 应用开发过程中,为增加用户与 3D 场景间的交互能力,场景效果的流畅感 与真实感必不可少,这就意味着不仅面对着时间和空间资源的传统难题,也不得不解决质量 和速度间的权衡。使用粒子系统产生流动的云得到一种伪 3D 效果,很多时候会显露违和感, 近处的效果也差强人意。使用了 raymarch 技术生成的云层有更强的立体感,但需要大量的 计算且自身的渲染系统和 unity 是分开的,这无疑会进一步拉慢运行速度。
解决办法: 将体渲染和 unity 自身的系统结合起来。通过把生成 3D 云层的 shader 作为 屏幕后处理的特效,来生成屏幕每个像素的颜色,在这之前,场景中已经设置好了飞机的 3D 模型,unity 会完成对模型的渲染,并把场景的深度信息保存进一张贴图。在云层的 shader 中,使用屏幕深度和视线的深度比较,检测视线和几何体的碰撞,并使用透明度融合二者的 颜色。这样不仅高效的加入了飞机的几何体,因为模型的阻挡,更减少了计算量,反而提高 了运行速度。最后,在真实的云层效果中,飞行场景得以流畅运行。
图6和图7为Unity3D平台设计开发的基于手势运动的应用,分别为人体手部运动仿真程 序和基于人体手部运动的飞机飞行模拟程序(带3D云层效果)。
总结
本项目所实现的手势识别基本满足了最初人体可穿戴设备的设想。项目共分为两阶段, 其进展还算较为顺畅。团队成员各自分工明确,从最开始的资料检索,和传感器手指数据多 次测量实验寻找最适方法,购买所需设备及耗材等前期调研筹备工作,到实践阶段时分别实 现传感器电路、处理器电路、蓝牙通信等模块;然后进行手指运动捕捉的算法设计和模型构 建,并不断调试改进算法。后期开发 Unity3d 应用展示 Demo,利用基于反向运动化的数学 模型识别简单的手势。虽然开始设想附加对人体健康信息进行采集并加以利用,经过初步尝 试后发现实现较为困难,目前仍未有足够的知识力量去完善,故集中精力攻坚手势识别模型 算法的优化,并出乎预想地成功申请了国内发明专利授权。