基于动作捕捉追踪器及数据手套的VR拓展设备设计

2024-03-08 03:31王灵芝陈颖频周云杰
长春师范大学学报 2024年2期
关键词:手势手套姿态

王灵芝,张 俊,陈颖频,周云杰

(1.厦门城市职业学院人工智能学院,福建 厦门 361008;2.闽南师范大学物理与信息工程学院,福建 漳州 363000)

1 VR设备国内外发展现状及前景

近年来,随着体感设备及VR领域的兴起,催生了元宇宙概念的诞生。为了更好地服务元宇宙应用中的交互问题,人们对虚拟设备提出更高的交互需求。虚拟现实设备除了能提供手部以及头部的交互之外,还应拓展其他肢体及躯干的捕捉,使得虚拟形象更加灵活自然,增强在虚拟世界社交中的沉浸感。

目前家用VR的主流产品有基于LightHouse激光点阵定位的HTC Vive及Valve Index两款产品。两者都可捕捉头部及手部运动,通过增加Tracker还能捕捉身体任意部位的运动。此外还有Oculus公司的Quest2产品,采用红外灰度摄像头与九轴IMU相结合,通过计算机视觉来进行姿态定位。但上述产品仅能捕捉有限角度,对超出摄像头视角的手柄无法捕捉,且无官方途径拓展除头部手部外的捕捉。

我国对动作捕捉技术的研究起步较晚,但市场前景广阔,众多科研机构和学者对其展现出非常大的兴趣[1]。其中比较有代表性的是中国科学院传感网络和应用联合研究中心吴教授团队研究的MMocap系统,该系统在IMU式动作捕捉的基础上引入了步态分析等,增加了姿态分析与识别系统。此外还有诺亦腾(Noitom)的动捕系统及数据手套,提供了轻量的开发工具及Demo,但其多用于影视制作中为演员提供高精度的动作捕捉,以及在医疗研究中分析患者肢体运动特征。上述的商用产品因为其高昂的成本和技术需求,并不适用于家用VR场景。

本系统可实现动作捕捉并跟踪记录人体运动过程中的物理数据,用于生成3D模型,并在虚拟环境下还原人体动作。在开源项目OpenVR[2],SlimeVR[3]及OpenGloves[4]的基础上设计满足其规范的外设硬件。通过上述开源项目的支持,可在已有家用VR头戴及其配套定位手柄的情况下,提供腰部、腿部、脚部及手指等部位的追踪,最终在VR软件实现全身追踪效果。各下位机终端均具有完善的调试接口及电源设计。各设备利用Solidworks软件建模并进行3D打印,数据手套控制舵机实现手指弯曲动态限位,可实现力反馈体感手套。图1为系统整体示意图。

图1 系统整体示意图

2 系统框图

图2为系统总框图。OpenVR[2]是Valve公司开发的系列SDK及API规范,向下为VR硬件厂商提供驱动层的软硬件支持,向上为VR应用提供统一的数据接口。SlimeVR Server为CrowdSupply上的开源项目,可以为基于网络协议的追踪器提供人体姿态解算及OpenVR Driver接口[3]。OpenGloves开源软件支持动作捕捉手套的设备,并将其模拟为Valve Index的Knuckles控制器(即OpenVR Driver输入设备),后接入OpenVR API使用[4]。在此框架之下,可实现VR拓展设备的设计。

图2 系统总框图

2.1 JY901S IMU模块

追踪器最核心的部件为惯性传感器(IMU),通过其采集腰部、腿部、脚部的姿态数据。惯性传感器一般分为六轴和九轴,其中六轴由三轴加速度计和三轴陀螺仪组成,九轴则是在六轴基础上加入了三轴磁力计组成。数据融合和姿态解算系统是IMU的核心,目前主流IMU都带有数字运动处理器(Digital Motion Processor,DMP)来预处理信息及数据融合。

