一、基础介绍
OpenSim软件的运动学和动力学仿真使用SimBody引擎,其核心模块为:Scale,IK,FD,ID,RRA,CMC。Scale用于通用模型的缩放和体征参数的标定,以适应受试者的差异性体态特征;IK为逆运动学反解,通过实测的标记点数据,通过加权最小二乘方法反向求解出个各个多个关节自由度的变化曲线。RRA是残差缩减算法,由于测量噪声、建模误差以及加速度的估计误差带来的残差力导致动力学模型输出与实测力发生了冲突,RRA通过调整躯体各骨骼结构的质量分布,修正IK反解的逆运动学曲线是的模型动力学输出符合实测。CMC则是根据Hill肌肉收缩力模型,RRA优化的运动学曲线和实测足底压力信息作为输入,通过静态优化算法和正向动力学仿真,计算各肌肉纤维的激活程度和出力情况。各模块的数据流程图如下所示:
二、IK(逆运动学计算)
IK的目的
逆运动学Inverse Kinematics,简称IK,在OpenSim中主要用于生成模型的运动信息。
在OpenSim官网中,是这样描述的:IK工具将遍历运动的每个时间步(帧)来计算广义坐标,该坐标将模型的marker放置在与实验数据(受试者标记点)最匹配/最贴合的位置。在数学上,“最匹配”表示为加权最小二乘问题。
通俗的说,当你通过实验获得了一组受试者身体各个标记点的运动轨迹数据之后,利用IK工具,可以让模型的markers沿着实验数据的各点轨迹来运动,这样整体看来,模型就以受试者的姿态完成了在计算机中的“运动”。
三、ID(逆向动力学计算)
ID的目的
逆动力学(ID)工具确定每个关节负责给定运动的广义力(例如,净力和扭矩)。给定描述模型运动的运动学(例如,状态或运动)以及应用于模型的部分动力学(例如,外部负载),ID工具使用这些数据来执行逆向动力学分析。
逆向动力学的目的是估计产生特定运动所需的力和力矩,逆向动力学分析得到的结果还可以用来预测肌肉是如何促成运动的。为算出力和力矩,需要迭代求解系统的运动方程组。运动方程组是由运动描述、模型mass属性得出。然后,利用逆向运动学求出的关节角、实验时地面反作用力数据,根据动态平衡条件和边界条件,从而求解出每个关节处的净反应力和力矩。需要注意的是,关节反应力,或节段间力,是模型中特定关节的总作用力。其区别于关节骨的骨力,是在关节的关节表面上看到的实际力,包括肌肉活动的影响。
在求解逆向动力学问题时,需要运动数据和测力板数据,由此使得运动方程数多于未知量数(自由度数),故成为了一个超静定问题。由于实验运动数据的错误以及模型的不准确,最终导致牛顿第二法则不成立。为解决这个动力学不连续的问题,需要利用残差缩减模块对数据进一步处理。
四、Static Optimation静态优化
STO的目的
SO是逆动力学求解的扩展,它进一步将净关节力矩分解为每个瞬间的单个肌肉力。通过最小化肌肉激活的平方和(或其他功率)来解决肌肉力,在求解关节力矩的基础上进一步计算肌肉的激活程度和发力情况。静态是指在某一时间点能够确定优化的目标值,而不需要等待该过程结束,例如优化起跳高度过程需要等到跳高这一动作结束才能知道结果。对于一组含有冗余变量的方程,其存在多组解,优化则是根据评价标准,例如激活水平的平方和,选取其中较优的一组解作为结果。
五、RRA 残差缩减算法
RRA简介及目的
由于建模误差和测量数据误差导致躯体动力学模型输出存在误差项,和理论结构不符,这个没有物理意义的成分就称为残差,RRA就是要最小化模型的残差。RRA主要通过调整躯体的重心分布,进一步优化运动学曲线轨迹,以保证模型动力学输出与足底压力的一致性。
减少残差的目的是最大程度地减少建模和标记数据处理错误的影响,这些错误很有可能会累积并导致模型产生巨大非物理补偿力。因此在进行 CMC 计算之前一定要对 IK的结果进行残差缩减,否则 CMC 的结果就会出现较大的偏差。具体而言,残差减少会更改特定对象模型的骨块质心,并使逆运动学中的模型运动学发生变化,以便更动态地与地面反作用力数据保持一致。
六、CMC计算肌肉控制
CMC简介及目的
计算一系列的肌肉激活水平(驱动器的控制信息)来追踪期望的运动学轨迹。即:计算一组在存在外力作用下(如果适用)能够驱动动态肌骨模型来跟踪一组输入的目标的运动学(Desired Kinematics)的肌肉激励(或更一般地说,执行器控制Actuator Controls)。
七、FD前向动力学
FD简介及目的
FD前向动力学是指通过使用已知的肌肉激活模式和关节力矩,计算模型在给定时间范围内的运动轨迹和力学行为。这可以帮助研究人员更好地理解和预测人体运动的力学性能。
给定由计算肌肉控制(CMC)或其他方法计算的控制(例如肌肉刺激),前向动力学工具可以驱动前向动态模拟。前向动力学模拟是定义肌肉骨骼模型动力学的微分方程的解(积分)。通过关注感兴趣的特定时间间隔,并使用不同的分析,可以收集有关试验的更详细的生物力学数据。
·肌肉骨骼模型的状态
模型的状态是在给定的时间点定义的所有模型变量的集合,这些变量由动力学控制。模型动力学描述了模型如何随着时间从给定状态前进到另一状态。
在肌肉骨骼模型中,状态是坐标及其速度,肌肉激活和肌肉纤维长度。模型的动力学要求知道模型的状态,以便计算模型状态响应力和控制的变化率(联合加速度,激活率和纤维速度)。
·控制肌肉骨骼模型
肌肉骨骼模型中的力(例如,肌肉力)受动力学控制,并具有影响其行为的输入。在OpenSim中,这些输入称为模型的控件,可以是肌肉的激励或扭矩生成器。最终,控件确定施加到模型的力和(/或)扭矩,并因此确定合成运动。
·动力学方程的数值积分
仿真是从用户指定的初始状态开始,对肌肉骨骼模型的动力学方程式进行的集成。在加入控件后,将计算激活率,肌纤维速度和坐标加速度。然后,通过数值积分来确定将来较小时间间隔之后的新状态。5阶龙格-库塔-菲尔德博格积分器用于求解肌肉骨骼模型状态在一定时间间隔内的轨迹动力学方程(数值解)。
正向动力学工具Forward Dynamics Tool是一个开环系统,可在没有反馈或校正机制的情况下应用肌肉/执行器控制muscle/actuator controls,因此不需要状态遵循期望的轨迹。