基于Kinect 和ODE 的人体运动建模与仿真∗

2020-11-02 09:01苏势林闫雨奇李宝川潘琢金
计算机与数字工程 2020年9期
关键词:刚体骨架驱动

杨 华 苏势林 闫雨奇 李宝川 潘琢金

(沈阳航空航天大学计算机学院 沈阳 110136)

1 引言

人体运动建模与仿真是一门涉及图像处理,模式识别,人工智能等领域的交叉学科,且运动捕捉技术已广泛地应用于影视动画,体育训练,机器人驱动和虚拟现实等实际场景中[1]。为生成满足物理运动规律的虚拟角色运动,利用开源软件研制仿真平台则是一个热点。如日本AIST 与东京大学联合研发的开放式仿人机器人平台OpenHRP,但OpenHRP 软件开发规模大,对机器人生产环境要求高,因此难以大规模地应用与借鉴[2]。ODE(Open Dynamic Engine,开源动力引擎)是常用的开源动力引擎之一,很多仿人机器人平台在此基础上搭建,如GazeBo,Webots,V-REP,Mujoco等[3]。

近年来,基于物理角色运动是计算机动画研究领域中最活跃的领域之一[4]。例如:文献[4]通过Kinect 设备获取人体运动的原始坐标数据,计算人体关节旋转角度将其保存在BVH 文件中,用于动画生成[5]。除了直接利用光学设备捕获人体运动数据外,一些研究人员也在已有运动库中引入机器学习等理论合成人体运动。Daniel Holden 等基于深度学习框架实现了人体运动合成和编辑,在大量动捕数据集上进行训练,由卷积自编码器学习运动流形来生成复杂动作[6],Jack M.Wang 等提出了一种非线性的高斯隐变量模型,使用时间序列预测方法从模型中合成新的运动序列[7]。Peng 等则采用强化学习策略实现了物理角色的稳定控制,结合动捕数据和任务目标来完成用户指定的输入[8]。而基于机器学习或深度学习等理论生成的人体运动往往训练周期过长,参数变量多,难以在真实环境中测试和应用。

本文利用Kinect 深度视觉传感器采集人体运动位姿数据,计算转换成关节Z-Y-X 轴向上的欧拉角存储于BVH 中,为数据驱动提供支撑。在ODE 上搭建一个全尺寸并具有真实物理环境的虚拟机器人,参考动捕数据,使用路径跟踪的方法来增强物理模拟结果的真实感,结合PD 控制算法计算虚拟机器人的关节扭矩,从而驱动虚拟机器人模拟捕获动作。

2 Kinect数据的BVH转化

为给数据驱动和数据分析提供支撑,构建从Kinect 位姿数据向运动数据转化,记录人体运动序列,并在虚拟仿人机器人上再现和验证相关人体运动。将Kinect 捕获到的骨骼四元数数据转化成欧拉角存储于BVH 文件中,目的是建立人体运动模型,驱动物理角色,并生成自然逼真的虚拟仿人机器人运动。

2.1 Kinect数据采集

Kinect 是微软Xbox 360 外接3D 体感摄影机,具备即时动态捕捉,影像识别,麦克风输入,语音识别等功能。Kinect for Windows SDK v1.6 平台为用户提供应用程序接口来采集人体运动序列,为研究者提供实验环境和技术支持。近年来,已有大量的人体运动数据集基于Kinect采集,如NUCLA Multi⁃view Action3D,UTD-MHAD 等运动库[9~10]。人体模型主要描述为几何拓扑结构及其物理属性,这些模型往往根据实际场景抽象出来。其中骨骼追踪技术是Kinect核心技术之一,它可准确地标定人体20个关键点数据,并实时跟踪。Kinect 利用景深视觉获取人体关节点信息,并以Hip 为根节点组成一棵树形层次结构,如图1所示。

图1 Kinect骨架层次结构

2.2 BVH数据文件

BVH 最初由Biovision 公司设计的动捕文件格式,以此提供运动数据分析和处理服务[11]。BVH文件包含两部分,骨架信息和运动数据,骨架信息描述了以人体髋关节为根节点的骨架层次结构,包括旋转、关节偏置以及通道数等信息。运动数据则记录了按骨架层次结构实时捕获到的关节欧拉角数据,便于人体运动建模和运动生成,如图2 所示。其中骨架信息以关键字“HIERARCHY”为开始;“ROOT”确定髋关节(Hip)为根节点;“JOINT”为父节点下的所属关节;“OFFSET”则为子节点相对于父节点的偏置;“CHANNELS”为通道数。ROOT 总是拥有6 个CHANNELS,而JOINT 只有3个CHANNELS,相对于ROOT 而言,缺少了坐标系的X-pos,Y-pos,Z-pos 信息。在构成人体骨骼模型的所有关节中,除根节点可以同时进行平移和旋转外,其他关节一般被设定为旋转关节,因此骨架模型的其他节点的位置是通过相对于其父节点的偏移和旋转信息而得。则子节点对于父节点的变换矩阵为M=T×R,T表示平移矩阵,R表示旋转矩阵。如计算右足(R_FOOT)在世界坐标系下位置:

其中PR_FOOT是需要计算的世界坐标,POFFESET_R_FOOT则为R_FOOT 相对于R_ANKLE 的偏置。同理,其他节点根据相应的平移和旋转变换即可求出。

图2 BVH文件结构

2.3 转化算法

Kinect采用四元数描述骨架位姿信息,而BVH文件记录的是人体关节欧拉角信息。因此,本文将Kinect数据转化为BVH记录格式,从而实现采集数据对人体运动模型的实时驱动。首先,依据Kinect人体骨架信息结构,创建BVH 骨架层次信息,如图2(a)所示。其次,建立Kinect 四元数向BVH 中Z-Y-X 轴向上的欧拉角的转化算法,根据需要,既可以存储于BVH 数据文件中,也可以直接对人体运动模型进行仿真驱动。转化算法推导过程如下:

骨架四元数定义为

其 中ε0,ε1,ε2,ε3为 实 数,满 足=ijk=-1。将式(2)改写为q=[ε0,ε1,ε2,ε3]=[w,→,其中w为标量,=(ε1,ε2,ε3)为矢量部分。四元数绕旋转轴旋转一个角度的旋转矩阵为

并将其改写成:

而BVH 运动信息中绕Z-Y-X 轴旋转的欧拉矩阵如式(4)所示:

其中,cα、sα分别表示sin(α)、cos(α),令式(3)和式(4)式中的旋转矩阵相等,计算r11和r21的平方和的平方根求得cβ。然后用-r31除以cβ再反正切求得β角。只要cβ≠0,用r21cβ除以r11cβ再反正切求得α角,同理求得γ角,其中Atan 2(y,x)是反正切函数,综上,完成Kinect 四元数向BVH 欧拉角的转化计算。

3 基于的ODE虚拟仿人机器人建模

ODE能对刚体进行仿真计算,完成刚体关节间扭矩输入,并在约束条件下实现碰撞检测。ODE包含:作用力发生器计算刚体对象所受作用力并处理刚体运动行为;碰撞检测器确定刚体对象间以及刚体与静态场景间的接触行为,进而描述碰撞效果。为实现人体动作的仿真再现及运动控制算法的研究,本文基于ODE建立了一个虚拟仿人机器人。

3.1 虚拟机器人物理参数

与Kinect骨架模型相对应,该虚拟仿人机器人由16 个刚体对象(头,躯干、髋、上臂、下臂、手、大腿、胫、和脚)和15 个球窝关节(连接刚体结构)构成,其外形如图3所示,质量和尺寸如表1所示。将作用力生成器附加在关节处,实现刚体对象间的线性相对运动来模拟人体运动行为。

表1 虚拟机器人物理参数

图3 机器人

3.2 动力学计算

本文借助ODE 完成虚拟仿人机器人动力学运算,预设控制算法实时计算并调整各关节扭矩,实现对虚拟仿人机器人进行连续的姿态跟踪及控制,并在约束条件下对虚拟机器人实现碰撞检测[12]。采用的刚体控制系统的实现方法如下:

刚体动力学状态方程[13~14]:

式中τ是n×1 的刚体转矩矩阵,M(θ) 是刚体的n×n质量矩阵,V(θ,θ̇)是n×1 的离心力和哥式力矢量,G(θ)是n×1 重力矢量。θ,θ̇,θ̈分别代表刚体关节角度、角速度、角加速度。M(θ),G(θ)的元素是关于刚体θ的复杂函数,而V(θ,θ̇)中的元素是关于θ和θ̇复杂函数。引入摩擦模型(或者其他非刚性效应),假设这个摩擦模型是关节角度和角速度的函数,则在式(6)上加上一项F(θ,θ̇),得到:

对于式(7)中复杂系统的控制问题可分解控制器方法求解,令:

式中E表示刚体期望轨迹与实际轨迹之差,E和分别为n×1 维角度误差矢量和角速度误差矢量,求得的控制系统如图4所示。

图4 刚体控制系统的实现方法

综上,很容易求得刚体系统闭环特性的误差方程:

3.3 数据驱动

虚拟机器人的控制非常复杂,涉及的参数众多,因此常用动捕数据路径跟踪和传统控制方法结合来优化控制[15~16]。本文用位姿数据计算关节扭矩,驱动虚拟仿人机器人对Kinect采集人体运动数据的仿真再现。通过记录真实的动捕数据来驱动虚拟仿人机器人,具有真实逼真、高效率等优点,提高了动捕数据的利用率。本文采用PD控制算法来实现虚拟机器人动作的生成与控制,PD 控制通过计算动捕数据与虚拟机器人姿态间差异来施加关节内部扭矩,从而实现运动捕获数据对虚拟机器人的驱动控制,如图5所示。

图5 人体数据驱动

根据动捕数据与虚拟机器人之间的姿态差异获取关节角度差值,并使用比例微分(PD)控制器对关节施加扭矩来维持虚拟机器人的运动姿态[17]。通过动力学给关节施加扭矩,并反馈控制驱动虚拟机器人跟踪运动捕获数据来保持姿态平衡。根据式(11)可得输入关节的扭矩为

τ为关节内部扭矩,θd,θ̇d为关节的期望姿态与期望角速度,θ,θ̇为关节的当前角度和角速度,Kp和Kd分别比例系数与微分系数。

4 实验

本文实验在一台2.4GHz CPU 和4GB 内存的PC 机上运行,基于Visual C++和ODE 引擎编程建立仿真实验环境,由两部分组成:1)Kinect 捕获人体运动数据转化计算为BVH 格式数据;2)基于ODE建立全尺寸虚拟仿人机器人,为人体运动仿真再现及控制算法提供运动分析和验证平台。该平台包含了物理引擎提供用户对虚拟仿人机器人行为的高层控制,实现了基于姿态差、PD 控制算法等计算关节力矩驱动角色模型跟踪动捕数据,对外界扰动和环境变化做出实时反馈。不仅可以提供在线人体运动仿真,在已有的运动库中提取动捕数据离线编辑新的运动序列来驱动虚拟机器人,生成自然逼真的人体运动,实验过程如图6 所示。由于动捕数据含有丰富的细节信息(关节角度、角速度、角加速度等),结合物理动画引擎能生成自然逼真的人体运动,并能对虚拟场景中的各种事件进行感知,做出相应的反馈行为。数据驱动方法继承了动捕数据的自然逼真性和关节约束性因素,通过实时仿真计算完成虚拟人的运动生成,很大程度上避免了姿态奇异因素。

