李國成 王亞平



摘要:基于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.
(編輯?武曉英)