【Ps: 以下教程用于opensim4.0及更高版本】
Tutorial 3 - Scaling, Inverse Kinematics, and Inverse Dynamics

I.目的

本教程的目的是演示OpenSim如何使用实验数据解决逆运动学和动力学问题。为了诊断运动障碍并研究人类运动,生物力学专家经常要求人类受试者在运动捕捉实验室中进行运动,并使用计算工具来分析这些运动。分析运动的常见步骤是计算运动过程中对象的关节角度和关节力矩。OpenSim具有用于计算以下数量的工具:

1、逆运动学IK用于计算关节角度。
2、逆动力学ID用于计算净关节反作用力和净关节力矩。
逆运动学可以计算出最能重现对象运动的肌肉骨骼模型的关节角度。然后,逆动力学使用模型的关节角度,角速度和角加速度,以及实验的地面反作用力和力矩,来求解每个关节处的净反作用力和净力矩。下面的示意图概述了逆运动学和逆动力学问题。
在本教程中,您将:
1、熟悉OpenSim的缩放scaling,逆运动学和逆动力学工具
2、使用实验数据解决逆运动学和逆动力学问题
3、解释逆动力学解决方案的结果
4、研究逆动态过程中出现的动态不一致

II. Generic Musculoskeletal Model普通肌肉骨骼模型

使用具有23个自由度并由名为3DGaitModel2354的54块肌肉驱动的通用肌肉骨骼模型。
注意:关于模型的详细信息可以在Gait2392和2354模型页面上找到
File-Open Model-D-opensim4.1-Gait2354_Simbody-gait2354_simbody.osim-open

III. Scaling A Musculoskeletal Model缩放肌肉骨骼模型

Scaling:修改通用的骨骼肌肉模型的人体测量学尺寸或物理尺寸,时期与特定受试者匹配。
Registering:放置在模型上用于匹配主体位置的标记。
两者对于IK、ID很重要。
To scale the generic model and register the markers:
Tools-Scale Model-Load-Gait2354-subject01_Setup_Scale.xml-Open

关于缩放工具的详细说明可以在文档的缩放页面中找到。

1) Model Scaling

缩放步骤调整身体部分的尺寸the dimensions of the body segments,以及质量特性the mass properties(质量和惯性张量)(mass and inertia tensor)。可结合使用两种方法执行扩展:
(1) Manual Scaling:允许用户基于某种预定的比例因子来缩放一个部分。适用于没有合适的数据,或者使用替代算法确定尺度因子时。
(2) Measurement-based Scaling:通过比较模型上指定的地标(称为模型标记)和相应的实验标记位置之间的距离测量,确定身体段的尺度因子。

2) Marker Registration

调整模型标记的位置,以匹配标记在主体上的位置。
必须首先为模型估计一个姿势,与静态试验static trial.中被试的姿势非常相似。

3) complete the scale step:

Run-File-Save Model-gait2354_scaled.osim-Save
一个新的注册名为subject01的缩放模型出现在Visualizer窗口中,周围有粉色模型标记。

Q1: 从Scale Tool中得出通用肌肉骨骼模型的质量是75.1646kg,受试对象质量是72.6kg。

Q2: 实验运动数据的捕获频率:60Hz

Q3:手动缩放的身体部位:

IV. Inverse Kinematics逆运动学

运动学Kinematics是对运动的研究,不考虑产生该运动的力和力矩。逆运动学(IK)的目的是根据实验数据估算特定对象的关节角度。在本节中,通过使用对象比例模型和实验收集的步行数据执行IK分析,来估计步行过程中对象的关节角度。
对于记录的运动数据的每个时间步长,IK都会计算一组关节角度,这些角度将模型置于与实验运动学“最匹配”的配置中。OpenSim通过解决加权最小二乘优化问题 a weighted least squares optimization problem来确定此“最佳匹配”,目的是使标记错误最小化。标记误差定义为实验标记 与 相应模型标记之间的距离。每个标记都有一个关联的权重值,指定在最小二乘问题中应该最大程度地减小该标记的误差项。对于每个时间步长,逆运动学工具求解广义坐标的矢量(例如,关节角度)q,可将标记错误的加权总和最小化,表示为:

其中q为广义坐标(如关节角)的向量,xiexp为实验标记i的位置,xi(q)是对应的模型标记i的位置(依赖于q),wi是与标记i相关的权重。

1) set up an inverse kinematics analysis:

Tools-Inverse Kinematics-Load-subject01_Setup_IK.xml-Open

2) Navigate to the Weights tab:


选中R.Knee.Lat变红,run变灰是由于在subject_walk1.trc中没有找到R.Knee.Lat的实验数据。Weights-Run

3) To perform inverse kinematics:

关于逆运动学工具的详细解释可以在文档的逆运动学页面上找到。
Navigator-Motions-IKResults-Associate Motion Data… -subject01_walk1.trc -Open

模型标记为粉色,实验标记为蓝色。
Motion-播放,随着动画进行,虚拟标记与实验标记位置紧密对应。
Window-Messages
Messages窗口记录执行的所有步骤的详细信息。然后,滚动到最底部,提供与运动的最后一帧相关的标记误差和模型坐标误差(例如,关节角度误差)。
注意:所有标记误差的单位均为米,所有坐标误差的单位均为弧度。

步骤1:更新3DGaitModel2354模型标记
Updated markers in model 3DGaitModel2354
Loaded marker file D:\opensim-4.0Beta022518-win64\opensim 4.0\Models\Gait2354_Simbody\ subject01_static.trc (49 markers, 300 frames)

步骤2:缩放通用模型
Measurement 'torso’测量“躯干”
pair 0 (V.Sacral, Top.Head): model = 0.701084, experimental = 0.756975
overall scale factor = 1.07972
Measurement 'pelvis’测量“骨盆”
pair 0 (R.ASIS, L.ASIS): model = 0.256, experimental = 0.262292
overall scale factor = 1.02458
Measurement 'thigh’测量“大腿”
pair 0 (R.ASIS, R.Knee.Lat): model = 0.508288, experimental = 0.538738
pair 1 (L.ASIS, L.Knee.Lat): model = 0.508288, experimental = 0.549642
overall scale factor = 1.07063
Measurement 'shank’测量“小腿”
pair 0 (R.Knee.Lat, R.Ankle.Lat): model = 0.401944, experimental = 0.458672
pair 1 (L.Knee.Lat, L.Ankle.Lat): model = 0.401944, experimental = 0.436842
overall scale factor = 1.11398
Measurement 'foot’测量“脚”
pair 0 (R.Heel, R.Toe.Tip): model = 0.280401, experimental = 0.291576(鞋跟、鞋尖)
pair 1 (L.Heel, L.Toe.Tip): model = 0.280401, experimental = 0.284416
overall scale factor = 1.02708
(鞋跟、鞋尖)

步骤3:在模型上放置标记Placing markers on model
MODEL: subject01
coordinates: 23
forces: 54
actuators: 54
muscles: 54
analyses: 2
probes: 0
bodies: 12
joints: 12
constraints: 0
markers: 39
controllers: 0
contact geometries: 0
misc modelcomponents: 0
Running tool subject01.
……
Frame 96 (t=1.6): total squared error = 0.0135755, marker error: RMS=0.0209265, max=0.079239 (R.Acromium)
InverseKinematicsTool completed 73 frames in 0.77s

Q4:权重值小于1?原因?提示:考虑尚未建模的关节
Q5:运动最后一帧所有标记的均方根误差(RMS)是多少?(含单位),是否合理?
Q6:最后一帧最大标记误差值是多少(含单位)?哪个标记?提示:考虑加权最小二乘问题。


Frame 96 (t=1.6): total squared error = 0.0135755, marker error: RMS=0.0209265, max=0.079239 (R.Acromium)

V. Inverse Dynamics逆动力学

动力学研究的是运动以及产生运动的力和力矩。逆动力学的目的是估计导致特定运动的力和力矩,其结果可用于推断在该运动中如何利用肌肉。为了确定这些力和力矩,需要迭代求解系统的运动方程[3]。运动方程式是使用运动学描述和肌肉骨骼模型的质量特性得出的。然后,利用来自逆运动学的关节角度和实验地面反作用力数据,计算每个关节的净反作用力和净力矩,从而满足动态平衡条件和边界条件[3]。

1) To setup an inverse dynamics analysis:

Tools-Inverse Dynamics-Load-subject01_Setup_InverseDynamics.xml-Open-Run

关于逆动力学工具的详细解释可以在文档的逆动力学页面上找到。

2) To perform inverse dynamics:

Motions-right-click-IDResults-Associate Motion Data…-subject01_walk1_grf.mot-Open-Close

3) examine the results of the inverse dynamics solution by plotting the net moments at the left and right ankles:左右踝关节净力矩

