一种人体动作捕捉方法与流程

文档序号:17627439发布日期:2019-05-10 23:48阅读:1033来源:国知局
一种人体动作捕捉方法与流程

本发明涉及姿态信息采集技术领域,尤其涉及一种人体动作捕捉方法。



背景技术:

上世纪八九十年代,一些欧美发达国家的重点实验室和科研机构对动画技术提出了诸多方案,并对各个方案做了实际的论证和实验。经过几十年的不断探索,动漫的动作捕捉技术得到不断地发展和完善。动作捕捉系统经过了科研人员的不断努力和漫长的发展,市场上出现了许多种不同的设备,其中包括机械电动式、声学式、电磁式光学式和惯性式。这几种动作捕捉系统各有优缺点,因此其应用的场景也不相同。目前,人体动作捕获技术已成功应用在人机交互、影视制作、虚拟现实、运动分析等领域,渗透到了国防、工业、日常生活等方方面面。

对于国内而言,惯性动作捕捉系统虽然起步较晚,但是由于其优良的性能和较低的成本,其已经成为国内的研究热点。而且随着社会的不断发展,生产动作捕捉的公司也越来越多。

机械方案出现的比较早。采用这种方案,目标物体需要在身体各部位固定一系列的

刚性支架。在目标物体运动的时候,身体上的刚性支架一起运动,而支架上的传感器会测量出身体部位的角度变化。然而此方案灵活性太差,极大的限制了目标物体的运动。

电磁式方案是由磁场接收器和磁场发射源构成。磁场发射源会产生有一定规律的磁场,而在目标物体上安装的接收器则是负责接收特定位置的磁场。当目标物体运动时,目标物体上的接收器就会根据接收到的磁场特性计算出自己的运动位置。此方案对周围环境的要求极高,即目标物体周围不能有磁场干扰。

声学方案则是在目标物体上安装一系列的超声波发生器,而目标物体周围的接收器则负责接收超声波,由于各个发生器距离接收器的位置不同,所以接收的时间长短也会不同,通过时间差可以计算出目标物体的位置。但是这种方案的精度太差。

光学方案目前在市场上应用比较广,其通过摄像机对目标物体上的标志点进行识别,从而采集目标物体的运动。但是此方案成本太高,一套设备至少几十万,严重制约了动作捕捉市场的发展。

针对以上方案的不足,惯性动作捕捉应运而生。其凭借着微型化,低成本,又可以根据需要,采用无线传输等优点,迅速成为该领域研究热点。

然而目前的动作捕捉设备对特定的位置都有要求,比如光学设备要标记特定点,以方便对这些特定位置的运动信息的采集;而对于市场上的惯性动作捕捉设备,由于出厂时已对其进行校准,所以其对安放的位置也有特定的要求,即要安置在特定的位置上,以便于对数据准确采集,否则将会导致运动信息的错误采集。对于惯性传感器安装位置的高要求,严重的影响了此设备的实用性。



技术实现要素:

本发明的目的在于提供一种人体动作捕捉方法,采用获取惯性传感器的旋转增量,利用旋转增量对人体模型进行驱动,有效的解决了惯性传感器固定的敏感问题。

为了达到上述目的,本发明提供了一种人体动作捕捉方法,包括:

将惯性传感器安装于动作采集者的各数据采集节点上,并将所述惯性传感器采集的运动数据发送至上位机中,所述上位机中存储有人体模型;

获取所述惯性传感器的加速度计、陀螺仪及磁力计多次分别测得的姿态数据并进行零点数据修正;

将所述加速度计及磁力计对应的修正后的姿态数据进行三角函数转换以将所述加速度计及磁力计对应的修正后的姿态数据转换为第一旋转角度对应的四元数,将所述陀螺仪对应的修正后的姿态数据进行积分以得到所述陀螺仪对应的修正后的姿态数据转换为第二旋转角度对应的四元数;

对所述第一旋转角度及所述第二旋转角度对应的归一化后的四元数进行自适应线性插值以得到旋转增量;

利用所述旋转增量驱动所述人体模型。

可选的,对所述姿态数据并进行零点数据修正的步骤包括:

获取所述惯性传感器的加速度计、陀螺仪及磁力计多次分别测得的姿态数据放入一二维数组中;

根据所述二维数组计算所述加速度计、陀螺仪及磁力计分别测得的多个姿态数据的平均值;

