APP下载

适用于惯性动作捕捉与复现系统的轨迹捕捉算法及其实现*

2018-06-12张艳艳车晓蕊杨文卿

传感技术学报 2018年5期
关键词:惯性姿态修正

兰 洋,李 杰,*,张艳艳,车晓蕊,杨文卿

(1.中北大学仪器科学与动态测试教育部重点实验室,太原 030051;2.兰州资源环境职业技术学院,兰州 730000)

基于惯性传感器原理的人体动作捕捉系统以其实时性好、环境适应性强、体积小穿戴方便、成本低等特点被广泛应用于电子游戏、康复医学、影视作品创作、运动分析以及非物质文化遗产保护等领域。惯性动作捕捉与复现系统涉及三方面技术:动作捕捉、轨迹捕捉、动作复现[1-2]。

通常行人的轨迹捕捉算法采用零速修正来抑制捷联惯性导航解算过程中的位置误差、速度误差、姿态误差,以到达较好的解算效果[3-5]。惯性动作捕捉与复现系统最终目的是把捕捉的动作和轨迹数据导入PC端进行人体模型的动画复现,其中轨迹数据驱动人体模型进行空间移动,而由于零速检测不准确导致姿态修正延时,Kalman滤波器误差补偿不充分等原因,导致捕捉到的轨迹不够平滑,甚至严重畸变,且定位误差大[6-8],导致最终PC端人体模型空间移动时产生严重的抖动或位置跳变。

本文首先对动作捕捉技术方案作了简要说明,然后针对零速检测过程中出现的误检测问题提出了一种改进的零速检测算法,同时在Kalman滤波算法中引入姿态深度修正模块,在上述基础上构建了完整的基于改进零速检测的轨迹捕捉算法框架,最后通过实物试验从精度和稳定性两方面验证了轨迹捕捉算法的可行性。

1 惯性动作捕捉系统整体方案

惯性动作捕捉与复现系统包括三方面技术:动作捕捉、轨迹捕捉、动作复现。其中动作捕捉是利用分布在人体身上的惯性传感器节点测量出各个关节点相对于根节点的位置信息。而轨迹捕捉则是通过惯性传感器节点信息计算出根节点的绝对位置。中间节点HUB对数据按规定格式整合。最终输入PC端人体模型中,驱动人体模型以根节点为基准的动作复现和空间移动。

图1 系统技术方案

2 基于改进零速检测的轨迹捕捉算法

2.1 改进的零速检测

2.1.1 零速区间的粗检测

零速检测的目的是检测出人体在行走过程中脚掌与地面完全接触的一系列时间区间,并认为在该区间内脚部速度为零,将零速作为高精度的速度观测量进行状态误差估计,不断地对行走过程中的导航误差进行修正,达到抑制惯导解算误差累积的目的,所以零速区间检测的精度将直接影响最终轨迹捕捉的效果。

综合考虑动作捕捉应用场景,选用基于陀螺仪数据和加速度数据组合的方式进行零速检测,此种检测方法在湿滑、颠簸环境以及特殊步态下,如上下楼,检测效果优于单一数据源检测法[9-10]。其检测统计量计算的数学表达如下:

(1)

根据大量试验设置合理阈值,检测统计量Tk大于阈值的部分则被检测为摆动区,小于阈值的部分检测为零速区,如式(2):

(2)

式中:ztk为检测结果,‘1’表示为零速,‘0’则表示摆动,threshold为阈值。

实际上,人在行走过程中并不存在真正的零速,因为即使在脚掌与地面完全接触的时间内,由于脚部的旋转运动、切向加速度以及传感器的测量误差等原因,造成一部分本应处于零速区间内的检测统计量Tk在阈值threshold上下波动,其局部上扬部分会造成误检测。

图2 零速误检测试验图

图2为成年男性行走时由组合检测法得到的检测数据,其步频为100步/分,其中图2(a)为检测统计量Tk的图像,局部放大图中红色曲线为其中一个零速区间的统计量值,而黑色直线为检测阈值threshold。图2(b)为检测结果zt的图像,其中‘1’表示零速,‘0’表示摆动,其局部放大图与图2(a)中局部放大区域相对应。因此,由于图2(a)统计量Tk围绕阈值的局部上扬波动造成了图2(b)中的误检,即把零速区的一部分误检为摆动区(下称伪摆动区)。

上述误检测广泛地存在于零速检测结果中,最终导致算法不能对行走过程中的位置、速度、姿态误差进行及时地修正。这是导致捕捉轨迹粗糙的一个重要原因。

2.1.2 零速区间的精检测

人正常行走的步伐周期分为零速区和摆动区,根据赵红宇等人的研究[11],在一个步伐周期内,零速区和摆动区长度分别占整个步伐周期的1/3和2/3,而上述误检测得到的伪摆动区实为零速区的一部分,所以实际上夹杂在摆动区间中的伪摆动区长度值很小,可作为异常值处理。对零速粗检测结果zt进行处理得到:

tnon_zupt=(l1,l2,…,li,…,ln)

(3)

式中:tnon_zupt为粗检测得到的摆动区长度序列(包含伪摆动区),li为零速粗检测结果中某个摆动区间的长度值。

根据人体行走统计规律,人在某一段正常行走的过程中其摆动区间的长度值序列即tnon_zupt服从正态分布,则根据拉依达准则法,tnon_zupt满足式(4):

P(|tnon_zupt-μ|<3σ)≥99.997

(4)

式中:σ和μ分别为tnon_zupt的方差和均值,P(·)表示对括号内式子求概率。

而tnon_zupt中伪摆动区间长度值作为异常值不满足式(4),利用MATLAB可通过式(5)对伪摆动区进行定位:

|tnon_zupt-μ|>3σ

(5)

式中:σ和μ同式(4)。

最终将zt中误检测得到的伪摆动‘0’替换为零速‘1’从而实现零速精检测。

2.2 Kalman滤波算法

2.1.1Kalman滤波器的建立和参数设置

上文中零速精检测出的零速可视为精度极高的速度值,利用3个状态量间的相互耦合可修正位置、速度、姿态误差。本文仅选取位置、速度、姿态作为卡尔曼滤波器状态量即:

X=[pos velo alt]

(6)

状态方程为:

Xk=AXk-1+wk-1

(7)

式中:A为状态转移矩阵,wk-1为过程激励噪声。

利用检测出的零速构建三维伪观测量,对位置、姿态误差进行估计。观测方程如下:

Zk=HXk+vk

(8)

式中:H为观测矩阵,vk为观测噪声。

卡尔曼滤波器相当于误差估计器,可用每个步伐周期中的零速估计出上一个步伐周期中积累的导航误差,通过卡尔曼滤波器的每次更新计算可以对状态量进行修正,KF算法执行过程如下:

时间更新:

(9)

测量更新:

(10)

Q=diag([(σf)T,(σw)T]2)R=diag((σv)2) >

(11)

2.1.2 姿态角的深度修正

由式(10)中的卡尔曼滤波器表达式,即:

(12)

通过式(12)可得出修正后的状态量,但实际得到的轨迹难以达到动作复现的要求,就整体轨迹而言,定位精度依然较低,局部来看体现在轨迹的明显波动。因此需要进一步对姿态进行修正。

由式(12)可知,状态误差即为位置、速度、姿态误差为:

(13)

其中姿态误差表示如下:

Δalt=[ψ θ γ]

(14)

由惯性导航原理可知,当偏航、俯仰、滚转角都为小角时,可忽略姿态变换矩阵中小角间的高阶小量,此时旋转后坐标系的最终角位置与旋转次序无关[12-13]。则姿态修正矩阵可表示为:

(15)

(16)

2.1.3 基于ZUPT的轨迹捕捉算法执行流程

综上所述,本文所述基于零速修正(ZUPT)的轨迹捕捉算法框架如图3所示。

图3 基于ZUPT的轨迹捕捉算法框架

由图3可知,在算法执行进程中,首先进行时间更新,当处于非零速状态时,直接由时间更新得到的导航参数,输出该时刻的位置、速度、姿态。而当检测出零速时,时间更新得到的导航参数则不作为最终结果输出,而是连同计算出的滤波器参数传递给下一步进行测量更新,通过卡尔曼滤波器方程对状态量进行修正,并单独对姿态进行深度修正最终输出位置、速度、姿态。

3 试验验证

为验证动作捕捉系统轨迹捕捉算法可行性,设计了一个简易鞋式试验设备,试验使用的硬件主控单元为STM32单片机,MEMS惯性测量单元采用价格便宜的MPU6050,其中陀螺量程为±2 000 (°)/s,加速度计量程为±4gn。控制数据采样频率为250 Hz。由于采样率较低,选取零速检测窗口大小为3,经过大量试验,设置零速粗检测的检测阈值为30 000可以最大限度地减少误检测。本文设计了两组试验分别验证轨迹算法的精度和稳定性。

3.1 轨迹算法精度试验

3.1.1 零速区间的检测精度

精度试验中,身高为178 cm的试验人员采用约60步/min的步频进行了绕八字形走试验一圈,总行程约为70 m,下面进行相关分析。

图4中红色方形曲线为检测出的零速区间,而蓝色曲线为X轴陀螺仪原始数据,其中图4(a)为零速粗检测的结果,图4(b)为零速精检测后的结果。本次试验中经过粗检测后,有几处误检测,分别为在开始行走后的11.352 s、21.384 s和24.772 s时刻,图4(a)中局部图为后两个出现误检测的时刻。经过零速精检测后,由图4(b)局部图可知误检测被完全消除,同时可看出,检测出的零速区间与陀螺零速时刻的输出数据高度契合。

图4 零速精检测前后效果对比图

3.1.2 姿态角深度修正的试验效果

图5(a)和图5(b)分别为姿态角仅通过Kalman滤波器测量更新和经过深度修正后得到的轨迹图:

本次轨迹测试时,只进行了水平对准,而将初始航向角设为0。图5中红色方圈表示起点,箭头方向代表八字绕行的行走方向。图5(b)中轨迹终点与轨迹起点距离小于0.5 m,其定位误差在行程的1%内,达到了比较好的效果,而图5(a)中轨迹的起点和终点距离约为1.6 m,定位误差超过了2%。同时由图5中两图对比可见,经过姿态深度修正后得到的轨迹平滑度明显优于仅进行滤波器补偿的轨迹,从而在一定程度上减少了 在动画复现过程中人体模型抖动和位置跳变,可达到较好的复现效果。

进一步,对卡尔曼滤波器每次更新后的后验误差协方差开方后得到三轴位置误差、三轴速度误差以及三轴姿态误差并作图如图6所示。

图5 姿态深度修正前后轨迹图

图6 三轴导航信息误差图

由图6中位置误差可以看出,三轴位置误差处于极为缓慢的发散中,几乎不影响动画复现的效果。本文采用改进的零速检测极大地提高了检测精度,可对速度误差进行更为精确地修正,由图6速度误差,三轴速度误差周期性地保持在0.004 2左右,说明周期性的测量更新抑制了速度误差发散。图6中姿态误差中滚转和俯仰角误差基本保持不变,说明轨迹捕捉算法误差修正效果明显,相比之下偏航角误差虽然小,但是处于相对快速的发散中,随着导航时间的增加,航向角误差将会成为导航解算过程中的主要误差源,因此后续考虑引入磁传感器对航向角误差进行估计进一步修正航向角误差。

3.2 轨迹算法稳定性试验

图7为三次绕行八字路线后计算得到的轨迹,由图,三次行走的轨迹基本重合。整个行程约为210 m,行走时长为165 s,终点与起点坐标差为0.38 m,定位误差在1%以内。本文所述轨迹算法在较长的行走路程中能得到较为稳定的轨迹,即轨迹算法具有较好的稳定性。

图7 稳定性测试轨迹图

4 结论

本文通过介绍系统技术方案阐明了动作捕捉系统中动作捕捉、轨迹捕捉、动作复现的关系。进而为满足捕捉轨迹的平滑度对零速检测算法进行了改进,从而大大提高了零速检测的可靠性,在此基础之上构建了完成的算法框架,并在算法中对轨迹捕捉姿态角进行了深度修正。试验表明,本文提出的轨迹捕捉算法能得到较为平滑的捕捉轨迹,因此,在一定程度上能够降低PC端动作复现过程中人体模型抖动,具有一定的工程应用价值。

参考文献:

[1] 杨波. 基于MEMS惯性传感器动作捕捉系统与轨迹追踪的研究设计[D]. 电子科技大学,2014.

[2] 侯学辉. 基于无线传输技术的惯性动作捕捉系统研究与设计[D]. 山东大学,2016.

[3] 费程羽,苏中,李擎. 行人惯性导航零速检测算法[J]. 传感器与微系统,2016,35(3):147-150,153.

[4] 高钟毓,王进,董景新,等. 惯性测量系统零速修正的几种估计方法[J]. 中国惯性技术学报,1995(2):24-29,39.

[5] 唐文杰,吕志伟,张伦东,等. 基于零速修正辅助MIMU的行人导航算法研究[J]. 大地测量与地球动力学,2016,36(6):548-551.

[6] 张金亮,秦永元,梅春波. 基于MEMS惯性技术的鞋式个人导航系统[J]. 中国惯性技术学报,2011,19(3):253-256.

[7] 杨辉. 基于MEMS传感器的高精度行人导航算法研究[D]. 厦门:厦门大学,2014.

[8] 黄欣,许建新,张苗,等. 基于行人运动模态辨识的室内外无缝导航航向算法研究[J]. 传感技术学报,2017,30(6):878-88.

[9] 刘文. 基于微机电惯性传感器的船舶室内导航算法研究[D]. 大连海事大学,2013.

[10] Skog I,Nilsson J O,Handel P. Evaluation of Zero-Velocity Detectors for Foot-Mounted Inertial Navigation Systems[P]. 2010 International Conference on Indoor Positioning and Indoor Navigation(IPIN),2010.

[11] 赵红宇. 惯性行人导航系统的算法研究[D]. 大连理工大学,2015.

[12] 秦永元. 惯性导航[M]. 第2版. 北京:科学出社,2014:5-7.

[13] 刘俊,石云波,李杰. 微惯性技术[M]. 电子工业出版社,2005:40-43

猜你喜欢

惯性姿态修正
Some new thoughts of definitions of terms of sedimentary facies: Based on Miall's paper(1985)
冲破『惯性』 看惯性
修正这一天
攀爬的姿态
全新一代宋的新姿态
跑与走的姿态
无处不在的惯性
软件修正
基于PID控制的二维弹道修正弹仿真
无处不在的惯性