设计中使用了JY901S九轴惯性传感器模块,其内置32位单片机[5]。通过自带的高动态卡尔曼滤波算法,可将3个传感器的数据融合输出,输出格式为东-北-天坐标系下的欧拉角或是四元数[6]。由于现有的OpenVR应用所需的人体骨骼旋转向量输入均为四元数表示,所采用的人体姿态解算的引擎也采用了四元数输入输出及运算;此外四元数对比欧拉角具有计算量小、不存在无万向节死锁及姿态描述等问题,故系统内的所有旋转均用四元数表示[7]。

2.2 人体姿态解算原理

人体姿态的解算可以通过运动学知识来解决,在运动学中,解算人体模型运动的方法有两种,分别是正向运动学和反向运动学。本设计基于正向运动学进行人体捕捉,即在已知人体各关节的旋转角度时,人体任何关节的位置可以通过人体的关节连接、关节长度和旋转角度来计算,一般正向运动学的解是唯一的[8]。

人体姿态的解算大都使用棒状模型对人体进行简化,将人体的主要关节抽象成一个节点,关节之间的骨骼抽象成一条连杆。本设计为家用VR设备的衍生,额外捕捉躯干及下半身。故考虑头(Head)、颈(Neck)、胸(Chest)、腰(Waist)、髋(Hip)、臀(分为左右臀:Left Hip,Right Hip)、膝(Knee)、踝(Ankle)、脚(Foot)这几个关节点。

jMonkeyEngine是一款开源的游戏引擎,通过jMonkeyEnginer可创建节点及节点关系以实现正向运动学的人体姿态解算模型。节点间的关系与数据结构中树的定义类似,当前节点的上位节点即为当前节点的父节点[9]。

根据图3设置各节点之间关系,可得到人体的骨骼模型。项目基于真实人体参数设置两节点间初始坐标距离偏移,当父节点发生旋转后将递归带动所有子节点旋转,从而更新所有节点的绝对旋转(角度)。各节点的IMU模块输出在全局坐标系下的位置并旋转(角度)至游戏引擎,即可完成人体姿态解算。

图3 正向运动学人体姿态解算原理

2.3 系统通信方案

ESP32内部集成2.4 GHz Wi-Fi和蓝牙通信功能,故追踪器节点和数据手套与PC间通信采用的是Wi-Fi和蓝牙两种通信方式。由于系统追踪器节点多,且对数据实时性、通信速率均有一定要求,故追踪器部分采用2.4 G Wi-Fi方式通信,传输控制协议为UDP。数据手套部分采用蓝牙通信,省电且传输稳定足以满足通信要求,如图4所示。

图4 系统通信示意图

3 硬件部分

3.1 追踪器节点设计

追踪器节点硬件结构如图5所示。追踪器节点与人体关节绑定,实现人体关节运动信息的实时采集。其包括JY901S模块、ESP32、3.3 V DC-DC电源、锂电池管理、USB-TTL双串口及自动下载等部分。ESP32内部集成Wi-Fi+蓝牙方案[10],ESP32可兼做主控与无线收发。

图5 追踪器节点硬件结构图 图6 数据手套硬件结构图

3.2 数据手套节点设计

数据手套为穿戴设备,可实现手指弯曲度的采集。数据手套的硬件原理如图6所示,包括ESP32、MG90S舵机、电位器、电池管理及串行通信等部分。ESP32通过内部的ADC采集经电位器分压后的电压,经编码后发送;同时接收来自PC的手指限位数据,输出相应的PWM信号控制舵机的动作。

3.3 锂电池管理

本系统为穿戴式设备,需通过锂电池实现供电。由于追踪器节点和数据手套所需的电源功率不同,选用不同的电源管理芯片以满足需求。

3.3.1 ETA6093锂电池管理方案

追踪器模块的电源管理采用ETA6093开关型的锂电池充放电管理芯片。其电源效率高达95%,能够给电池提供1.2 A 的充电电流,可工作在充电模式或升压模式[11]。

模块电路部分如图7所示,IC的OUT引脚既为5 V电压输入,也为5 V电压输出端。当USB Type-C接入OUT引脚时,SW引脚通过电感L2接入BAT引脚实现反馈,此时电路工进入Buck充电状态。当OUT引脚未接入电源时,锂电池从BAT引脚送入经电感L2接入SW引脚,构成Boost电路。OUT引脚提供5 V电压输出。LED引脚由IC控制,指示充放电状态。