将所述加速度计、陀螺仪及磁力计测得的任一姿态数据减去其对应的平均值以得到所述加速度计、陀螺仪及磁力计的零点漂移;

分别计算所述加速度计、陀螺仪及磁力计的比例因子;

将所述加速度计、陀螺仪及磁力计零点漂移乘以各自的比例因子以得到修正后的姿态数据。

可选的,所述加速度计、陀螺仪及磁力计的比例因子分别为:

其中,offset为所述零点漂移的绝对值,pi为圆周率,g为重力加速度,修正后的姿态数据为欧拉角。

可选的,将修正后的姿态数据转换为四元数的步骤包括:

对所述陀螺仪对应的修正后的姿态数据进行积分,以得到第一旋转角度e0,e1,e2;

根据所述加速度计及磁力计对应的修正后的姿态数据通过如下三角函数变换公式得到第二旋转角度e0′,e1′,e2′;

其中,a0,a1,a2为所述加速度计对应的修正后的姿态数据,m0,m1,m2为磁力计对应的修正后的姿态数据;

分别计算出所述第一旋转角度e0,e1,e2及第二旋转角度e0′,e1′,e2′的余弦值和正弦值以得到所述第一旋转角度e0,e1,e2及第二旋转角度e0′,e1′,e2′的四元数。

可选的,对所述四元数进行归一化的步骤包括:

获取所述四元数的模值;

将所述四元数中的每个数值除以模值,即得到归一化后的四元数。

可选的,判断所述第一旋转角度e0,e1,e2及第二旋转角度e0′,e1′,e2′对应的归一化后的四元数的相关度,若相关度小于一设定值,则采用球面线性插值,若相关度大于或等于所述设定值,则采用线性插值。

可选的,根据所述自适应线性插值的插值系数得到所述旋转增量。

有益效果:

每一个动作采集者将惯性传感器安放的位置都会有所不同,从而获取的初始姿态也会不同,导致初始动作的起始校准存在偏差,由于同一片骨骼在旋转的时候其旋转增量是一个固定值,所以本发明采用旋转增量对人体模型进行驱动,解决了惯性传感器固定的敏感问题,并且采用自适应线性插值对数据进行处理,解决姿态数据的不连续问题,从而达到理想的效果

附图说明

图1为本发明实施例提供的人体动作捕捉方法的流程图;

图2为本发明实施例提供的人体同一片骨骼的运动角度图;

图3为本发明实施例提供的惯性传感器的接线图;

图4为本发明实施例提供的发射模块的接线图;

图5为本发明实施例提供的mcu的接线图;

图6为本发明实施例提供的整个硬件电路设计的总体框架图;

图7为本发明实施例提供的运动数据传输图。

具体实施方式

下面将结合示意图对本发明的具体实施方式进行更详细的描述。根据下列描述和权利要求书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。

可以理解的是,每一个动作采集者将惯性传感器安放的位置都会有所不同,从而获取的初始姿态也会不同,导致初始动作的起始校准存在偏差,而本发明采用获取惯性传感器的旋转增量,利用旋转增量对人体模型进行驱动,有效的解决了传感器固定的敏感问题。

第一步:采集姿态数据;

使用惯性传感器采集的数据比较多,然而我们只需读取其中的加速度计、磁力计、及陀螺仪的姿态数据。而采集芯片的数据传输位数为16位,故需要将数据的高8位与低8位拼接起来形成16位的数据进行传输。根据芯片数据手册和用户使用手册,读取的数据可以放到自己定义的一个数组里面,其中数组中的第0位到第5位为三轴加速度计的姿态数据,将第0位数据左移8位后加上第1位数据,则拼接成加速度计的第一个值。同样的方法得到加速度计的第二个值与第三个值。数组中的第8位到第13位是陀螺仪的姿态数据,第15位到19位是磁力计的姿态数据,照上述方法做数据的拼接传输,可以得到陀螺仪和磁力计的姿态数据。

第二步:零点数据修正;

惯性传感器采集的姿态数据存在零点漂移,而且随着时间越长,零点漂移也越来越大,将会严重影响系统的稳定性。数据修正的步骤包括:

读取加速度计和陀螺仪测得的20次姿态数据放入一个二维数组当中,对应的数值存入同一列,求出对应数值的列平均值。例如:将陀螺仪的三个数据之中的一个值放入二维数组的第0列,读取20次数值依次放入第0行第0列,第1行第0列,直到第19行第0列,然后取第0列的平均值;