在搭建的仿真平台上进行虚拟机器人仿真模拟,实验选取行走、抬腿、挥手等动捕数据来驱动虚拟机器人模拟出对应的运动姿态,如图7所示。

图6 虚拟机器人驱动控制过程图

图7 虚拟机器人运动模拟

上述系列方法可用于仿人机器人的研制过程。在项目组研制的轻型仿人机械手臂上,用BVH 数据文件进行驱动控制,实现对人体手臂动作的真实再现。如图8 所示,该机械手臂包含8 个自由度(末端夹具1 个),能够比较准确地完成上举、平伸、侧抬等动作,误差范围在厘米级,分析原因是因为机械手臂的部件加工精度及舵机尺差等因素造成。

图8 上肢运动姿态样机测试

5 结语

本文构建了Kinect 从关节点位置数据向肢体位姿数据转化,存储于BVH中,基于ODE建立虚拟仿人机器人实现了人体运动的仿真再现,以及为控制算法提供验证平台。完成了Kinect数据采集、离线BVH 转换、仿人机器人姿态计算、关节扭矩计算、仿真驱动等系列实验,并在项目组研制的轻型仿人机械手臂上,实现BVH 数据文件对机械手的驱动控制和真实再现。实验表明该系列方法可用于仿人机器人研制、虚拟现实等相关研究。

猜你喜欢
刚体骨架驱动
数据驱动世界。你得懂它 精读
重力式衬砌闸室墙的刚体极限平衡法分析
基于模糊PI控制的驱动防滑仿真系统分析
浅谈管状骨架喷涂方法
汽车用减震件过盈配合骨架装配模具及装配技术
浅析平面运动刚体的外力之功
“超级大陆”发现新物种完整骨架
深入实施创新驱动发展战略
周博士考察拾零(六十六)日光温室前屋面开机具作业门处骨架的处理方法
基于KD瞭ree剖分的三维动态场景快速有效压缩