图7 ETA6093锂电池管理电路

3.3.2 IP5306_CK锂电池管理电路

数据手套模块锂电池管理采用IP5306_CK芯片来设计。相较前一种方案,IP5306-CK支持边充边放,自适应充电电流调节。还能提供2.4 A的同步5 V升压转换。考虑到控制板需要控制5个MG90S舵机,大约需要2 A的电流输出,故采用此方案[12]。模块电路部分如图8所示,IC的VIN引脚为5 V电压输入,VOUT引脚为5 V电压输出,SW引脚为控制端,BAT引脚为反馈引脚。LED1/2/3引脚用于指示电量及充放电状态。KEY引脚接独立按键即可实现升压输出与充电模式的切换。

图8 IP5306_CK锂电池管理电路

3.4 DC-DC电源与USB转串口模块

本系统中主控及大部分传感器都需要3.3 V供电,设计中采用SY8008 DC-DC芯片来设计,能够提供高达1.2 A的输出电流,模块电路部分如图9所示[13]。ESP32及JY901S都需串口调试及下载电路,系统采用CH342F实现USB转双串口方案,电路部分如图10所示[14]。串口A实现ESP32的自动下载和串行通信,串口B接入JY901S模块用于上位机调试。D+、D-引脚对应接入USB的Data信号线的USB_DP/USB_DN。VIO引脚为I/O端口电源输入,使用IC内部电源供电,外部须接退耦电容C1。

图9 SY8008 DC-DC电路

图10 USB转串口电路

4 软件部分

4.1 ESP32开发部分

在软件设计中ESP32搭载官方定制版FreeRTOS,提高系统运行的实时性和运行效率。在追踪器的软件设计上,由于主程序仅包含初始化硬件,IMU数据的轮询与发送,故不用设计多任务系统,仅需调用AsyncUDP库即可实现UDP客户端异步收发功能。在数据手套的软件设计上,因为输入硬件多,且优先级各不相同,还涉及接收数据进行舵机动态限位的控制,故采用多任务,主要设计启动了6个任务,如表1所示。系统闲时任务流程如图11所示。

表1 FreeRTOS任务名称及内容

图11 系统闲时任务流程

4.2 手指手势识别原理

手指手势识别原理就是基于真实情况下手指弯曲度的特征判断。硬件上通过电位器缠绕一线轴,通过手指拉扯线轴,就能获得手指弯曲的幅度。按照OpenVR的交互设备输入规范,可识别抓取手势、捏取手势及扳机手势。

4.2.1 抓取手势

在抓取手势下,食指、中指、无名指以及小指都是处于弯曲度超过50%的状态,也可以是多指弯曲超过50%,故对于此种手势的判断仅需将对应4指的弯曲度进行平均,若超过50%即可判定为抓取手势。

4.2.2 捏取手势

当处于捏取手势下,食指及拇指的弯曲是区别于其他手势的主要特征,当食指和拇指平均弯曲超过50%即可判定为捏取。

4.2.3 扳机手势

显然,食指扣动扳机的手势的唯一特征为食指弯曲度超过50%,仅判断食指单指弯曲大于50%即可认为处于扳机手势。

4.3 追踪器节点与SlimeVR Server通信

利用ESP32内部集成2.4 GHz Wi-Fi通信功能,多个追踪器节点可实时将IMU获取的人体姿态四元数送入PC端SlimeVR Server进行姿态解算,通信采用UDP协议。追踪器节点通过Broadcast在指定端口广播握手数据包,服务器监听端口上的所有信息。追踪器接收信息后执行Bind指令,绑定服务器IP地址。完成握手与绑定后便可以发送与接收数据。程序能实现多个追踪器同时与Server通信。SlimeVR开源接口基本帧数据格式如表2所示。数据帧内涉及多字节变量,以大端方式即高字节在前方式发送。客户端发送数据包类型包括心跳数据、握手数据、加速度、四元数、电池电量等。

表2 追踪器节点通讯数据格式