求零点漂移,对于零点漂移则为原始姿态数据减去对应的平均值,即零点漂移=原始姿态数据-平均值,其中原始姿态数据可以为20次读取的数据中任意一组。即将所述加速度计、陀螺仪及磁力计测得的任一姿态数据减去其对应的平均值以得到所述加速度计、陀螺仪及磁力计的零点漂移;

计算比例因子,根据经验,陀螺仪的比例因子其中pi为圆周率,即pi=3.14;加速度计的比例因子其中offset为零点漂移的绝对值,g为重力加速度;磁力计的比例因子

获取修正后的姿态数据,将所述加速度计、陀螺仪及磁力计零点漂移乘以各自的比例因子以得到修正后的姿态数据,此时的修正后的姿态数据已为欧拉角。

第三步:对陀螺仪的数值进行积分,得出第一旋转角度e0,e1,e2。另一方面,通过三角函数变换得出第二旋转角度e0′,e1′,e2′。

将角度值除以采样率即为角度对时间的积分,得出的即为第一旋转角度e0,e1,e2;

通过三角函数变换可以计算出第二旋转角度e0′,e1′,e2′为:

其中,a0,a1,a2为所述加速度计对应的修正后的姿态数据,m0,m1,m2为磁力计对应的修正后的姿态数据。

这第一旋转角度e0,e1,e2与第二旋转角度e0′,e1′,e2′理论上应该是相等的,但是实际测量的时候会存在误差,即两种角度并不相等。

第四步:将修正后的姿态数据转化为四元数;

首先计算各个欧拉角的余弦值和正弦值,

得出四元数为:

q0=k0*g0*s0+k1*g1*s1;q0′=k0′*g0′*s0′+k1′*g1′*s1′;

q1=k1*g0*s0-k0*g1*s1;q1′=k1′*g0′*s0′-k0′*g1′*s1′;

q2=k0*g1*s0+k1*g0*s1;q2′=k0′*g1′*s0′+k1′*g0′*s1′;

q3=k0*g0*s1-k1*g1*s0;q3′=k0′*g0′*s1′-k1′*g1′*s0′;

其中q0,q1,q2,q3、q0′,q1′,q2′,q3′即为四元数。四元数的基本形式为:其等价形式为上述公式得到的就是四元数的等价形式。

第五步:对四元数归一化;

取四元数的模值:

将四元数数值除以模值,即得到归一化后的四元数;

第六步:(可选/优化步骤)自适应线性插值;

由于惯性传感器采集的运动数据是各个位置点的姿态数据,并非连续的数据,而且由于系统处理姿态数据需要一定的时间,这就导致了运动数据不连续的情况。本发明采用自适应线性插值来平滑运动数据。

所谓自适应线性插值就是将球面线性差值与线性差值相结合。由于姿态数据采用四元数表示,其本身可以看成一个向量。当向量与向量之间的角度过大,即两个向量的相关度比较低时,采用球面线性插值。当向量与向量之间的角度比较小,即两个向量的相关度比较高时,采用线性插值比较好。这样即可以解决系统数据的平滑问题,又可以解决万向锁问题。

计算向量与向量之间的余弦值:

cosθ=q0q’0+q1q’1+q2q’2+q3q’3;

判断两个向量之间的相关度:

如果两个向量之间的夹角较大,则余弦值比较小,此时两个向量的相关度小于设定值,采用球面线性插值。反之,采用线性插值。

计算自适应线性插值系数:

如果采用球面线性插值,其插值系数的计算如下:

如果采用线性插值,其插值系数为:

a0=1-t;

a1=t;

其中r的求取方法如下:

其中g为重力加速度值,a0,a1,a2为加速度的测量值,m0,m1,m2为磁力计的测量值。

新的姿态数据则为插值系数乘以对应点的坐标,如下所示:

p0=a0e0+a1e’0;

p1=a0e1+a1e’1;

p2=a0e2+a1e’2;

p3=a0e3+ae’3;

其中,p0,p1,p2,p3为新的姿态数据,也即是旋转增量的四元数形式。e0,e1,e2,e3为通过积分得出的角度θ的四元数形式,e’0,e’1,e’2,e’3为通过三角转换得出的角度θ的四元数形式。