Tools-Plot-Y Quantity-Load File-ResultsInverseDynamics folder-inverse_dynamics.sto-Open-select ankle_angle_r_moment and ankle_angle_l_moment by clicking the corresponding checkboxes-OK「Note: To quickly find these quantities, type ankle into the pattern text box」
X-Quantity-time-OK-Add-Export Image

Q7:
右腿:脚跟撞击(0.67),站立(),膝盖开始弯曲(1.3),脚趾离开(1.412),摆动()
左腿:脚跟撞击(1.25),站立(),膝盖开始弯曲(0.675),脚趾离开(0.820),摆动()
Q8:脚趾离开地面前,踝关节的变化

4) over-determined problem

在求解逆动力学问题时,同时使用了运动学数据和力板数据,使其成为一个过定问题over-determined problem。换句话说,这个问题的方程多于未知数(即自由度)。由于实验运动数据的误差和肌肉骨骼模型的不准确性,违反了牛顿第二定律[3].
处理这种不一致性的一种方法是计算并施加模型中某一特定体段的剩余力和力矩,使牛顿第二定律变为:
这是一个从
到剩余时刻
与地面反应力矩相关的方程式。在这个肌肉骨骼模型中,残差用于骨盆节段。

5) the residuals from the inverse dynamics solution(从逆动力学查看残差)

为了查看逆动力学解决方案的剩余值,在一个新的plot窗口中,观察plot pelvis_tx_force、pelvis_ty_force和pelvis_tz_force与时间的关系。用这个图,回答问题9。

当应用剩余力和力矩使模型的运动动态地与外力一致,即
时,这种策略是不可取的,因为剩余可能很大。为了解决残差和动态不一致性问题,已经开发了更先进的策略,如最小二乘优化 least-squares optimization[3]、残差消除算法the Residual Elimination Algorithm (REA)[5]和残差减少算法the Residual Reduction Algorithm(RRA)[6]。OpenSim实现了一个残差减少算法,作为其生成肌肉驱动模拟[6]的工作流程的一部分。关于残差约简算法(RRA)的详细说明可以在文档的残差约简算法页面上找到。有关这些策略的更多信息,请参见[3]、[5]、[6]和[7]。

Q9:残余力的最大强度是多少?使用问题1中受试者的质量,最大剩余力占体重的多少比例?

References

[1] Delp, S.L., Loan, J.P., Hoy, M.G., Zajac, F.E., Topp E.L., Rosen, J.M. An interactive graphics-based model of the lower extremity to study orthopaedic surgical procedures. IEEE Transactions on Biomedical Engineering, vol. 37, pp. 757-767, 1990.
[2] Anderson, F.C., Pandy, M.G. A dynamic optimization solution for vertical jumping in three dimensions. Computer Methods in Biomechanical and Biomedical Engineering, vol. 2, pp. 201-231, 1999.
[3] Kuo, A.D. A least squares estimation approach to improving the precision of inverse dynamics computations, Journal of Biomechanical Engineering, vol. 120, pp. 148-159, 1998.
[4] Winter, D.A. Biomechanics and Motor Control of Human Movement, Wiley and Sons, pp. 77-79, 1990.
[5] Thelen, D.G., Anderson, F.C. Using computed muscle control to generate forward dynamic simulations of human walking from experimental data, Journal of Biomechanics, vol. 39, pp. 1107-1115, 2006.
[6] John, C.T., Anderson, F.C., Guendelman, E., Arnold, A.S., Delp, S.L. An algorithm for generating muscle-actuated simulations of long-duration movements, Biomedical Computation at Stanford (BCATS) Symposium, Stanford University, 21 October 2006, Poster Presentation.
[7] Delp, S.L., Anderson, F.C., Arnold, A.S., Loan, P., Habib, A., John, C.T., Guendelman, E., Thelen, D.G. OpenSim: Open-source software to create and analyze dynamic simulations of movement. IEEE Transactions on Biomedical Engineering, vol. 55, pp. 1940-1950, 2007.
[8] Chand T. John, Frank C. Anderson, Jill S. Higginson & Scott L. Delp (2012): Stabilisation of walking by intrinsic muscle properties revealed in a three-dimensional muscle-driven simulation, Computer Methods in Biomechanics and Biomedical Engineering.

