逆运动学(Inverse Kinematics)逆运动学Inverse Kinematics,简称IK,在OpenSim中主要用于生成模型的运动信息。 在OpenSim官网中,我们可以看到这样的描述:IK工具将遍历运动的每个时间步(帧)来计算广义坐标,该坐标将模型的marker放置在与实验数据(受试者标记点)最匹配/最贴合的位置。在数学上,“最匹配”表示为加权最小二乘问题。 通俗的说,当你通过实验获得了一组受试者身体各个标记点的运动轨迹数据之后,利用IK工具,可以让模型的markers沿着实验数据的各点轨迹来运动,这样整体看来,模型就以受试者的姿态完成了在计算机中的“运动”(这个过程也可以认为是将实验运动数据加载到OpenSim模型中的过程,这只是便于理解,实际上并非如此) IK的主要原理在IK中,逆运动学计算算法的基本原理就是,按照采样频率将实验数据分成一个一个的“帧”,我们可以假设某次实验用采样频率为30Hz的试验台收集了十秒数据,那么OpenSim中就认为这组数据有300帧, 首先将第一帧到第二帧的实验标记点位置变化记录下来。 紧接着,用模型的markers的位置,来和第二帧的实验标记点进行比较,并驱动模型的各个拥有自由度的关节,使模型姿态发生改变,以达到markers与实验标记在空间上其广义坐标值“完全一致” 这时,我们可以认为,模型已经和第二帧的受试者动作保持一致了。接下来就用第三帧的实验数据和第二帧的模型姿态作为基础,重复上述两个步骤,以此类推直到完成全部帧的计算。 完成上述步骤后,模型就会与实际的人的运动姿态相一致了。 当然,上述过程只是一种理想化的计算。在实际过程中,往往无法保证全部的markers都与目标标记点重合,那么这时候就要引入最小二乘函数来对重合的程度加以评判,以确定什么时候能够达到基本重合,并且进行下一步操作。 关于最小二乘法的具体原理和误差调整的方法,我会在后面的文章中进行详细的探讨,主要原因是我自己现在也没有弄得太清楚**(当然不是指算法本身!而是操作方面)**,基本上都是使用默认设置哈哈 IK的操作方法与Scale一样,IK同样拥有两种计算方法,分别是利用现有的数据进行计算或者是利用实验室测量的数据进行计算,与Scale类似的是,如果利用现成的配置进行计算的话,仅仅需要载入IK配置文件——IK-Setup.xml之类的文件。这种操作相对来说比较简单,不清楚的同学可以参见我的上一篇文章: OpenSim学习笔记(四):Scale的原理以及操作 那么下面我们将主要集中介绍一下如何使用自己从实验室获取的数据来进行IK操作 在开始之前,我们默认已经进行了模型缩放Scale的操作,并且此时我们拥有实验数据walk.trc,此处我们选择Gait2392模型作为参考模型,缩放后的模型如下图所示: 完成上述计算的过程中,大家可能会碰到一个问题,那就是自己的文件夹中可能并没有刚刚提到的subject01_walk1.mot这个文件,因为大家的实验过程中也没有得到这样一个文件,那么这个文件到底是干嘛的呢? 首先,就算我们从OpenSim给出的模型库中使用其标准IK配置文件,我们也会发现,在文件夹中是看不到这样一个名为subject01_walk1.mot的mot文件的,这个文件仅仅在你从OpenSim内部进行勾选Coordinate data from trail,并点击后面小文件夹之后才会看到(如上图所示)。 也就是说,一个比较诡异的事情就是在原始的文件夹中找不到这样一个文件(也不是被隐藏了,我不是傻子),但是从OpenSim里面却清楚的看到这个文件确实存在。 那么对于没有这个配置文件的我们来说,要怎么办才能完成IK呢? 结论就是:这个.mot文件其实完全可以不要,当你不勾选Coordinate data from trail时,这样其实就可以直接计算了,只不过Run按钮可能是灰色的。你可以通过如下图所示的weight选项卡 以下是Ik计算的结果,通过最上方的播放控制按钮可以观看计算结果了 |
|
来自: youngerwei > 《机器人》