杨 成, 冉 冀, 吴 钟
1. 武汉商学院 体育学院 武汉 430056 2. 华中科技大学 电子信息与通信学院 武汉 430074
基于九轴惯性传感器的人体动作捕捉系统*
杨成1,冉冀2,吴钟1
1. 武汉商学院 体育学院武汉430056 2. 华中科技大学 电子信息与通信学院武汉430074
传统动作捕捉与分析采用机械、光学及声学方式,所占空间大,价格昂贵,操作也较为复杂。研究了基于九轴惯性传感器的人体动作捕捉系统,将惯性传感技术与人体科学相结合,在人体上抽象出17个关节点,通过这17个关节点采集人体运动数据。数据通过无线保真方式发送至计算机,在计算机上对数据进行处理,得到驱动人体模型运动的姿态数据,从而控制虚拟模型进行运动展示。这一动作捕捉系统具有经济、便利、不受场地和天气因素影响等多种优势,实现了对人体运动姿态的实时采集与分析,可以使运动训练更加科学与高效。
惯性传感器;动作捕捉;设计
动作捕捉是利用机械装置、光学或传感器等设备获取人体或其它物体运动数据,并将这些运动姿态重现的技术[1]。在日常生活中,较为常见的应用动作捕捉技术是在动画电影及体感游戏中,首先由表演者穿戴上能够采集运动数据的相关设备,然后利用软件建模,再结合之前所得到的运动数据使建立的模型能够与表演者同步运动或展现出表演者的动作。如今,主流的动作捕捉技术见表1。
惯性式动作捕捉通过九轴惯性传感器航姿参考系统和惯性测量单元测量表演者运动加速度、方位、倾斜角等参数,不受环境干扰影响,不怕遮挡,捕捉精确度高,采样频率可达每秒1000次或更高。由于采用高集成芯片及模块,设备体积小、质量轻,性价比高。将九轴惯性传感器直接佩戴在表演者头上,或将17个九轴惯性传感器组成数据服穿戴在表演者身上,再通过Zigbee、蓝牙、无线保真等方式与主机相联,可以分别跟踪头部和全身动作,并实时显示完整的动作信息。
一套完整的动作捕捉系统可以划分为三个主要部分。第一个部分是数据采集模块,这是整个动作捕捉系统的根基,所有其它模块都需要用到九轴惯性传感器所采集的人体姿态数据,如果采集的数据不准确,将会使最后的虚拟人体模型显示效果大打折扣。第二部分是数据发送模块,如果发出的数据出现大量丢包现象,无疑也会对动作捕捉的准确性造成致命影响。第三部分是建立一个标准的人体骨骼模型,并且将所采集到的表演者每个节点的数据绑定到人体模型的相应节点上,同时在正反向运动学算法的帮助下使虚拟模型的运动更加贴近于真人[3]。
系统框架可分为硬件及软件两个部分,如图1所示。
图1 动作捕捉系统框架
人体主要由身体躯干、左右上肢、左右下肢及头颈部等构成,因此,在以上部位放置适当数量的九轴惯性传感器,可以获取人体运动的全部信息。由于人体中的很多骨骼是刚性的,无法曲折,因此只需在连接刚性骨骼的关节点处放置九轴惯性传感器。经过对人体骨骼模型的简单抽象,可以在人体上抽象出17个关节点,通过这17个关节点的数据可以基本完整地采集人体运动姿态的所有主要数据,然后将采集到的数据通过无线保真方式发送至计算机,再在计算机上对采集到的数据进行处理,即可得到驱动人体模型运动的姿态数据,从而控制虚拟模型展示相同的运动。另外,还可以将人体运动的数据保存下来,以便其它软件或平台调用[4]。
硬件系统的框架主要包括三个部分。第一个部分是传感器硬件,主要功能是收集数据。第二个部分是数据汇集及发送,作用是汇集之前各节点的数据,再将数据打包发送。第三个部分是电源,为各个芯片供电以确保系统正常运转。系统的硬件框架如图2所示。
图2 动作捕捉系统硬件框架
整个系统的软件框架如图3所示。
图3 动作捕捉系统软件框架
根据软硬件框架,便可得到整个系统的设计方案,如图4所示。
图4 动作捕捉系统设计方案
系统中,需要设计17个九轴惯性传感器。所有九轴惯性传感器都由JY901模块采集运动数据,然后通过串口通信传送至STM32微控制器,STM32微控制器与SP3485半双工收发器之间也通过串口进行通信。之后,再将全部SP3485半双工收发器串联起来,并由最后一个SP3485半双工收发器将数据传送至串口转无线保真发送。图4中为了使框架简洁明了,将 1~17号九轴惯性传感器全部串联在一起,实际上若单条线上挂载了过多的九轴惯性传感器,将会导致接收不到数据,所以最后实际应用中共分为5条线,每条线上挂载了2~4个九轴惯性传感器不等。这些九轴惯性传感器分别固定在影响人体运动的17个核心关节点上。当数据汇集及发送部分接收数据完成后,便通过无线保真方式将数据打包再经路由器发送至计算机。计算机上的三维模型软件调用程序获取数据,将采集到的节点数据和三维模型的相应节点进行绑定,并经过一系列融合计算后作为驱动数据来控制虚拟人体模型进行运动[5]。在演示完成后可以保存运动数据,作为资料备份或提供给其它计算机图形软件使用。
捷联式惯性导航系统在几十年前就开始应用于各类飞行器上,它的工作原理与平台式惯性导航系统颇为相似,但又有不同之处[6]。捷联式惯性导航系统去掉了传统的实体平台,直接利用安装于机体上的加速度计及陀螺仪通过计算机数学平台来获取飞行器的位置速度及姿态信息。
动作捕捉系统利用数学平台,将传感器坐标系轴向加速度信息变换为地理坐标系绝对加速度,对加速度做二次积分得到位移信息[7]。系统同时将陀螺仪测量的角速度减去地理坐标系中相对惯性空间的角速度,从而得到传感器坐标系相对地理坐标系的角速度。
捷联式惯性导航的基本原理框架如图5所示。
图5 捷联式惯性导航原理框架
由图5可知,加速度计和陀螺仪的原始数据经过误差补偿和修正之后可以得出四元数,由四元数可转化为由传感器坐标系到地理坐标系的方向余弦矩阵,得出绝对加速度,再经过二次积分,得到相关位置信息[8]。由四元数还可转化为欧拉角,获取载体的姿态信息。将以上两部分合并输入三维模型软件进行融合,并加入运动学算法进行进一步处理,即可达到动作还原的目的。
虽然传感器采集的数据经过捷联式惯性导航算法的融合解算已经比较准确,但是由于传感器绑在人体关节点上的具体位置有可能会有轻微偏差,加之传感器本身测量数据的轻微误差会导致虚拟人体模型的运动姿态与真实表演者相比产生一定失真度,以及设计采取收集表演者17个关节点的运动数据,一些细节部位的运动数据并没有采集到,因此会使虚拟人体模型的运动显得僵硬。利用运动学算法对模型进行约束,将使人体的运动变得更加自然和逼真[9-10]。
运动学算法分为正向运动学算法和反向运动学算法。简单而言,正向运动学由父骨骼的旋转运动带动一级子骨骼的旋转运动,一级子骨骼的旋转运动再带动二级子骨骼的旋转运动,依次类推,层层递进直到最后一个子骨骼。反向运动学则由子骨骼的旋转运动带动上一级骨骼的旋转运动[11]。就三维建模软件而言,一般由一个末端效应器(一条关节链上的最后一个关节点)、中间若干关节点和一个目标位置(一条关节链上的起始关节点)所构成,当末端效应产生运动或旋转时,会带动整条关节链一步步运动,直至目标位置[12]。
忽略STM32初始化程序,则整个程序主要包含读取JY901数据程序和发送数据程序,以下对程序设计做详细说明。
主程序的设计流程如图6所示。
图6 主程序设计流程
主程序首先对STM32进行初始化,然后需要加入一个延时函数,该函数与九轴惯性传感器数据采集速率相关。由于采用串口通信,因此要对串口进行初始化。本设计主要用到了两个串口USART1和USART2,USART2是STM32与JY901相连的串口,USART1是STM32发送给SP3485所用的串口。之后还要设置中断优先级分组,对应函数是NVIC_Configuration。此外,为了判断STM32是否处于正常工作状态,还在电路中加入了发光二极管,所以程序中还要对发光二极管进行初始化。当USART1发送标志开时,开始发送数据至SP3485。查阅JY901用户手册,发送的数据共28Byte,以*号开头,然后是传感器地址,之后是24Byte的数据,加速度、角速度、角度、磁场强度每项数据占6Byte,即每项数据的X、Y、Z轴各占 2Byte,最后以#号结尾。
接收部分的程序放入了主中断服务例程中,函数名为USART2_IRQHandler,即使用USART2来接收数据。首先需要判断是否产生中断,即JY901是否有数据传送[13],若有,则由函数 USART_ReceiveData 接收数据,并由回调函数jyCal将数据放入数据缓冲区ucRxBuffer,读取完毕后再由函数USART_ClearFlag来清零标志位。
不论接收还是发送,都使用了串口,所以如何初始化串口及满足何条件才可以发送数据至关重要。串口的程序设计流程如图7所示。
图7 串口程序设计流程
由图7可知,首先对串口进行初始化,在主程序中将其波特率设为115200Baud。在初始化时,先使用函数GPIO_InitTypeDefGPIO_InitStructure对通用输入输出端口进行初始化设置,再使用函数USART_InitTypeDefUSART_InitStructure对具体串口进行初始化设置[14]。
另外,由于USART1_TX对应的引脚为PA.9,USART1_RX对应的引脚为PA.10,因此还要对这两个引脚进行初始化,PA.9为复用推挽输出(GPIO_Mode_AF_PP),PA.10为浮空输入(GPIO_Mode_IN_FLOATING),USART2类似。
初始化设置串口时,需要设置串口波特率和数据格式[15],并设置一个停止位,不需要设置奇偶校验位。此外,还需设为无硬件数据流控制,并设置收发模式。
需要注意USART1的中断服务程序USART1_IRQHandler,这一函数的主要作用是接收中断和读取数据缓冲区数据[16],并在数据读取完毕后开发送标志位,使数据可以发送。中断服务程序的设计流程如图8所示。
图8 USART1中断服务程序设计流程
由图8可见,接收到中断后开始读取数据,此处需要做判断数据是否以*号开头,防止数据混乱。如果满足条件,则开始读取之前置于数据缓冲区的数据,遇到#号则停止读取。此时需要判断地址是否匹配,如果匹配才开USART1数据发送标志位。开数据发送标志位后,可以由STM32向SP3485发送数据[17]。至此,传感器数据传输的软件部分均已实现,下一步需要考虑如何在三维模型软件端接收无线保真方式发送来的数据。
路由器要将数据传输至三维模型软件,需要用到套接字编程(Socket)[18]。Socket的实现框架如图9所示。
图9 Socket实现框架
整段代码较为冗长,此处对主要函数进行简要说明。本设计将Socket置于线程中,并通过线程来管理Socket。在线程函数中,第一步是对WinSock进行初始化,如果初始化失败则输出错误信息[19]。第二步是使用函数jy->m_sock=Socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)来创建服务器Socket,如果创建异常,同样会输出错误信息。第三步需要对相关信息进行声明。第四步是端口绑定,由函数iErrorMsg=Bind(jy->m_sock,(sockaddr*)&serverAddr,sizeof(serverAddr))来实现。第五步是由函数Listen(jy->m_sock,1)进行监听,当监听到有数据传来时,便调用函数Accept(jy->m_sock,(sockaddr*)&tcpAddr,&len)。
以上流程完成后便可以进行数据交换。在进行数据交换时,服务器端依次发送每个九轴惯性传感器的地址指令,匹配的传感器接收后解析指令,再发送最新的采集数据。服务器端接收到最新数据后发送下一个九轴惯性传感器的地址指令,如此周而复始获取所有九轴惯性传感器的数据[20]。本部分功能由函数GetData()完成。
当所有数据交换完成后,可由函数CloseSocket(jy->m_sock)关闭Socket。
在Motion Builder软件的文件夹中有一个OpenRealitySDK文件夹,里面包含了开发所需的所有头文件、库文件、脚本及一些基本示例。本设计主要使用其中的Devices文件夹,该文件夹中包含了像机跟踪、输入输出、录制播放列表及同步锁定等多种控件[21],每个控件都有Device、Hardware、Layout三个文件及相对应的头文件。Device文件的作用相当于控制器,Hardware文件的作用相当于模型、Layout文件的作用相当于视图[22]。Device文件主要负责操作模型相关内容,如录制保存帧数据、调整骨骼、调节摄像机角度等。Hardware文件在本设计中主要负责建立骨骼、获取相应关节点数据和刷新数据等工作。Layout文件主要负责与页面布局及用户可视相关的内容。
三维模型软件的设计流程如图10所示,主要有三个关键环节: 数据接收、骨骼构造,以及将数据传送至相应的虚拟骨骼关节点。由于单一的骨骼会使虚拟人体模型视觉效果不佳,因此需要对骨骼进行蒙皮处理,这样得到的人体模型逼真度更高,也更有利于观察三维模型的动作是否和表演者一致。三个关键环节主要在Ordeviceskeleton_hardware.cpp中实现[23],程序中对Socket的加载、创建,以及传输控制协议连接请求的发送、接收等操作都进行了封装。
图10 三维模型软件设计流程
数据测试利用传输控制协议、用户数据报协议测试工具,设置好网际协议及相关端口后,创建服务器并启动,若连接成功便会自动出现客户端界面。以16进制发送命令2A0123,其中01代表地址,亦即传感器的编号。发送命令之后,若连接通畅,则会接收到以16进制表示的回传数据2A-01-XXX-23,其中XXX为加速度、角速度及磁场强度的原始数据,每个轴向的数据占2Byte。数据传输测试截图如图11所示。
在确定数据能够正常发送和传输后,结合三维模型软件进行单节点测试,目的是测试数据可否正常被三维模型软件解算及测试数据采集模块的灵敏度与准确度。在测试中,数据采集模块将采集到的原始数据以无线保真方式发送至三维模型软件中,然后由捷联式惯性导航算法对数据进行处理,得到较为准确的位移和角度信息,再建立骨骼,进行数据绑定,并利用运动学算法对数据进行进一步融合解算[24],这样就可以利用所采集的姿态数据来驱动控制模型同步运动。单节点测试效果如图12所示,三维模型运动姿态与表演者基本一致。
由于节点绑定、端口号及网际协议设置等操作都已在代码中完成,因此在软件中只需将修改完成后的骨骼添加至视图界面进行角色化,再对骨骼进行蒙皮等操作即可。在表演者身上佩戴传感器时需要注意,由于传感器体积及人体自身身体构造等原因,不可将传感器佩戴至手腕、手肘、膝盖、脚踝等部位,而是将传感器置于这些关节点向前1~2cm 处。此外,需要注意佩戴至同一躯干的传感器位置需尽量保持在同一直线上,以保证初始化时三维模型和表演者同姿态[25]。
完成上述操作后,便可收集表演者的运动数据来控制三维模型同步运动。如图13所示,当表演者展现出不同的运动姿态时,创建的三维模型会随即运动呈现出相同的姿态,由此实现设计的基本目的,即将捕捉到的真实人体运动数据用于控制虚拟人体模型运动。为尽可能用到所有关节点,采取了双手平伸、跑步、扎马步及搏击等动作。
图11 数据传输测试截图
图12 单节点测试效果图
图13 动作捕捉系统结果显示
三维模型的动作与表演者的动作几乎一致,证明了动作捕捉系统的设计正确性与实现有效性。
利用传感器进行动作捕捉,设计了人体动作捕捉系统,包括整个系统的设计框架及软硬件实现的详细方案,考虑了数据的采集、传输、处理及图像显示等内容。选用JY901作为数据采集的核心,并以其为基础完成一个可采集、可发送、可接收的单传感器节点。对传感器的连接方式及如何在人体上布置传感器进行了设计和实现。将各传感器与节点通过RS485连接,以汇集模块中的SP3485作为主机,以各传感器节点中的SP3485作为从机。主SP3485连接串口转无线保真模块后,由该模块将数据打包并发送至三维模型软件,软件中利用Socket来接收。对三维模型软件设计了整体框架,实现了建立骨骼、获取数据及数据绑定等功能。
基于九轴惯性传感器的人体动作捕捉系统已基本建立,下一步将通过采用更高精度芯片、优化代码等手段,提升平台的性能。相信随着科技的发展,动作捕捉技术将会得到越来越深入的研究和应用。
基于九轴惯性传感器的人体动作捕捉系统基本满足了课题的既定要求和目标,能够进行人体动作的捕捉,但仍有不足之处,需要从以下几方面进行改进。
(1) 人体模型基于动力学人体骨骼模型建立,只能表征人体的基本运动特征,对人体的细微动作,如面部表情、肌肉抖动等都不能进行捕捉,因此需要提高传感器的数据采集精度。
(2) 由于设备的限制,没有采用光学设备对传感器的运动姿态进行精确测量,因此没有准确的参考数据以供研究分析。下一步,需要采购光学设备进行姿态测量。
(3) 目前由于计算人体轨迹的方式比较复杂,系统只能捕捉人体静止不动时的动作姿态,还不能捕捉人体运动时的姿态,这将是以后研究的重点。
[1] WITTMANN F, LAMBERCY O, GONZENBACH R R, et al. Assessment-driven Arm Therapy at Home Using an IMU-based Virtual Reality System[C]. Rehabilitation Robotics(ICORR),2015 IEEE International Conference on, Singapore, 2015.
[2] COSTA R, GUO R K, QUARLES J. Towards Usable Underwater Virtual Reality Systems[C]. Virtual Reality(VR),2017 IEEE, Los Angeles, 2017.
[3] MUMTAZ N, ARIF S, QADEER N, et al. Development of a Low Cost Wireless IMU Using MEMS Sensors for Pedestrian Navigation[C]. Communication, Computing and Digital Systems(C-CODE), International Conference on, Islamabad, 2017.
[4] KANG C W, YOO Y M, PARK C G, et al. Performance Improvement of Attitude Estimation Using Modified Euler Angle Based Kalman Filter[J]. Journal of Institute of Control, Robotics and Systems,2008,14(9): 881-885.
[5] 孙克诚.三轴飞行仿真平台控制系统的设计与研究[D].南昌: 南昌航空大学,2016.
[6] 王伟栋.基于微惯性技术的数据手套研究[D].上海: 上海交通大学,2014.
[7] HSU Y L, WANG J S, CHANG C W. A Wearable Inertial Pedestrian Navigation System with Quaternion-Based Extended Kalman Filter for Pedestrian Localization[J]. IEEE Sensors Journal,2017,17(10): 3193-3206.
[8] SIMON D. Optimal State Estimation: Kalman, H∞ and Nonlinear Approaches[M]. Hoboken: Wiley-Interscience, 2006.
[9] 向泽锐,支锦亦,徐伯初,等.运动捕捉技术及其应用研究综述[J].计算机应用研究,2013,30(8): 2241-2245.
[10] 黄波士,陈福民.人体运动捕捉及运动控制的研究[J].计算机工程与应用,2005,41(7): 60-63.
[11] 李佳.多视角三维人体运动捕捉的研究[D].北京: 北京交通大学,2013.
[12] NOIUMKAR S, TIRAKOAT S. Use of Optical Motion Capture in Sports Science: A Case Study of Golf Swing[C]. Informatics and Creative Multimedia(ICICM),2013 International Conference on, Kuala Lumpur, 2013.
[13] 刘贤梅,李冰,吴琼.基于运动捕获数据的虚拟人动画研究[J].计算机工程与应用,2008,44(8): 113-119.
[14] 姚旭东.基于运动捕捉数据的虚拟人建模及运动仿真[J].计算机仿真,2010,27(6): 225-229.
[15] 刘博.基于MEMS传感器的动作捕捉系统开发设计[D].北京: 北京理工大学,2011.
[16] 杜晓明,陈岩.无线传感器网络研究现状与应用[J].北京工商大学学报(自然科学版),2008,26(1): 41-44.
[17] 王建阁,李娟,丁波,等.基于JN5139的无线温湿度监控系统[J].计算机测量与控制,2013,21(4): 904-906.
[18] 李启雷,金文光,耿卫东.基于无线惯性传感器的人体动作捕获方法[J].浙江大学学报(工学版),2012,46(2): 280-285.
[19] 李春霞,杨克俭,李波.人体骨架模型的建立及IK问题的一种解决方式[J].武汉理工大学学报(交通科学与工程版),2013,27(6): 815-818.
[20] 陈明志,陈健,许春耀.基于两段式IK与关键帧的虚拟人运动控制[J].计算机工程与设计,2012,33(7): 2760-2765.
[21] 沈娟,李建微.动作捕捉中的动画驱动及运动编辑技术综述[J].计算机与数字工程,2008,36(3): 103-106.
[22] 唐文彦.传感器[M].5版.北京: 机械工业出版社,2014.
[23] KHOSHNOUD F, DE SILVA C W. Recent Advances in MEMS Sensor Technology-mechanical Applications[J]. IEEE Instrumentation & Measurement Magazine,2012,15(2): 14-24.
[24] 秦勇,臧希喆,王晓宇,等.基于MEMS惯性传感器的机器人姿态检测系统的研究[J].传感技术学报,2007,20(2): 298-301.
[25] YADAV A, NAIK N, ANANTHASAYANAM M R, et al. A Constant Gain Kalman Filter Approach to Target Tracking in Wireless Sensor Networks[C]. Industrial and Information System(ICIIS),2012 7th IEEE International Conference on, Chennai, 2012.
(编辑: 启德)
Traditional motion capture and analysis are conducted in mechanical, optical or acoustic modes, however theses modes occupy large space and cost with complicated operations. A human body motion capture system based on 9-axis inertial sensor was studied, the inertial sensing technique was combined with human science to abstract 17 articulation points from human body, human motion data were collected through the 17 joints while the data were sent to the computer by Wi-Fi. The data was processed on the computer to obtain the posture data that drove the model motion in order to control the virtual model to show the motion. This motion capture system has the advantages of economy, convenience with no affects from other factors such as site and weather. Due to that it is possible to realize real-time acquisition and analysis of the posture as the human body is moving it can make sports training more scientific and more efficient.
InertialSensor;MotionCapture;Design
TM743;TP391.4
A
1674-540X(2017)04-001-08
*2016年湖北省高等学校优秀中青年科技创新团队计划项目(编号: T201628)
2016年武汉市属高校产学研项目(编号: CXY201612)
2017年8月
杨成(1985—),男,博士研究生,讲师,主要研究方向为运动人体仿真与运动训练,E-mail: 506860650@qq.com