下面通过举例来阐述,旋转增量是如何解决惯性传感器固定敏感问题:

将惯性传感器固定到人体骨骼上的时候,人体骨骼的运动将被惯性传感器的运动所代替,即骨骼的运动数据就是惯性传感器所采集到的数据。旋转增量是旋转对象在旋转过程中的角度变化值,而且骨骼的转动一般带有旋转,如图2所示,下面阐述旋转增量:

从图2中可以明显的看出:骨骼在旋转的时候,骨骼外侧的旋转角度θ1与内侧的旋转角度θ2是相等的。则同一片骨骼在旋转的时候所转动的角度是一样的,即旋转增量是一样的。也就是说将惯性传感器固定在同一片骨骼的任何一个位置,所得的旋转增量都是相等的,这样便解决了惯性传感器固定的敏感问题。

此惯性传感器的采集结点负责采集人体各个关节处的信息,信息经过数据处理得到所需的旋转增量数据,然后通过发射端将旋转增量数据发送给上位机,上位机接收到旋转增量数据后利用此数据来驱动人体模型。本发明的硬件电路主要包括数据采集单元、主控单元和发射单元。

在现有的惯性动作捕捉设备中,所采用九轴传感器往往是由三轴磁力计、三轴加速度计和三轴陀螺仪拼接而成,而本发明采用mpu9250,其一体化的设计大大简化了设备所占用的空间,更重要的是也在很大程度上简化了编程的复杂性。mpu9250的接线图如图3所示。射频芯片采用的是nrf24l01p。该芯片无需外加天线即可完成信息的接收与发送。此芯片也可以根据设计者的习惯选择spi或i2c进行通信。射频模块的布线图如图4所示。mcu主控芯片采用stm32f301。该芯片负责控制mpu9250和发射模块,此外它还对mpu9250采集过来的数据进行预处理。主控芯片的布线图如图5所示。整个硬件电路设计的总体框架图如图6所示。

硬件电路设置完毕后,接下来将对系统的姿态解算的步骤进行阐述。姿态解算的方法根据设计者的不同,所采用的方法也有所不同。而且,现在stm32的芯片自带dmp姿态解算,其精度虽然不高,但是对于普通的设计也是一种方式。本设计吸取以往的经验并在以往的基础上设计出新的算法,步骤如下:

第一步:读取姿态数据;

第二步:数据修正,由于数据存在零点漂移,需要对数据进行修正;

第三步:对陀螺仪的数据进行积分得出旋转角度。通过对九轴传感器数据的三角转换得出另一种角度形式

第四步:将数据转化为四元数,并进行归一化;

第五步:将通过两种不同形式得出的角度进行自适应线性插值,得出旋转增量。

第六步:将得出的旋转增量转化为左手坐标系。数据采集使用的是右手坐标系,而模型世界即上位机使用的是左手坐标系,坐标系不匹配。可以通过以下方式对坐标系进行匹配:x’=x,y’=y,z’=-z。即通过对坐标系z轴取负值得到左手坐标系。

进一步,如图7所示,本发明将4块制作的惯性传感器分别固定在人体两只手臂的大臂和小臂上,如图7所示,此时骨骼的运动数据就等效于惯性传感器采集的数据。人体手臂在运动的时候,数据采集芯片就会采集数据,而主控芯片采用定时器中断来读取数据,数据在主控芯片内完成一系列数据处理,其中包括数据修正,积分,坐标匹配等,之后就会通过打开发射模块进行发射。另一端通过事先已经配置好的接受模块来接收数据,再通过usb数据线传送给上位机,上位机将传送过来的旋转增量匹配到对应的手臂位置就可以驱动人体模型。

综上,在本发明实施例提供的人体动作捕捉方法中,用4个数据采集节点,1个数据接收节点。数据采集结点将数据采集后发送给数据接收模块,数据接收模块将数据通过usb数据线传送给上位机,上位机采用的是unity3d,安装此上位机后,下载需要的动画模型,然后将需要的数据匹配到对应的位置就可以完成上半身人体的动作显示了。

上述仅为本发明的优选实施例而已,并不对本发明起到任何限制作用。任何所属技术领域的技术人员,在不脱离本发明的技术方案的范围内,对本发明揭露的技术方案和技术内容做任何形式的等同替换或修改等变动,均属未脱离本发明的技术方案的内容,仍属于本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1