4.4 数据手套与OpenGlove通信

数据手套与OpenGloves开源软件基于蓝牙实现通信,在PC上搜索并连接名字为opengloves-left或opengloves-right的蓝牙设备,即可分别建立有效稳定的通信连接。数据帧内涉及多字节变量,以大端方式即高字节在前方式发送。客户端基本发送帧数据格式如表3所示。

表3 数据手套发送帧数据格式

为了制作了VR力反馈体感手套。设计中利用SteamVR驱动软件,根据VR游戏中各种3D物体的尺寸,计算出手指限位的数据并发送给下位机。客户端接收帧数据格式如表4所示。

表4 数据手套接收帧数据格式

5 验证及测试

上文对本系统的原理及技术实现进行了阐述,下面对系统关键指标进行测试、验证与分析。追踪器是动作捕捉的基础,而精度及延迟会大幅影响VR下的沉浸感,若动作捕捉精度不佳或延迟较高,则动作捕捉的效果会大打折扣。故此部分的测试从精度、吞吐量及延迟入手。

5.1 动作捕捉系统精度

整体的动作捕捉系统精度来自于单个节点的精度,又分为静态精度和动态精度,静态指在节点保持不动时其自身传感器产生的误差,动态精度指运动特定角度后IMU输出姿态与实际姿态的误差。由于人体捕捉多为运动状态,故精度测试以动态精度为主。

测量方法:将节点平放于桌面,从上位机中连续读出其9轴数据以及运动融合后的欧拉角数据。精确地分别沿X轴、Y轴、Z轴轴随机方向旋转45°、90°、180°,读取每次手动旋转后传感器输出的数据,进行对比和分析。从表5可知,X轴、Y轴的精度较高;Z轴精度低于X轴和Y轴,根据方差来看,Z轴数据较X轴、Y轴波动更大,符合9轴IMU的特性。追踪器捕捉精度满足动作捕捉需求,可以实现较好的捕捉效果且提供不错的一致性。

表5 不同转角的精度测试数据

5.2 吞吐量及延迟

吞吐量及延迟可以通过SlimeVR Server上位机读出,经记录及运算得到结果如表6所示。从表6可知,平均延迟仅6.33 ms,最小延迟2 ms,最大延迟11 ms,实时性相当好。该系统的延迟完全可以做到无感,吞吐量也完全足够应对5个追踪器的输入。所以延迟和吞吐量也能满足动作捕捉需求,可以实现较好的实时捕捉效果且提供不错的沉浸感。

表6 吞吐量及延迟测试数据

5.3 数据手套测试

由于手套部分运动大多体现交互,对精度、吞吐量及延迟的要求不高,故该部分测试主要针对整体可行性及续航能力。系统使用了SolidWorks建模设备的外壳部分,建模设备的外壳可保证配合紧密且有良好的结构强度。外形及佩戴效果如图12所示。经测试,手套全重约450 g,与3D打印部件接触部分有泡沫胶带作为缓冲,用户佩戴舒适性较好,短时间(30~90 min)佩戴无不适感。电池续航与动态限位使用的舵机动作的频次有关,完全关闭舵机续航约为120 min,开启舵机且动作频繁续航约为30 min。系统对手指弯曲的捕获灵敏,手势触发快速,能满足用户正常的交互需求。

图12 手套外形及佩戴效果

6 结语

本文设计了一种基于动作捕捉追踪器及数据手套的VR拓展设备。通过开源项目的支持,本设计可在已有家用VR头戴及其配套定位手柄的情况下,提供腰部、腿部、脚部及手指等部位的追踪,最终实现在VR软件中拥有全身追踪效果。本设计仍然存在不足之处,后续可增加自行校准磁力计的功能,解决磁场环境大幅变化时姿态解算不精准的问题;另外,数据手套的体积、重量还需要进一步优化。

猜你喜欢
手势手套姿态
棉手套
攀爬的姿态
挑战!神秘手势
做只手套好过冬
V字手势的由来
全新一代宋的新姿态
跑与走的姿态
神秘的白手套
棉手套
胜利的手势