Opensim教程3-缩放,逆运动学,逆动力学相关推荐

  1. JavaFX逆运动学库2.0

    这是第一篇讲解javafx-ik的基础教程, javafx-ik是JavaFX的逆运动学库. 该库的源代码可以从GitHub下载. 什么是 图1:单骨 骨骼是使用javafx-ik库进行逆运动学的基本 ...

  2. 【现代机器人学】基于指数积的机械臂逆运动学

    0 引言    基于指数积的正运动学    现代机器人学名词概念   有了以上的基础,我们现在利用指数积来对机器人的逆运动学进行求解,有一点需要注意,需要先对机器人进行指数积的正运动学建模,然后才能利 ...

  3. 【机器人学】机器人开源项目KDL源码学习:(4)机械臂逆动力学的牛顿欧拉算法

      机械臂的逆动力学问题可以认为是:已知机械臂各个连杆的关节的运动(关节位移.关节速度和关节加速度),求产生这个加速度响应所需要的力/力矩.KDL提供了两个求解逆动力学的求解器,其中一个是牛顿欧拉法, ...

  4. 【机器人学】平面2R机器人(五)——逆动力学

    前情回顾 [机器人学]平面2R机器人(一)--正运动学 [机器人学]平面2R机器人(二)--逆运动学 [机器人学]平面2R机器人(三)--速度雅可比矩阵 [机器人学]平面2R机器人(四)--正动力学 ...

  5. V-rep学习笔记:机器人逆运动学解算

    IK groups and IK elements VREP中使用IK groups和IK elements来进行正/逆运动学计算,一个IK group可以包含一个或者多个IK elements: I ...

  6. V-rep学习笔记:机器人逆运动学数值解法(Damped Least Squares / Levenberg-Marquardt Method)...

    The damped least squares method is also called the Levenberg-Marquardt method. Levenberg-Marquardt算法 ...

  7. 【现代机器人学】学习笔记七:开链动力学(前向动力学Forward dynamics 与逆动力学Inverse dynamics)

    这节的内容主要讲述机器人动力学的内容.相对于本书其他部分运动学内容相比,把动力学一下子合成了一章.看完以后有三个感受: 1.本章难度相对其他章节较大,因此需要反复去看,以求对重要内容的眼熟,不求全部记 ...

  8. Opensim教程1-骨骼肌肉建模入门

    Opensim教程1-骨骼肌肉建模入门 [Ps: 以下教程用于opensim4.0及更高版本] 一个刚刚接触opensim的小白,从官网上扒的教程,乱七八糟的整理到一起,还有很多疑问. I. Obje ...

  9. MATLAB机器人工具箱【1】——建模+正逆运动学+雅克比矩阵

    MATLAB机器人工具箱[1]-- 机械臂建模+正逆运动学+雅克比矩阵 1. 二维空间位姿描述 2. 三维空间位姿描述 3. 建立机器人模型 3.1 Link 类 3.2 SerialLink 类 3 ...

最新文章

  1. Mybatis之SqlSession
  2. Leangoo思维导图管理用户故事
  3. 【helloworld】-微信小程序开发教程-入门篇【1】
  4. java 下载处于挂起状态_即使脚本执行完成,Java也会挂起。
  5. 干货 | BBR及其在实时音视频领域的应用
  6. 一篇文章搞定面试中的二叉树题目(java实现)
  7. android ui怎么用ps切图,怎样用ps对设计稿进行一键切图?
  8. 云联惠认证时间_云联惠强制关闭真正原因是什么?
  9. [Android] Bitmap OOM解决办法一
  10. 洛谷 P1028 数的计算【递推】
  11. leetcode题库6-- Z 字形变换
  12. SQL Server 历史SQL执行记录
  13. win7 docker centos安装mysql_CentOS 7 使用docker安装mysql
  14. selinux详解及配置文件
  15. linux之源程序编译安装
  16. python 计算两个经纬度的距离_使用经纬度和海拔(高程)计算两点之间的距离...
  17. libcef--在windows或者linux上创建一个简单的应用程序
  18. csharp基础练习题:过滤列表【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
  19. 如何通过西部数据JBOD 分组功能避免数据安全问题?
  20. cos三次方积分_COS分之一三次方积分

热门文章

  1. java 两个set是否相等,java - 两个Set包含相同的元素,但不相等。 为什么会这样呢? - 堆栈内存溢出...
  2. 【JavaScript】实现简易购物车
  3. oracle cpio,怎么打开cpio文件
  4. Linux系统下cpio命令详解
  5. html多行文本框加滚动条,textbox多行带滚动条
  6. 常用的中文分词工具介绍
  7. PwnTheBox(web篇)简单题
  8. 梦古服务器端公告文件修改,9月8日开放新服以及限制部分服务器角色创建公告...
  9. 三言|前期追深度,否则会华而不实,后期追广度,否则会坐井观天
  10. python控制键盘打造梦西游