逆运动学(Inverse Kinematics)
逆运动学Inverse Kinematics,简称IK,在OpenSim中主要用于生成模型的运动信息。
在OpenSim官网中,我们可以看到这样的描述:IK工具将遍历运动的每个时间步(帧)来计算广义坐标,该坐标将模型的marker放置在与实验数据(受试者标记点)最匹配/最贴合的位置。在数学上,“最匹配”表示为加权最小二乘问题。
通俗的说,当你通过实验获得了一组受试者身体各个标记点的运动轨迹数据之后,利用IK工具,可以让模型的markers沿着实验数据的各点轨迹来运动,这样整体看来,模型就以受试者的姿态完成了在计算机中的“运动”(这个过程也可以认为是将实验运动数据加载到OpenSim模型中的过程,这只是便于理解,实际上并非如此)
IK的主要原理
在IK中,逆运动学计算算法的基本原理就是,按照采样频率将实验数据分成一个一个的“帧”,我们可以假设某次实验用采样频率为30Hz的试验台收集了十秒数据,那么OpenSim中就认为这组数据有300帧,
首先将第一帧到第二帧的实验标记点位置变化记录下来。
紧接着,用模型的markers的位置,来和第二帧的实验标记点进行比较,并驱动模型的各个拥有自由度的关节,使模型姿态发生改变,以达到markers与实验标记在空间上其广义坐标值“完全一致”
这时,我们可以认为,模型已经和第二帧的受试者动作保持一致了。接下来就用第三帧的实验数据和第二帧的模型姿态作为基础,重复上述两个步骤,以此类推直到完成全部帧的计算。
完成上述步骤后,模型就会与实际的人的运动姿态相一致了。
当然,上述过程只是一种理想化的计算。在实际过程中,往往无法保证全部的markers都与目标标记点重合,那么这时候就要引入最小二乘函数来对重合的程度加以评判,以确定什么时候能够达到基本重合,并且进行下一步操作。
关于最小二乘法的具体原理和误差调整的方法,我会在后面的文章中进行详细的探讨,主要原因是我自己现在也没有弄得太清楚,基本上都是使用默认设置哈哈