基于C3D数据的人体模型逆向动力学仿真分析方法
2020-04-09李国成王亚平
李国成 王亚平
摘要:基于AnyBody人体建模仿真分析软件,采用试验得到的动作捕捉格式数据C3D文件,研究人体逆向动力学仿真分析方法,给出C3D驱动AnyBody人体运动仿真分析时的操作步骤、报错分析及其解决方案。仿真结果表明:人体模型基本参数设置、C3D参数设置、关键点的拟合和足底压力板参数调节是实现人体模型动态分析的关键,其能有效提高人体模型逆向动力学仿真精度。
关键词:
人体模型; AnyBody软件; C3D文件; 逆向动力学; 仿真
中图分类号:G804.63;T391.99
文献标志码:B
Reverse dynamics simulation method on human body model
based on C3D data
LI Guocheng, WANG Yaping
(School of Mechanical Engineering, Nanjing University of Science & Technology, Nanjing 210094, China)
Abstract:
Based on the simulation and analysis software AnyBody for human body modeling, the simulation and analysis method of human reverse dynamics is studied by using the test motion capture format data file C3D. The operation steps and the error analysis and its solution are presented for human motion simulation analysis of AnyBody driven by C3D. The simulation results show that the keys to realize dynamic analysis of human model are the basic parameters setting of human body model, the setting of C3D parameters, the fitting of key points, and the parameters adjustment of plantar pressure plate, and then the accuracy of inverse dynamics simulation of human body model can be improved.
Key words:
human body model; AnyBody software; C3D document; reverse dynamics; simulation
0 引 言
隨着逆向动力学研究的发展与深入,人体逆向动力学分析仿真技术已被广泛使用,如欧美国家已使用于与人体生物力学相关的航空航天、康复医疗和汽车运输等领域[1 3],国内在康复训练、骑行驾驶、运动空降等方面也已开展相关研究[4 6]。
目前,常用的人体模型主要有3种:(1)多刚体人体模型;(2)有限元人体模型;(3)肌肉骨骼系统力学模型。
多刚体人体模型不涉及肌肉和软组织结构,只从运动学的角度研究问题。该模型在工业上使用最广泛,但其不能从肌肉力、关节力出发对人体的生物力学载荷给予定量评估。这类典型软件有SIEMENS Tecnomatix Jack。
有限元人体模型拥有高度真实的人体肌肉和骨骼网格单元,具有求解肌肉力的实时优化计算功能,有较好的仿真精度,但该类模型更多地适用于研究某特定工况下的载荷分布和组织形变,且需要很大的计算量。这类典型软件有美国爱荷华州立大学开发的数字人体模型Santos。[7]
肌肉骨骼系统力学模型包含筋骨肌腱与肌肉系统,可以经济、有效、快速地求解试验难以直接测量的人体关节力、肌肉负载,因此备受关注。[8]这类典型软件主要有斯坦福大学的OpenSim[1]和丹麦的AnyBody[9]。OpenSim生物力学仿真平台采用开源输入,但操作繁杂;AnyBody人体建模仿真分析软件拥有独立的脚本语言AnyScript和模型库,AnyScript与C语言、C++和Python有相似的结构,便于理解,且模型库中包含成熟的实际应用案例,是目前使用最广泛的人体逆向动力学仿真分析软件之一。
目前,基于动作捕捉格式数据C3D文件驱动的AnyBody逆向动力学仿真分析方法尚未被广泛掌握,未见相关文献报道。本文以C3D文件驱动AnyBody人体逆向动力学仿真过程为研究对象,给出人体运动模拟仿真方法。针对此类仿真过程中流程不清晰、不齐全和分析报错等问题,提供集中且具体的解决方案。仿真分析经验对运用此类方法解决问题具有参考意义。
1 人体逆向动力学分析方法和步骤
驱动人体模型进行逆向动力学仿真分析的方式有2种,即驱动器代码驱动和运动捕捉数据驱动。简单运动可通过代码直接驱动人体进行逆向动力学计算,但实际情况下人体运动复杂多样,如行走、下蹲、匍匐、抬手等动作,若通过运动捕捉数据(C3D、BVH格式)驱动,对准确分析人体运动特性更有效。
本文使用AnyBody 6.0及其AMMR 1.6.2模型库,引用模型库中的实例模板[10 11],建立人体环境模型。采用具有3块力板的人体行走模型MoCapModel;输入的C3D文件采用VICON三维运动捕捉系统和三维测力台同步采集获得,其中包含人体运动与足底三维力2部分数据。
基于C3D文件驱动的人体逆向动力学仿真分析基本步骤如下:
(1)输入C3D文件。将C3D文件复制到Input文件夹下,更改代码中的C3D文件名。
(2)调节人体参数与姿态。调节人体体节等基本参数,如身高、体重等,并将人体姿态调节到C3D文件所指示的方向,调整人体重力方向。
(3)关键点拟合。将C3D文件中的数据点与模型中的关键Marker点进行拟合,使之重合或充分接近。人体模型由C3D文件中点的坐标轨迹驱动,实现运动。
(4)调节压力板参数。三维测力台测得的足底三维力等数据用于人体受力平衡分析。按照试验中三维测力台的类型与数据进行压力板参数设置和调节,有助于模型动态分析顺利进行。
(5)运动与参数最优化运算。此运算在不包含任何力参与的情况下,获得包含体位参数、更新后的标记点位置和运动信息的txt文件,用于运动驱动确认和参数优化。
(6)逆向动力学仿真。运用上一步得到的txt文件,在有力参与的情况下进行逆向动力学分析,得到关节受力、肌肉受力和肌肉激活度等信息。
2 人体体节比例调节
输入C3D文件后,需要更新人体模型的基本尺寸参数,如被试者的身高、体重等,以保持模型与实际被试者的人体尺寸基本一致。
打开主文件框的Input/TrialSpecificDate. any,更改BodyMass与BodyHeight的值。若只更改上述2项参数,模型在参数优化时可能会出现体节比例失调的问题。因此,根据实际人体尺寸,
修改其他人体体节参数。人体体节参数修改代码如下:
AnyFolder Anthropometrics={
AnyVar BodyMass=110;
AnyVar BodyHeight=1.80;
AnyVar ThighLength= 0.4405873526;
AnyVar ShankLength= 0.4287552139;
AnyVar FootLength=0.2184971098;
AnyVar PelvisWidth=0.1664739884;
AnyVar HeadHeight = 0.1456647399;
AnyVar TrunkHeight = 0.6453291329;
AnyVar UpperArmLength = 0.353839422;
AnyVar LowerArmLength =0.27990017688;
AnyVar HandLength = 0.1893641618;
AnyVar HandBreadth = 0.0884393064;
};
3 試验运动数据与人体关键点拟合
用C3D文件中的试验运动数据驱动人体模型完成指定动作,因此试验运动数据与人体关键点的拟合是保证人体运动顺利完成的关键。
3.1 系统参数设置
在试验运动数据与人体关键驱动点拟合前,将主程序中的MotionAndParameterOptimizationModel改为1,InverseDynamicModel改为0,修改代码如下:
#ifndef MotionAndParameterOptimizationModel
#define MotionAndParameterOptimizationModel 1
#endif
#ifndef InverseDynamicModel
#define InverseDynamicModel 0
#endif
3.2 人体姿态调节
初始状态下人体模型的坐标系与C3D中的坐标系不一致,需要根据实际情况旋转人体模型。本文所用C3D数据需要将人体模型绕x与z轴各旋转90°,更改坐标系代码如下:
AnyVar PelvisRotZ=90;
AnyVar PelvisRotY=0;
AnyVar PelvisRotX=90;
调节后的人体姿态模型见图1。图中的人体姿态出现异常,理论上应调节关节角度,但后期要进行模型运动与参数最优化运算,因此关节角度的更改对分析并无影响,此处可不更改。
代码默认重力方向Gravity为{0,-9.81,0},需要更改Gravity为{0,0,-9.81},使软件中重力的方向与C3D数据文件中的重力方向保持一致。
3.3 C3D参数设置定义
若C3D文件中有数据,但在模型视图窗口中始终无法观察到标记点的移动,则需注意以下2点:(1)C3D文件里点的坐标单位与软件中默认的单位是否一致,若要将单位mm改为m,则需在C3DSettings.any中设置PointScaleFactor= 1/1000;(2)C3D文件是否被其他软件处理过并将标记点的数据放入已处理数据部分,可设置C3DSettings.any中MarkerUseAllPointsOnOff=On解决问题[12]。
若不希望在模型视图窗口中显示C3D中点的三维轨迹,可将C3DSettings.any中的ConstructChartOnOff设置为Off即可。
3.4 关键点的拟合和最优化运算
RunMotionAndParameterOptimizationSequence可进行模型运动与参数最优化运算。
若在运算过程中报错,且提示Marker点容差过大,则是由关键Marker点与C3D驱动数据点距离过大造成的。此时,可在树状窗口中点击InitialConditions并运行,模型将移动到C3D文件的初始位置。在模型视图窗口中可观察到人體模型上关键Marker点与C3D驱动数据点之间的距离,见图2。更改人体模型关键点的位置偏移量sRelOpt,将Marker点与关键点靠近至重合或充分接近。为工作简便,可只运行Kinematics,直至分析成功。
RunMotionAndParameterOptimizationSequence运行成功后,系统将自动保存txt文件,其中包含更新后的体位参数、更新后的标记点位置和运动信息。
4 压力板设置
人体足底压力数据保持人体受力平衡,压力板提供人体足底压力和力矩等数据。
4.1 压力板类型
模型库中自带的压力板有3种类型,可设置为基本版本或AutoDetection版本,见图3。
基本版本没有自动检测功能,需要手动设置人体与特定压力板接触的部分。AutoDetection版本可自动检测足底与特定压力板的接触。
软件中默认压力板类型为4型AutoDetection力板,其设置代码如下:
ForcePlateType4AutoDetection Plate1 (
PlateName = Plate1,
Folder =Main.ModelSetup.C3DFileData,
Limb1=.BodyModelRef.Right.Leg.Seg.Foot,
Limb2=.BodyModelRef.Left.Leg.Seg.Foot,
No=0,
VerticalDirection ="Y",
HeightTolerance=0.07,
VelThreshold=2.2,
Fx=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Fx1,
Fy=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Fy1,
Fz=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Fz1,
Mx=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Mx1,
My=Main.ModelSetup.C3DFileData.Analog.DataFiltered.My1,
Mz=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Mz1,FootPresent=HumanModelPresent)
={
Cal=Main.ModelSetup.C3DFileData.Groups.FORCE_PLATFORM.CAL_MATRIX.Data[0];
Switch_DrawForceVectorFromCOP = On;
};
4.2 压力板参数定义
实际试验测试场景下的压力板位置见图4。总共设有6块压力板,人体左、右脚分别站在第3和第4块压力板上。
C3D文件中的压力板类型见图5,查询可知Date={2,2,2,2,2,2},表示6块压力板的类型均为2。
软件中的压力板类型应与C3D文件中的压力板类型保持一致。将软件中的压力板改为2型AutoDetection力板,即
第4.1节代码
中ForcePlateType4AutoDetection应改为ForcePlate Type2AutoDetection。VerticalDirection表示压力板所在地平面的法线方向,默认为y,应修改为z,使其与人体重力方向保持一致。
常见问题处理方式如下。
(1)出现压力板提示报错。原因可能是C3D文件中力和力矩命名与默认命名存在差异,按原文件力和力矩的路径修改名称即可。注意此时使用的是经软件处理过的C3D文件,应使用DateFiltered下的力和力矩数据,而不是Date内的原始数据。
(2)出现Cal行报错。Cal为压力板的校准矩阵,如果试验使用的压力板不存在校准矩阵,那么将Cal行注销即可。
(3)软件中压力板的显示不在人体脚部正下方(见图6),而在图4中1、2位置处。打开压力板的底层代码文件ForcePlateType2AutoDetection.any,查看压力板的位置组成参数。No值是压力板的空间位置坐标组成元素,调节No值可以更改压力板的空间位置。将两块压力板的No值分别改为2和3,压力板将显示为图4中的正确位置3和4上,结果见图7。
5 逆向动力学分析
RunMotionAndParameterOptimizationSequence运
行成功后,将主程序中的MotionAnd
Parameter
OptimizationModel参数改为0,将InverseDynamic
Model参数改为1,点击InverseDynamicAnalysis
Sequence,可以进行逆向动力学计算。
逆向动力学计算结束后,依次点击Window→Chart2D/3D,可查看计算结果。若肌肉激活度大于1,排除模型姿势不正确的原因外,可能是由于肌肉强度定义不正确,可在HumanModel.any中根据被试者实际情况适当调节人体肌肉强度SpecificMuscleTensionSpine、StrengthIndexLeg和SpecificMuscleTensionShoulderArm的值。
6 分析实例
根据实验室VICON三维运动捕捉系统和三维测力台测得的真实C3D数据文件,进行举重运动员抓举杠铃动作的逆向动力学仿真分析。添加必要的环境条件,模拟人体双手受杠铃质量载荷的受力情况,最终得到人体腰椎关节的受力情況。仿真结果见图8,其中L1~L5分别表示第1~5腰椎。
(1)腰椎关节在上下方向上的受力趋势基本一
致,且上下方向上受力最为明显,最大受力位于L5与骶骨之间,此处上下方向上的力约为6 kN。
腰椎关节前后方向上受力趋势差异明显,具体表现为腰椎上端受力向后,下端受力向前,中间部分逐渐过渡;左右方向上的受力趋势基本一致,且受力均较小。
(2)L1关节处上下方向上受力约为5.4 kN,与杠杆原理得出的L1腰椎受垂直压缩力量级[5]一致。因文献[5]中计算的是静态人体腰椎关节受力,且只考虑竖脊肌力,与本文动态分析、考虑全身肌肉协同工作不同,故存在数值结果上的差异。
7 结束语
介绍基于运动捕捉数据C3D文件驱动人体模型运动的方法,结果认为:人体姿态调节时,各关节角度调节与否对仿真分析的结果并无影响;通过调节人体参数与拟合关键点,可极大地提高模型逆向动力学仿真分析的精度;足底数据保持人体模型受力平衡,是模型逆向动力学分析成功的重要因素。本文逆向动力学仿真操作步骤、研究重点、代码释义、报错分析及其问题解决方案等,对实现C3D文件驱动的人体逆向动力学分析和提高仿真分析精度具有参考意义。
参考文献:
[1] SETH A, SHERMAN M, REINBOLT J A, et al. OpenSim: A musculoskeletal modeling and simulation framework for in silico investigations and exchange[J]. Procedia IUTAM, 2011(2): 212 232. DOI: 10.1016/j.piutam.2011.04.021.
[2] LEMIEUX P O, NATALIA N, NICOLA H, et al. Mechanical analysis of cuff tear arthropathy during multiplanar elevation with AnyBody shoulder model[J]. Clinical Biomechanics, 2012, 27(8): 801 806. DOI: 10.1016/j.clinbiomech.2012.04.008.
[3] TITO B, ELENA S, QIAN Z H, et al. Validation of AnyBody full body musculoskeletal model in computing lumbar spine loads at L4L5 level[J]. Journal of Biomechanics, 2017, 58(14): 89 96. DOI: 10.1016/j.jbiomech.2017.04.025.
[4] 丁晨, 王君泽, 高瞻. 基于AnyBody的汽车驾驶中人体腿部逆向动力学仿真[J]. 中国生物医学工程学报, 2013, 32(1): 124 128. DOI: 10.3969/j.issn.0258 8021.2013.01.019.
[5] 鲍春雨, 孟庆华. 有限元法分析举重运动员预备提铃动作过程中腰椎节段的受力变化[J]. 中国组织工程研究与临床康复, 2010, 14(35): 6517 6519. DOI: 10.3969/j.issn.1673 8225.2010.35.014.
[6] 付理强. 基于AnyBody模拟空降兵半蹲式着陆脊柱生物力学分析: 脊柱力矩、关节反作用力、肌肉激活度相关研究[D]. 大连: 大连医科大学, 2017.
[7] RASMUSSEN J, CHRISTENSEN S T. Musculoskeletal modeling of egress with AnyBody modeling system[C]// Proceedings of 2005 Digital Human Modeling for Design and Engineering Symposium. Iowa: SAE International, 2015: 519 522. DOI: 10.4271/2005 01 2721.
[8] CHOI H Y, SAH S J, NA S, et al. Human body modeling for virtual seat comfort testing[C]// Proceedings of 2006 Digital Human Modeling for Design and Engineering Conference. Lyon: SAE International, 2016: 20588 20594. DOI: 10.4271/2006 01 2335.
[9] 孟祥杰. 基于肌肉骨骼生物力学载荷的驾驶人腰部舒适性研究[D]. 北京: 北京大学, 2015.
[10] 刘书朋, 司文, 严壮志, 等. 基于AnyBodyTM技术的人体运动建模方法[J]. 生物医学工程学进展, 2010, 31(3): 131 134. DOI: 10.3969/j.issn.1674 1242.2010.03.002.
[11] DAMSGAARD M, RASMUSSEN J, CHRISTENSEN S T, et al. Analysis of musculoskeletal systems in AnyBody modeling system[J]. Simulation Modelling Practice and Theory, 2006, 14(8): 1100 1111. DOI: 10.1016/j.simpat.2006.09.001.
(编辑 武晓英)