[人体运动分析&OpenSim]前向动力学概念&FD Tool
一、概念
对于前向动力学,百度百科及OpenSim用户手册所给的英文描述都有所不同,百度百科翻译为Forward Kinematics,而OpenSim用户手册翻译成Forward Dynamic。通过查询英文单词的解释,Kinematics有运动学的意思,而Dynamic有动力学的含义。运动学和动力学的内涵有些许不同,所以,这里对两种名词各自的英文译名“猜测”如下:
1)前向动力学:Forward Dynamic(FD)
2)前向运动学:Forward Kinematics(FK)
(这里如果编辑有错误,欢迎指正)
不管是FK还是FD,只要是前向的,那么所研究的人体骨骼各关节节点之间的空间位置及其运动情况将严格按照父子层级的关系进行。对于父子层级之间的运动关系的描述,这里引用csdn博文的描述。
二、数据准备
Tips:所使用平添为OpenSim 4.1,可以在此下载链接处找寻。该rar文件为安装后的文件夹,在bin中有应用程序exe。此外,可以自行添加系统路径。
2.1 OpenSim Tools菜单位置
给定由计算肌肉控制(CMC)或其他方法计算出的控制(例如,肌肉激励),前向动力学工具(FD Tool)可以驱动前向动力学仿真。前向动力学仿真是定义肌肉骨骼模型动力学的微分方程的解(解为一个积分)。通过关注感兴趣的特定时间间隔并使用不同的分析方法和工具,可以收集有关试验的更详细的生物力学数据。
2.2 输入项
以Gait2354_Simbody模型的文件目录为例。正向动力学工具将四个数据文件用作输入:
1)subject01_walk1_controls.xml:
包含模型控件(例如,肌肉激励)到肌肉和/或关节扭矩的时间历史。可以将控件指定为.sto文件,其列与所需的激励相对应。该文件可由用户,静态优化工具或计算机肌肉控制工具生成。如果未提供任何控件,则对于模型中的任何执行器均假定为零。
2)subject01_walk1_states.sto:
包含模型状态的时间历史记录,包括关节角度,关节速度,肌肉激活,肌肉纤维长度等。这些状态由“正向动力学”工具用来设置模型的初始状态以进行正向集成。如果使用CMC的控件运行正向仿真,则应在此处指定从CMC输出的状态文件。当检查执行器状态的平衡求解时,可以通过求解肌腱和肌肉纤维力平衡来估计肌肉状态 。
①如果在GUI中运行正向工具,但未指定初始状态文件,则模拟将从模型的当前姿势开始。
②如果从命令行运行正向工具,但未指定初始状态文件,则模拟将从模型的默认姿势开始。
3)subject01_walk1_grf.xml:
一个.xml文件,描述了施加的外部负载,例如基于在模拟过程中应施加到模型的实测地面反作用力。
4)subject01_simbody_adjusted.osim:
特定对象的OpenSim模型,该模型是通过使用“缩放工具(Scale Model Tool)”或其他方法缩放通用模型以及包含已调整的虚拟标记的关联标记集生成的。该模型必须包含惯性参数(段质量等)。
5)subject01_Setup_Forward.xml:
该文件是正向动力学工具安装文件。它包含设置,并引用另一个设置文件gait2354_CMC_Actuators.xml,该文件包含一组补充模型肌肉的促动器(有关更多详细信息,请参考官网计算机肌肉控制章节,或期待作者博文分栏后续更新)。这些执行器必须包含在前向仿真中,以便可以复制CMC解决方案。
2.3 输出项
Forward Dynamics工具在安装文件中指定的文件夹中生成结果。
三、Forwrd Dynamics是如何进行分析的
这一部分引用另一篇文章(点击此处网址链接)
四、如何使用FD Tool(窗口介绍)
这一部分引用另一篇文章(点击此处网址链接)
五、Forward Dynamics设置文件和XML标签
英文标题:Forward Dynamics Setup Files and XML Tags
官方网站(点击此处链接)
Tip:该部分超出作者解释能力,基本上为原文翻译+自己格式排版整理
5.1 指定执行名称
Forward Dynamics工具的属性包含在开始和结束标记 < ForwardTool > 和 </ ForwardTool >内。名称属性 name="subject01_walk1"
指定执行名称。生成的结果文件的名称将以该名称为前缀。
<ForwardTool name="subject01_walk1">
……………………………………………………………………………………
</ForwardTool>
5.2 指定模型
如果使用CMC中的控件,则“Forward Dynamics Tool”的模型规格必须匹配。相关代码在以下区域可见
<!-- OpenSim Model -->
5.3 指定初始和最终时间
属性< initial_time >和< final_time >指定要运行前向动力学模拟的时间间隔。如前向动力学原理中所述,初始时间可以调整为状态值可用的最近时间,因为这些状态值(通常来自CMC)将用于初始化前向仿真。相关代码在以下区域可见
<!-- Times over which to run forward -->
5.4 指定积分器设置
如果使用来自CMC的控件(如第三部分所述),请将< use_specified_dt >设置为true(建议),即以确保Forward Dynamics Tool使用与CMC相同的积分器时间步长。
<use_specified_dt> true </use_specified_dt>
它通过匹配< initial_states_file >中找到的时间步长来实现。在这种情况下,对于剩余的属性设置的值(<maximum_number_of_integrator_steps>,<maximum_integrator_step_size>,<integrator_error_tolerance>,和<integrator_fine_ tolerance>)被忽略。
如果将<use_specified_dt >设置为false,然后使用积分器属性来确定自适应时间步长(有关如何使用它们,请参见官方教学文档CMC的第4章,或期待作者分栏后续更新并附上链接)。
5.5 指定Analyses和Results
可以将任何数量的可用分析Analyses添加到前向动力学仿真运行中。要获取可用分析的列表,请运行命令forward -PropertyInfo
。
有一些与分析结果Results相关的属性。<results_directory>指定应将结果写入的目录;<output_precision>指定写入结果时应使用多少个小数位,设置值为20足以避免在工作流其他步骤中读回结果时的舍入错误;<step_interval>指定在数值积分期间记录结果的频率,设置值为10表示每10个集成步骤记录一次结果。相关代码在以下区域可见
<!--Analyses and Results -->
5.6 指定初始状态和控制
运行前向动力学仿真需要在仿真开始时将状态设置为初始值,并且在整个仿真过程中都要更新执行器控制值(例如,肌肉激励)。这两个选项都是可选的,其默认行为在本章第二节“数据准备”中描述。
通常,用于驱动前向动力学仿真的初始状态和控制值是在CMC步骤期间计算出的,在这种情况下,应将<initial_states_file>属性设置为从CMC(.sto存储文件)输出的状态,而<controls_file>应该设置为CMC的控件输出(.xml文件,而不是同样由CMC编写的controls.sto文件)。
<initial_states_fil >用于
1)确定正向仿真的有效初始时间(必须与可用状态值的时间一致);
2)提供初始状态值;
3)如果<use_specified_dt>设置为true,那么它也用于确定CMC使用的积分时间间隔(以便尽可能匹配CMC结果)。
5.7 指定外部载荷
使用属性<external_loads_file>指定包含模拟过程中施加到模型的外部载荷的文件。
5.8 代码文件subject01_Setup_Forward.xml
代码来自于官方网站(点击此处链接)
<?xml version="1.0" encoding="UTF-8"?>
<OpenSimDocument Version="20302">
<ForwardTool name="subject01_walk1">
<!-- OpenSim Model -->
<model_file> subject01_adjusted.osim </model_file>
<force_set_files> gait2354_CMC_Actuators.xml </force_set_files>
<replace_force_set> false </replace_force_set>
<!-- Times over which to run forward -->
<initial_time> 0.80 </initial_time>
<final_time> 1.18 </final_time>
<!-- Integrator Settings -->
<maximum_number_of_integrator_steps> 30000 </maximum_number_of_integrator_steps>
<maximum_integrator_step_size> 0.00025 </maximum_integrator_step_size>
<integrator_error_tolerance> 5e-006 </integrator_error_tolerance>
<use_specified_dt> true </use_specified_dt>
<!--Analyses and Results -->
<results_directory> ./ResultsForward </results_directory>
<output_precision> 20 </output_precision>
<AnalysisSet name="Analyses">
<objects>
<Kinematics name="Kinematics">
<on> true </on>
<step_interval> 10 </step_interval>
<in_degrees> true </in_degrees>
</Kinematics>
<Actuation name="Actuation">
<on> true </on>
<step_interval> 10 </step_interval>
<in_degrees> true </in_degrees>
</Actuation>
<BodyKinematics name="BodyKinematics">
<on> true </on>
<step_interval> 10 </step_interval>
<in_degrees> true </in_degrees>
</BodyKinematics>
</objects>
</AnalysisSet>
<!-- Initial states and controls -->
<states_file> ResultsCMC/subject01_walk1_states.sto</states_file>
<ControllerSet name="Controllers">
<objects>
<ControlSetController name="">
<!--A list of actuators that this controller will control. The keyword ALL indicates the controller will control all the acuators in the model-->
<actuator_list> </actuator_list>
<!--Flag (true or false) indicating whether or not the controller is enabled (ON) should-->
<enable_controller> ALL </enable_controller>
<!--XML file containing the controls for the controlSet.-->
<controls_file> ResultsCMC/subject01_walk1_controls.xml </controls_file>
</ControlSetController>
</objects>
</ControllerSet>
<!-- External Loads -->
<external_loads_file> subject01_walk1.xml</external_loads_file>
</ForwardTool>
</OpenSimDocument>
六、最佳做法和故障排除技巧Tips
跳转官方链接点击此处
1)前向动力学仿真对初始条件敏感,因此优良作法是仔细检查初始条件是否适合所需的模拟。
2)如果Forward Dynamics Tool出现“正常”故障(即,不会使OpenSim崩溃)或工具的输出漂移太大(即模型“错位发疯”),缩短Forward Dynamics Tool的运行间隔(即,让initial_time和final_time的时间参数设置在Forward Dynamics工具设置对话框或在设置文件中更加接近)。在积分过程中,由于数值误差的累积,开环前向动力学倾向于随时间漂移。
3)如果问题很棘手,并且积分器必须采取许多小的时间步骤,那么前向动力学仿真将会很慢并且生成非常大的结果文件。一些常见的情况会导致一些棘手的问题:
①相对于其他模型体质量较小的物体使系统变得僵硬。小的质量加上大的力也会使问题变得棘手。
②如果有一个联系人模型,检查设置。如果前向动力学运行很慢,尝试降低“transition_velocity”。在接触模型中有大量的阻尼和高刚度值也会导致问题。
4)在模型中使用许多包装表面会增加计算时间。圆柱型包裹面比椭球型包裹面具有更好的性能。