OpenSIM
初版:2020/05/20
~注意事項~
・本資料は、個人的な学習活動において作成した資料であり、作成者が所属する企業の業務活動とは一切関係ありません
筋骨格シミュレーション
~基本の解析マニュアル~
ⓒ2020 Yuki Koike
改定1:2020/11/28
(改定内容: Scaling, CMC一部追記・修正)
目次
1.はじめに
2.全体概要~OpenSIMの基本的な解析~
3.各解析ステップ詳細
- Scaling
- IK(Inverse Kinematics)
- RRA(Residual Reduction Algorithm)
- SO(Static Optimization)
- CMC(Computed Muscle Control)
2
目次
1.はじめに
2.全体概要~OpenSIMの基本的な解析~
3.各解析ステップ詳細
- Scaling
- IK(Inverse Kinematics)
- RRA(Residual Reduction Algorithm)
- SO(Static Optimization)
- CMC(Computed Muscle Control)
3
自己紹介 はじめに
■職業
■普段の仕事内容
CAE解析(シミュレーション解析)
-機械製品の振動、強度、剛性、流体解析
■OpenSIMとの関わり (※プライベート活動)
機械系メーカーのエンジニア
・仕事で培ったCAE解析スキルの幅を「機械」⇒「人」へ広げるうえで、
個人的な自己啓発活動の一つとしてOpenSIMの勉強を開始
・人間と機械のインタラクションをキーワードに今後、勉強を進めていく予定
※所属企業における業務との関連は一切ありません 4
本資料について はじめに
■対象者
■本資料作成の背景・目的
- これからOpenSIMを始めようと思っている方
- 基本的な解析の流れを理解・習得したい方
- チュートリアルのサンプル解析を説明手順に従って流せる
⇒自分で考えて、データ、ファイルの準備・設定を行い、
基本的な一連の解析を流せるようになりたい方
OpenSIMはオープンソースで導入しやすい反面、国内において有料解析ソフトウェアのようなサポート体制は無く
(※自分の知る限り。海外のユーザーコミュニティ等はある)、オフィシャルなワークショップ・イベントも基本的には海外
開催のみである。また、ネットのリソースもほとんどが海外サイトであるため、独学で取り組むとなると少々とっつきにくく、
習得に時間がかかる。(特に、本業でOpenSIMを扱っておらず、日々の隙間時間で習得を目指す場合)
本資料は、これから研究活動等でOpenSIMの活用を検討している方や、本業の傍らの隙間時間でOpenSIM習
得を目指す方を対象に、最も基本的な一連の解析の考え方・やり方を自主学習で習得できるようにサポートするこ
とを目的とする。
※自身も学習中につき、本資料中に誤りが含まれる可能性があります。予めご了承ください。
また、自身の備忘録も兼ねており、全体的に情報量が多いですが、ご了承ください。 5
本資料について はじめに
■本資料の構成
<全体概要>
・OpenSIMの基本的な解析全体の流れ
・各解析ステップの概要、必要ファイルの説明
<各解析ステップ詳細>
各解析ステップの内容は以下の通り
1.全体の解析ステップの中での位置づけ
2.入出力ファイル
3.概略・仕組み
4.操作手順(全体の大まかな流れ)
5.操作手順(詳細操作手順)
+α:Appendix ノウハウ、疑問集※
※ScalingとRRAのみ
OpenSIMの基本的な解析の流れ、各解析ステップの概要・仕組みを学習する場合は2.全体概要および
3.各解析ステップ詳細の1.~3.までを参照。具体的な操作手順を把握したいときは4., 5.を参照。
6
Scott L. Delp*, Frank C. Anderson, Allison S. Arnold, Peter Loan, Ayman Habib, Chand T. John,
Eran Guendelman, and Darryl G. Thelen,“OpenSim: Open-Source Software to Create and Analyze Dynamic
Simulations of Movement”, IEEE TRANSACTIONS ON BIOMEDICAL ENGINEERING, VOL. 54, NO.11, NOV. 2007
<論文>
Thelen, D.G. and Anderson, F.C., "Using computed muscle control to generate forward dynamic simulations of
human walking from experimental data, J. Biomech., 2006, 39(6):1107-1115
<User‘s guide>
https://simtk-confluence.stanford.edu:8443/display/OpenSim/User%27s+Guide
参考文献 はじめに
7
参考:OpenSIMの推奨学習方法(※個人的な意見) はじめに
<1stステップ>
基本的な解析の流れと仕組みが記載されている論文を読む(google scholar で検索)
おすすめ⇒OpenSim: Open-Source Software to Create and Analyze Dynamic Simulations of Movement
引用件数がかなり多いことから、OpenSIMに取り組む人は、もれなくほぼ全員読んでいると思われる
(いきなりUser’s guideやTutorialに手を出すと、情報が溢れすぎていて何から学べばよいのか迷子になりやすい・・・)
↓上記の論文にざっと目を通すと、おおまかな解析の流れや仕組みが理解できる
<2ndステップ>
User’s guide(https://simtk-confluence.stanford.edu:8443/display/OpenSim/User‘s+Guide) を読む
(英語のサイトだが、Google chromeで開けば、全文日本語訳で読むことも可能。翻訳精度もかなり高い。)
各解析セクションの「Getting Started with~」のページを読むだけでも、おおよその内容がつかめる
<理解すべきこと>
・基本的な解析の各Tool(Scaling⇒IK⇒RRA⇒ID、SO、CMC)が何を(何のために)やっているのか
個別のToolの内容の理解だけでなく、一連の流れの中で各Toolがどのような役割を果たしているのかを理解する
・各Toolに関連するInput、Outputファイルの関係性を理解する(何をInputとして受け取り、何をOutputしているのか)
・一連の解析の流れ(Scaling⇒IK⇒RRA⇒ID、SO、CMC )における各ステップ同士のInput、outputの受け渡しの把握
<3rdステップ>
3-1:サンプルモデルを使って、OpenSIMで一通りの解析をやってみる(Input、Output、一連の解析の流れを意識)
3-2:実測データをベースに自分で0から解析を実行することを想定し、深堀して勉強&解析を行う
本資料とは別に、ネット上のリソースを活用して自主学習する場合の、推奨学習方法を以下に記す
※データ処理、モデル構築はとりあえず後回しで、とにかくOpenSIMを使ってまずは色々解析したい方は、
Tutorial( https://simtk-confluence.stanford.edu:8443/display/OpenSim/Examples+and+Tutorials?desktop=true&macroName=divbox)で色々試すのも
良いかもしれない 8
目次
1.はじめに
2.全体概要~OpenSIMの基本的な解析~
3.各解析ステップ詳細
- Scaling
- IK(Inverse Kinematics)
- RRA(Residual Reduction Algorithm)
- SO(Static Optimization)
- CMC(Computed Muscle Control)
9
基本の歩行解析フロー 全体概要
Scaling
IK
(Inverse
Kinematics)
RRA
(Residual
Reduction
Algorithm)
CMC
(Computed
Muscle
Control)
SO
(Static
Optimization)
ID
(Inverse
Dynamics)
被験者の体格を
再現したモデルを構築
実測マーカの動きを
再現した運動学データの生成
<Output>
スケーリングされた
モデル
・モデル.osim
・モデル用マーカーセット.xml
・実測マーカー(静止状態).trc
<Output>
運動学データ
・実測マーカー(運動中).trc
筋骨格モデルの解析を実施するための準備プロセス
精度の良い解析モデル構築のためには
複数回のトライアンドエラーが必須
・スケーリングされたモデル.osim
・床反力の実測データ.mot
&データ読込設定ファイル.xml
・仮想アクチュエータ設定ファイル.xml
・追跡座標タスク&重み設定ファイル.xml
<Output>
●動的に整合のとれたモデル
(質量中心(COM)と
各BodyのMassが
修正されたモデル)
●調整された運動学データ
動的に整合のとれた
モデルにする
(胴体の質量中心&各Bodyの
質量分布の調整)
筋力・筋活性度の
算出
<※SO、CMCに必要なファイル>
・床反力の実測データ.mot
&データ読込設定ファイル.xml
・仮想アクチュエータ設定ファイル.xml
・筋肉、仮想アクチュエータの制約条件設定ファイル.xml (CMC)
・追跡座標タスク&重み設定ファイル.xml (CMC)
筋力・筋活性度の
算出
関節トルク・力の
算出
※
※
実測のモーションキャプチャーデータを使って0から解析を行いたい場合における、基本的な解析フローを以下に示す。
一連の解析を行うことで、実測した運動に対応する筋力・筋活性度や関節トルク・力の分析ができる。
<メモ(個人的な見解)>
Scalingのプロセス、仮想アクチュエータの取り扱いが結構ややこしい。これらの扱い次第で、
解析結果が大きく変わるため要注意。どう設定するかは解析目的・要求精度により異なる。
具体的にこの範囲の設定にすれば良いという基準の情報も現状見当たらない。
⇒ネット上のサンプルソースや論文等を参考にしつつ、自身でいろいろ試して
経験的なノウハウを蓄積する必要があると思われる。また、モデルの妥当性検証のためには
理学療法やバイオメカニクスの知識向上が必要だと考える。 10
+α 解析フロー(※本資料での詳細説明は省略)
運動の変化を含めて分析したい場合は、FD(Forward dynamics) toolを使う。
FDにより、筋力・筋活性度やアクチュエータの設定により、運動がどう変化するかを分析することができる。
CMC
(Computed
Muscle
Control)
SO
(Static
Optimization)
ID
(Inverse
Dynamics)
筋力・筋活性度の
算出
筋力・筋活性度の
算出
関節トルク・力の
算出
FD
(Forward
Dynamics)
モデルの設定情報に基づき
動作を生成
<SO,CMC,IDとFDの違い>
●SO,CMC,ID
実測した運動
実測した運動を実現するための
筋力や関節トルクを求める
<例1:被験者の現状分析>
・被験者の運動学的な特徴把握
・筋力・活性度、関節トルクの特徴把握
<例2:アクチュエータ(アシスト装具)の検討>
・アクチュエータの搭載により、各部の筋肉の負担が
どう変化するか、どのような設定にすれば最も効果的に
筋肉の負担を減らせるかetc.
●FD
筋力や関節トルクの設定から
運動を生成する
ベースの運動
筋活性度や
アクチュエータトルクの
調整
※CMCは内部でFDの計算を実行しているが
あくまでフィードバック制御をかけるための
役割であり、CMCとFD toolの役割は異なる
?
新しい運動<例1:各部の影響分析>
・各パラメータ(各部の筋活性度等)を調整し、
特定のOutputがどう変化するか、運動がどう変化するか
見る
<例2:アクチュエータ(アシスト装具)の検討>
・アクチュエータの搭載により、運動がどのように変化するか
・運動能力を向上させるには、どうアシストをするべきか
(装具による身体能力拡張の検討)
全体概要
11
各解析ステップ概要
<Scaling>
<IK(Inverse Kinematics)>
目的:
概要・仕組み:
必要ファイル:
1st:[実験のマーカー間距離 / モデルのマーカー間距離の比率] or [手動]で設定したScaling Factorに応じて
各骨(Body)の 位置寸法、質量中心、力の適用点、筋肉の取り付け位置がスケーリングされる
2nd:設定条件(Scaling factor、Target質量、質量分布を保持するorしない)に応じて
各骨(Body)の質量・慣性マスがスケーリングされる
3rd:靭帯や筋肉のアクチュエータ等、距離や長さに依存する要素が調整される
4th:静的なポーズで、モデルのマーカー位置を実験マーカー位置に一致させる
(内部の計算ではIKによりマーカー位置と一般化座標から静的ポーズが算出されている)
モデルの体格を被験者に一致させる
マーカー位置を実験位置に一致させる
①モデル.osim(サンプルから選べばよい)
②モデルのマーカー位置設定ファイル.xml(モデル.osimに読み込まれている場合は不要)
③実験のマーカーデータ.trc(モーションキャプチャーデータ) ※静止状態のポーズ
※モデルと全く同じ姿勢である必要はないが、マーカー間距離の誤差を減らすためになるべく実験と同じ姿勢が望ましい
+α(2回目の解析以降):Scale tool setting file .xml⇒各設定条件がすべて保存されているので便利
基本、2回目以降はこの設定ファイルをLoadして必要な箇所だけ修正して解析を行う
目的:
概要・仕組み:
必要ファイル:
運動中の実験マーカーデータの座標を追従するモデルのモーションデータ.mot (運動学データ) を生成する
(要するに、実験で測定した動作をモデル上で再現させる)
①スケーリングされたモデル.osim
②実験のマーカーデータ.trc(モーションキャプチャーデータ) ※運動中のデータ
+α(2回目の解析以降):IK tool setting file .xml(各設定条件がすべて保存されているファイル)
運動中の各timeステップごとに、実験マーカーの位置座標とよく一致するモデル姿勢(各関節角度)が計算される
(マーカーや座標の重み付き二乗誤差の合計を最小化する計算により、最適な姿勢を算出する)
逆運動学(Inverse Kinematics)なので、あくまで図形的な位置関係を計算しており、力の概念はここではまだ登場しない
全体概要
マーカーデータのみでまともな解析精度を保証するモデルを構築するのは難易度高い。
可能な限り、被験者の体格を精度よく推定するための実データや解剖学的な知見等が必要
(例:マーカー取り付け状態での被験者の写真、用意可能ならレントゲン等(骨のサイズ感把握))
IKは特に難しくない。必要データをそろえればすぐにできる
12
概要・仕組み:
各解析ステップ概要
<RRA(Residual Reduction Algorithm)>
目的:
必要ファイル:
1st :モデルの筋肉が仮想的なアクチュエータ (Residual actuator, Reserve actuator ※)に置き換えられる
※Residual actuator:骨盤に設定された6自由度方向(Fx,Fy,Fz,Mx,My,Mz)の残差力⇒RRAではこれを最小化する
残差力は力学的な矛盾の辻褄を合わせるために導入される仮想的な力(実際には存在しない力)
Reserve actuator:各関節の全自由度に設定された補完力⇒RRAでは筋肉の代わりにモデルを駆動する役割を持つ
2nd:各timeステップにおいて、モデルを運動学データのポジションに移動させるために、
必要な全てのアクチュエータの力・トルクが計算される(目的関数を最小化する力・トルクが算出される)
※内部計算でCMC(Computed muscle control)が実行されている
3rd:シミュレーションの最後に各Residualアクチュエータ(Fx,Fy,Fz,Mx,My,Mz)の時間平均残差力が計算される。
力学的不整合により発生するモデルの極端な傾きを修正するために、残差トルク平均値Mx,Mzの値を使って、
適切な胴体の質量中心が計算される。また、修正すべき全体質量および各Body質量の推奨値が計算される。
4th:胴体の質量中心、各bodyの質量分布を調整したモデルで上記RRAのプロセスを繰り返す
(より残差力が小さくなるようにResidual actuatorの制御設定を調整する(手動で調整?))
5th:RRAプロセスを何回繰り返すかは自己判断⇒残差力etc.が一定の値(User’s guide参照)より小さくなり、モデルの駆動が
ほぼ筋肉のみで実現される状態になればOK(残差力は実際には存在しない仮想の力であるため、基本的に0に近づけるべき)。
※参考:残差を最小化するために、残差力制御の制限値を厳しくしすぎると力が不足してIKの動作を生成できない。
逆に制限値を緩くすると残差力が優先的にモデル駆動のために使用されてしまい、非現実的な物理挙動になる。
実験の誤差やモデルの仮定(一部簡略化したりとか、腕が無いモデルを使用した場合等)の影響により、大抵の場合、モデルの
運動学データ(IK)は床反力データと動的に整合が取れていない⇒RRAにより床反力データと動的に一致する筋骨格モデルにする
①スケーリングされたモデル.osim(2回目のRRA以降は、各回ごとに質量中心・質量分布を更新したモデルを使用する)
②IKの運動学データ.mot
③床反力データgrf.mot & 床反力データ読み込み設定ファイル.xml
④追跡タスクファイル(追跡座標と重み設定) Tasks.xml
⑤仮想Actuatorの設定ファイル .xml
+α(2回目の解析以降):RRA tool setting file .xml⇒各設定条件がすべて保存されている
RRAでは、胴体(torso)の質量中心(COM:center of mass)&各Bodyの質量分布を調整し、IKで得られた運動学データ
を若干変化させることで床反力データと動的に一致させる※質量中心はRRAにより自動調整されるが、各bodyの質量分布はRRAの計
算終了後に提示されるrecommendの数値を手動でモデルに入力し、モデルを更新する必要がある
全体概要
モデルの精度を高めるために、重要なプロセス。
仮想アクチュエータの概念がやや難解
13
各解析ステップ概要
<SO(Static Optimization)>
目的:
概要・仕組み:
必要ファイル:
SOはIDの拡張的な計算であり、各瞬間ごとに、正味の関節トルクから
個々の筋肉の力を算出する。筋力は筋活性度の二乗和を最小化することにより算出される。
<仮想アクチュエータの使用に関して ~なぜ、SOでも必要なのか~>
・RRAで残差を減らしているとはいえ、0になるわけでなはい。モデルの様々な仮定の影響や実測の誤差等の影響のため、
必ず残差は残ってしまう。したがって、SOでも残差を補うための仮想アクチュエータが必要となる。
・モデルの筋力が弱い場合や仮想アクチュエータの力が不足している場合、最適化計算に異常に時間がかかるor
収束しない可能性がある。その場合は、仮想アクチュエータの設定を調整する。
ただし、仮想アクチュエータは実際には存在しない力なので、理想的には無いに越したことはない。
計算がうまく実行できる範囲で極力小さい値に設定する必要がある。
安易に大きい力を設定してしまった場合、全く異なる非現実的な解析結果が出てしまう
(≒アシスト装具を装着して制御力を与えているような状態になってしまう)
仮想アクチュエータの扱いは最新の注意を払うこと!!
運動学データのモーションに対応する筋力・筋活性度を算出する
①RRAで調整されたモデル.osim
②RRAで調整された運動学データ.sto
③床反力データgrf.mot & 床反力データ読み込み設定ファイル.xml
④仮想Actuatorの設定ファイル .xml
※RRAのActuator設定をそのまま流用はできない(上記の観点より)
また、RRAでは筋肉をすべてActuatorに置き換えるため、reserve actuatorの力をある程度大きな値に設定するが、
SOではあくまで力不足による計算エラーを防ぐ目的で使用する。したがって、基本的にはresidual、reserveともにActuatorの力は
最小限の大きさに設定する
<SOに使用するInputデータについて ~RRAを事前にやる必要あるのか?~>
RRAをやらずにScaling⇒IK⇒SOのプロセスで解析を行うこともできる。ただし、RRAをやらない場合、モデルの質量中心
や質量分布の誤差が大きい可能性が高い。したがって、SOのプロセスにおいて残差力が大きくなってしまうor計算がなかな
か収束しない可能性がある。結果的にSOのプロセスで苦労したり、Scalingのプロセスからやり直すことになるので、
RRAは基本的に実施すべきであると考える。
全体概要
精度の高いモデルが構築できていれば苦労しない。
精度の低いモデルだと、計算流れなかったり
最悪の場合モデルの構築を0からやり直しになる
14
各解析ステップ概要
<CMC(Computed Muscle Control)>
目的:
概要・仕組み:
必要ファイル:
<SOと何が違うのか?>
CMCの内部計算では、SO+FD(Forward dynamics)+PD制御(フィードバック制御の一種)を
組み合わせた計算を実行している。
SOの解析結果をFDの入力として活用⇒FDによりモデルの位置、速度を算出⇒FDで算出した位置、
速度のデータを使って、PD制御をかける
⇒計算の仕組みから考えると、フィードバック制御をかけることで、時間軸の中で動的に整合のとれたモデルが構築できる
CMCのほうが精度の良い解析結果が得られると考えられる。また、SOは各瞬間ごとに最適化しているのみなので、
応答結果が振動的になりやすいのでは??(フィルターかければほぼ解決することかもしれないが・・・)
運動学データのモーションに対応する筋力・筋活性度を算出する
①RRAで調整されたモデル.osim
②RRAで調整された運動学データ.sto
③床反力データgrf.mot & 床反力データ読み込み設定ファイル.xml
④仮想Actuatorの設定ファイル .xml
※SO同様、RRAのActuator設定をそのまま流用はできない
⑤追跡タスクファイル(追跡座標と重み設定) Tasks.xml
⑥制御力の拘束条件設定ファイル control constraints .xml(無くても計算は流れる 無い場合は0.02-1の閾値が全筋肉に適用)
<Control constraints(制御の拘束条件)ってどう使うの?>
CMCを実施すると、内部計算においてOptimizerが、本来アクティブにすべきでない筋肉をアクティブにしてしまう場合があ
る。したがって、たとえば、事前に筋電図のデータが得られていた場合を考えてみる。解析結果において、実測の筋電図デー
タでは活性化されていない筋肉が活性化されていた場合、Control constraintsによって意図的にそれを抑制することが
可能となる。
メモ(個人的な所感):EMGデータがない場合、解析の筋活性度の妥当性判断かなり困難?
想定外の筋肉が活性化されてしまう事象が頻繁に起こりえるのであれば、解析の妥当性を
どう保証するのか?そもそも適切なControl constraintsの設定はいったい何なのか?・・・
⇒とりあえずは色々なネット上のリソース、論文を参考にして経験則的なノウハウを蓄積していく
&人間の運動に関する理解を深めていくしかないか?・・・
⇒未知のメカニズム解明等に取り組む場合はどうしたらよいのか?(新規発見なのか単なる計算エラーなのかどう判断する?)
全体概要
15
目次
1.はじめに
2.全体概要~OpenSIMの基本的な解析~
3.各解析ステップ詳細
- Scaling
- IK(Inverse Kinematics)
- RRA(Residual Reduction Algorithm)
- SO(Static Optimization)
- CMC(Computed Muscle Control)
16
Scalingの位置づけ Scaling
Scaling
IK
(Inverse
Kinematics)
RRA
(Residual
Reduction
Algorithm)
CMC
(Computed
Muscle
Control)
SO
(Static
Optimization)
ID
(Inverse
Dynamics)
被験者の体格を
再現したモデルを構築
実測マーカの動きを
再現した運動学データの生成
<Output>
スケーリングされた
モデル
<Output>
運動学データ
<Output>
●動的に整合のとれたモデル
(質量中心(COM)と
各BodyのMassが
修正されたモデル)
●調整された運動学データ
動的に整合のとれた
モデルにする
(胴体の質量中心&各Bodyの
質量分布の調整)
筋力・筋活性度の
算出
筋力・筋活性度の
算出
関節トルク・力の
算出
基本的な全解析フローの中における最初のプロセス
Scalingの精度が解析の結果に直結するため、非常に重要
・モデル.osim
・モデル用マーカーセット.xml
・実測マーカー(静止状態).trc
・実測マーカー(運動中).trc
筋骨格モデルの解析を実施するための準備プロセス
精度の良い解析モデル構築のためには
複数回のトライアンドエラーが必須
・スケーリングされたモデル.osim
・床反力の実測データ.mot
&データ読込設定ファイル.xml
・仮想アクチュエータ設定ファイル.xml
・追跡座標タスク&重み設定ファイル.xml
17
入出力ファイル Scaling
Scaling
Tool
①モデル.osim
目的:モデルの体格を被験者に一致させる。マーカー位置を実験位置に一致させる
<使用ファイル概要>
Input
①モデル.osim:とりあえずはsampleモデルから直立姿勢のモデルを選べばよい ※今回は上図sampleファイルをそのまま使用
②モデルのマーカー位置設定ファイル.xml:スケーリングで実験マーカーと比較・一致させるためのモデルの初期マーカー位置の設定ファイル
(モデル.osimにすでに読み込まれている場合は不要) ※今回は上図sampleファイルをそのまま使用
③実験のマーカーデータ.trc(モーションキャプチャーデータ): 静止状態ポーズの実験マーカーデータを用意する ※今回は上図sampleファイルを
そのまま使用 ※モデルと全く同じ姿勢である必要はないが、マーカー間距離の誤差を減らすためになるべく実験と同じ姿勢が望ましい
Output
Scalingされたモデル.osim:骨格サイズや重量、マーカー位置が調整された被験者相当のモデル。以降の解析ステップで使用
このモデルの精度が、後々のステップを円滑に進められるか&解析の精度に直結する
②モデルのマーカー
位置設定ファイル.xml
③実験マーカーデータ.trc
※静止状態ポーズ
Input Output
Scalingされたモデル
.osim
<注意事項>
本資料の説明では、sampleモデル(Models/Gait2354_Simbody/gait2354_simbody.osim)を
使用した解析を例として取り扱う。ただし、各種設定ファイルは、サンプルやUser’s guide等を参考にしながら適宜、自身で
調整したデータを使用している。また、以降の解析ステップでは、自身が解析して得られたOutputデータを使用している。
※したがって、資料中に登場するデータ名や解析結果は必ずしもsampleのものと一致するわけではないので注意。
(gait2354_simbody.osim)
(gait2354_Scale_MarkerSet.xml)
(subject01_static.trc)
(gait2354_simbody_scaled.osim)
各設定条件をすべて記録した
設定ファイル.xml(2回目以降使用)
※仮名
18
概略・仕組み Scaling
スケーリング前のモデル
&モデルマーカー
実験マーカーデータ.trc
(被験者の静止ポジション)
スケーリング
被験者によく一致したモデル
各ステップの解析を実行するための、被験者相当のモデルが構築される
スケーリング前 スケーリング後
モデルの骨格 ≠ 被験者の体格
モデルマーカー位置 ≠ 実験マーカー位置
モデルの骨格 ≒ 被験者の体格
モデルマーカー位置 ≒ 実験マーカー位置
目的:モデルの体格を被験者に一致させる。マーカー位置を実験位置に一致させる
19
概略・仕組み Scaling
1st:[実験のマーカー間距離 / モデルのマーカー間距離の比率] or [手動]で
設定したScaling Factorに応じて各骨(Body)の 位置寸法、質量中心、
力の適用点、筋肉の取り付け位置がスケーリングされる
<より詳細なScalingの仕組み>
2nd:設定条件(Scaling factor、Target質量、質量分布を保持するorしない)に応じて
各骨(Body)の質量・慣性マスがスケーリングされる
3rd:靭帯や筋肉のアクチュエータ等、距離や長さに依存
する要素が調整される
4th:静的なポーズで、モデルのマーカー位置を実験マーカー位置に一致させる
(内部の計算ではIKによりマーカー位置と一般化座標から静的ポーズが算出されている)
※内部的な計算の仕組み説明であり、実際の操作手順を示しているわけではないので注意
筋骨格モデルの
Scaling
マーカー位置の
調整
20
操作手順(全体の流れ) Scaling
②モデルのマーカーセット準備&モデルマーカー配置の事前調整(重要)
③Scaling Toolの設定
●③-1:Settingsタブの設定(入力ファイルの指定等)
●③-2:Scale Factorsの設定(重要)
●③-3:Static Pose Weightsの設定
・正しい倍率でスケーリングするためにモデルのマーカー配置を調整する
⇒例えば、被験者の写真を利用して、各骨格Bodyに対する相対的なマーカー位置が
実験マーカーと一致するようにマーカー配置を調整する
(被験者のマーカー添付位置の肉厚を考慮し、骨格Bodyに対するマーカー位置を決める必要がある)
⇒被験者の体格に応じて、スケーリング前のマーカー位置も適切に配置しておく必要がある
筋骨格モデルのスケーリングに使用する実験マーカーファイルの指定、質量分布を維持するかどうかの設定
モデルのマーカー位置調整用の実験マーカーファイルの指定
モデル全体質量の指定
・モデルの初期マーカー間距離と実験マーカー間距離に基づいたScale factorの設定
(各Body、各方向に対してScale factorを設定する必要がある)
・スケーリング精度に直結する重要な要素であるが、残念ながら解析者の判断で手動で設定する必要がある
マーカーと座標の重みづけの設定(各々に対してどの程度実験マーカーと一致させるかの重みづけ)
④Scalingの実行(Run)
Scalingの結果次第で
モデルの初期マーカー
配置の調整からやり直す
Output:被験者相当のモデル.osim
①被験者の実験マーカー(モーションキャプチャーデータ)データ準備
スケーリングの指標となる被験者の実験マーカーデータ(.trc)ファイルを準備する
21
<201128追記メモ>
結局どのようなプロセスでScalingを行えばよいのか?に関して
個人的な見解を以下に記している
⇒P51: Scalingノウハウ集の最後のページ
操作手順(詳細操作) Scaling
<①被験者の実験マーカー(モーションキャプチャーデータ)データ準備>
1. 実験で得られたマーカーデータ(静止状態のポジション)を以下の形式で整理する(エクセルで編集)
(OpenSIMで読み込むためには指定の形式ルールを守る必要がある)
2. .txt テキスト(タブ区切り)の形式で保存する(Notepadで読み込める形式にする)
7行目以降:各マーカーの時系列データ
4行目:各マーカーの名前
(モデルのマーカー名と同じにする)
5行目:測定データの軸方向X, Y, Z
※OpenSIMではX(前後方向)、Y(上下方向),
Z(左右方向)であるため、OpenSIMの座標軸定義に
合致するようにX,Y,Zのデータを整理する
※図はsampleファイル:subject01_static01.trcの値
1~3行目:測定条件の基本情報
22
操作手順(詳細操作) Scaling
<①被験者の実験マーカー(モーションキャプチャーデータ)データ準備>
3. 保存した.txtファイルをNotePad++で開く
⇒拡張子 「.trc」で保存しなおす
⇒実験データ準備完了
ネットで検索してインストール(無料)
OpenSIMを使う上で必須のアイテム
4.実験データがOpenSIMで正しく読み込まれるか確認する
File⇒Preview Experimental Data…を選択し、
作成した.trcファイルを開く
左手
右手
左足
頭
胴
右足
※図はsampleファイル:subject01_static01.trcのデータ
読み込み成功!
※マーカーの数はモデルに対して余分に存在しても問題なし
モデル上に無い名前のマーカーは使用されないだけでエラーにはならない
静止状態ポジションのマーカー
23
操作手順(詳細操作) Scaling
<②モデルのマーカーセット準備&モデルマーカー配置の事前調整(重要)>
1. OpenSIMでScalingのベースとなる筋骨格モデル(.osim)を開く
ベースモデルは解析の目的に応じて選択する(腕の有無、筋肉の数等モデルにより異なる)
※本資料では例としてgait2354_simbody.osimを使用
gait2354_simbody.osim
2. 実験マーカー配置と対比するためのモデル上のマーカーセット.xmlファイルを読み込む
(すでにモデル.osimにマーカーが読み込まれている場合は不要)
※本資料ではgait2354_Scale_MarkerSet.xmlをそのまま使用
3. マーカーの名前を実験データのマーカー名と一致させる(sampleファイルは既に一致している)
※マーカー数に過不足がある場合は適宜、マーカーを追加・削除する
マーカーなし
開いたモデルの「Marker」を右クリック
⇒Load from fileでマーカーセットの
.xmlファイルを選択
マーカー
●モデルのマーカーセット準備
24
操作手順(詳細操作) Scaling
<②モデルのマーカーセット準備&モデルマーカー配置の事前調整(重要)>
1. 実験マーカーの全体配置とおおよそ一致するようにモデルマーカーの配置を調整する
(大きく配置がずれているマーカーがあるとScalingですべてのマーカー位置を精度よく実験マーカー位置に
一致させることができない&初期のモデルマーカー配置が後述のScale Factorに直結する)
※sampleのファイル(gait2354_Scale_MarkerSet.xml)はすでにおおよそ一致している
●モデルマーカー配置の事前調整(重要)
モデルのマーカー配置 実験マーカー配置
<メモ>
現実的に考えて、この実験マーカー配置だけを見てモデル上の
マーカーを適切に配置することは困難である。
実際に自分で0から調整するときは
被験者の写真(マーカー設置状態)等を参考にしながら
モデル上のマーカー位置を調整する
25
操作手順(詳細操作) Scaling
<②モデルのマーカーセット準備&モデルマーカー配置の事前調整(重要)>
2. モデル上のマーカー位置(骨に対する相対的な位置)が被験者のマーカー位置(骨に対する相対的な位置)
と一致するように、解剖学的な配置のマーカー(各関節、骨近傍のマーカー)位置をさらに微調整する
(※大腿部等のマーカーは、明確な設置位置を把握することが困難であるため、おおよその設置位置を合わせておけばOK)
⇒具体的には、被験者の肉厚分を考慮して※モデルのマーカー位置を調整する必要がある。
※肉厚の絶対値ではなく、骨のサイズに対する相対的な肉厚の比率を
モデルと被験者で一致させる。詳細は後述ノウハウ集参照
この配置調整が、後述のScale Factorの数値に影響してくる
●モデルマーカー配置の事前調整(重要)
大腿部
下腿部
膝
被験者の体とマーカー添付位置
被験者の肉厚分※を考慮し、
マーカー位置微調整
被験者の写真(マーカー設置状態)等を
参考にする
26
解剖学的配置のマーカー
(配置の微調整必要)
おおよそ配置を合わせれば
OKのマーカー
<201128追記メモ>
解剖学的な位置(各関節近傍)のマーカは、配置の事前調整後、骨に対する相対的な位置
をFixedにしたほうがよさそう(Freeの状態だと、Scalingの計算時に、マーカが骨に対して独
立して動いてしまい、関節位置から大きくずれてしまう可能性があるため。また、Fixedにするこ
とで、Scaling時にマーカーと骨が一体となって動くことになるため、骨の姿勢含めて被験者の
状態に合わせこむことができる)
(参考:Youtube:OpenSimVideos)
⇒この場合、Scale FactorをManualやUniformにしてしまうと、マーカ位置を実験と
うまく一致させられないかもしれない(Fixedの場合、マーカ位置は骨のサイズ、姿勢に完全に
依存することになるため) したがって、マーカー位置を精度よく実測に一致させるためには、
Scale Factorや重み付けの見直しを行いながら、Scalingのプロセスを複数回行う必要が出
てくる。
一方、大腿部のマーカー等(Tracking用マーカー)は、明確な位置にモデルマーカーを手動で
配置することが難しい。したがって、この段階で配置を微調整する必要はなく、おおよそ実測の
配置に近しい場所に配置できていればよい。明確に配置を決められないこれらのTracking
マーカー位置は、骨に対してFree(Fixedにチェックしない)にしておく(理由:Fixedにしてし
まうと、モデルマーカー位置の誤差がScaling後の骨の姿勢の誤差に大きく影響してしまう)。
※尚、解剖学的なマーカー位置を、Scaling後に手動で大幅に動かして実験マーカー位置に
合わせるのはNG⇒マーカー位置が一致しても、解剖学的な位置がずれてしまうため(例:膝
関節に対する相対的なマーカ位置 etc.)
<参考情報↓ :OpenSimVideos 動画の26分~参照>
https://www.youtube.com/watch?v=ZG7wzvQC6eU
操作手順(詳細操作) Scaling
<②モデルのマーカーセット準備&モデルマーカー配置の事前調整(重要)>
2. の続き マーカー位置の調整方法は主に以下の2通り
(他の方法:マーカーセットの設定ファイル.xmlをNotePad++で直接いじる)
●モデルマーカー配置の事前調整(重要)
方法2:マーカーをクリック&ドラッグで位置を調整する
(直感的に操作可能大まかな配置調整をしたいとき等)
方法1:Markerリストで座標調整する
(細かい微調整をしたいとき等)
27
※Fixedにチェックを入れることで
骨に対するマーカーの相対的な位置を固定できる
操作手順(詳細操作) Scaling
<③Scaling Toolの設定>
③-1:Settingsの設定(入力ファイルの指定等)
1. Tools⇒Scale Modelを選択して、Scalingの各種設定用Windowを開く
2. Settingsの設定をする
Scaling後のモデルの名前
※OpenSIMの操作画面上での名前であり、出力ファイル名とは関係ない
Scalingの対象モデル
(確認のみ)
Scaling後の体重の目標値
(Scaling後はこの体重になる)
モデルのマーカーが読み込まれていない場合は
ここで指定することも可能
モデル(筋骨格)のスケーリングに使用する
実験マーカーデータ .trc(静止状態ポジション)
&骨(body)の質量分布のスケーリング方法を
指定する(次スライドで説明)
マーカー位置のスケーリングに使用するデータ.trc
を指定する(後のスライドで説明)
28
チェックON:ベースモデルの各骨(Body)の質量分布を維持したままTotal質量を目標質量に一致させる
チェックOFF:設定したScale Factorに沿って各骨が個別の比率でスケーリングされる
(全体重量は目標質量に一致するように再調整される)
操作手順(詳細操作) Scaling
<③Scaling Toolの設定>
③-1:Settingsの設定(入力ファイルの指定等)
Preserve mass distribution(PMD):質量分布のスケーリング方法の選択 ※詳細は後述のノウハウ集参照
スケーリングに使用する実験マーカーデータ.trc(静止状態ポジション)の指定
※本資料ではsample:subject01_static01.trcを使用
Average measurements between times:
実験マーカーデータからScalingに使用する※時間範囲を指定する
スケーリングの実験マーカー位置はここで指定した時間範囲の平均値が適用される
※厳密には、Scale factor(筋骨格bodyのスケーリング倍率の設定値)を決めるのに使用される
<メモ:時間範囲の決め方>
1.実験マーカーデータを再生して、データを確認する
2.大きくマーカーが動いてしまっている時間帯があれば
その時間帯を除いた範囲をAverage measurements between
times として指定する
※sampleの実験マーカーセットの場合、最後あたりに頭が大きく
傾く挙動が見られるので、その時間帯を除いた範囲を指定する
再生
Scale Model項目
29
操作手順(詳細操作) Scaling
<③Scaling Toolの設定>
③-1:Settingsの設定(入力ファイルの指定等)
Adjust Model Markers項目
Marker data for static pose:マーカー位置のScaling(実験マーカーとの一致)に
使用する実験マーカーデータ.trcを指定する(基本的にScale Modelの項目と同じでOK)
実験マーカーデータからマーカー位置のScalingに使用する時間範囲を指定する
(使用データが同じであれば、時間範囲の設定もScale Modelの項目と基本同じでOK)
とりあえずは気にしなくてOK(チェックOFF)
30
Scalingにおける、筋骨格モデルの拡大縮小倍率(Scale Factors)の設定を行う
このScale Factorの設定値に基づいて、骨(Body)の拡大縮小と質量・慣性マスの調整が行われる
※靭帯や筋肉等、距離や長さに依存する要素はScalingされた骨(Body)のサイズに基づいて調整される
操作手順(詳細操作) Scaling
<③Scaling Toolの設定>
③-2:Scale Factorsの設定(重要 ※詳細は後述のノウハウ集参照)
各骨(Body)
の名前
Use measurements:Edit Measurement Setで定義したScale Factorを使用する
Use manual scales : 自分で決めた値をScale Factorに設定する(経験則的な数値や解剖学的知見、レントゲン写真等
を参考として自分で数値を決定する)
左からX(前後)、Y(上下)、Z(左右)のScale Factor(Edit Measurement Setで定義したもの)
X Y Z
左の項目名で定義された
Scale Factorの数値
Uniform ON:3軸方向に同一のScale Factorを設定する
OFF:各軸方向個別のScale Factorを設定する
※本ページ記載のScale Factorの設定はsampleとは異なるので注意
Edit measurement Set(もしくはmanual scale)で定義した
各骨(Body)のScale Factor(左からX,Y,Z軸方向に対応)
次スライド参照
31
操作手順(詳細操作) Scaling
<③Scaling Toolの設定>
※本ページ記載のScale Factorの設定はsampleとは異なるので注意
Edit measurement Set:ベースのモデルマーカーペアと実験マーカーペアの距離の比に応じてScale Factorを決定する。
各骨(Body)、各方向のScale Factor算出に使用するマーカーペアは、すべて自分自身で決める必要がある。
(論文やsampleファイル、ネット上に公開されているデータを参考にしたり、物理的知見、経験的ノウハウに基づいて決める)
自分でScale Factorの名前を定義する
例:pelvisの前後方向であれば「pelvis_FrontRear_scale」等
Scale Factorの数値算出に使用する
マーカーペア(1ペアor2ペアor・・・)
基本は1ペアのマーカーでOK
選択したマーカーの距離の比率
(=実験マーカーの距離/モデルマーカーの距離)で
Scale Factorの数値が決まる
例:FemurのScale Factor
に使用するマーカーペアの一例
R.Knee.Lat
R.ASIS
③-2:Scale Factorsの設定(重要 ※詳細は後述のノウハウ集参照)
32
操作手順(詳細操作) Scaling
<③Scaling Toolの設定>
Static Pose Weightsで各モデルマーカーをどの程度、実験マーカーと一致させるのか重みづけの設定ができる
解析の目的等に応じて、重みづけを設定するorスケーリングで実験マーカーとあまり一致しないマーカーが残ってしまう場合に
重みを調整する。とりあえず、マーカーが一致しない等のトラブルが無い限りはsampleの設定のままでOK
③-3:Static Pose Weightsの設定
マーカーの重み
(大きい値にするほど厳密
に一致させようとする)
33
※<201128追記>
大腿部等のTracking用マーカーはScalingにおける誤差要因となるため※、解剖学
的なマーカー位置の重み付けを相対的に大きくしたほうがよい。 そのほうが骨格の姿勢
の合わせこみ精度も上がる。
※大腿部等のマーカーは、Scaling前のモデルマーカー配置の誤差が大きいため
操作手順(詳細操作) Scaling
<④Scalingの実行(Run)>
各設定を確認し、
Runをクリック
これまでのすべての設定
内容をSaveで保存でき
る。次回以降はLoadで
呼び出せる
34
Scalingノウハウ集
Appendix
①Preserve mass distribution (PMD)のチェックON/OFFの違い
②初期のモデルマーカー位置がScalingに及ぼす影響について
Scaling
35
③その他メモ:結局どういう考え方・プロセスでScalingしたらよいか?
Scalingノウハウ集 Scaling
<Preserve mass distribution (PMD)のチェックON/OFFの違い>
PMD チェックON PMD チェックOFF
スケーリング前のベースモデル.osimの
各骨(骨)の質量分布の比率を維持したまま全ての骨(Body)
のTotal質量を目標Total質量に一致させる
各骨のScale Factor設定値に応じて、各々の骨(Body)が
個別の比率でスケーリングされる。その次に、Total質量が
目標質量に一致するように、全骨(Body)に一律の補正係数
が乗じられる。
= ベースモデルの骨Aの質量 ×
目標Total質量
ベースモデルのTotal質量
スケーリング後の骨Aの質量
= ベースモデルの
骨Aの質量
スケーリング後の骨Aの質量
× 骨Aの
Scale Factor
×
一律の
補正係数β
= ベースモデルの
骨Bの質量
スケーリング後の骨Bの質量
× 骨Bの
Scale Factor
×
一律の
補正係数β
・
・
・
= ベースモデルの骨Bの質量 ×
目標Total質量
ベースモデルのTotal質量
スケーリング後の骨Bの質量
・
・
・
一律の
補正係数β
Scale Factorで調整した全骨のTotal質量
※
=
目標Total質量
ベースモデルと被験者の体格の特徴(脚の長さとか)が
大きく異なる場合は、質量分布が被験者と乖離する
Scale Factorの誤差が、質量分布の誤差に直結する
※Scale Factorは3軸方向の値の掛け算、つまり
3乗で効いてくるので誤差が極端に大きくなりやすい 36
Scalingノウハウ集 Scaling
<Preserve mass distribution (PMD)のチェックON/OFFの違い>
1軸方向(今回はY軸)のみScalingした場合のPMD check ON/OFFの違い検証結果
使用モデル:gait2354_simbody.osim(sample)
Base model mass:75.1646 kg
目標Total mass:97.7140 kg (Base×1.3倍)
Scale Factor : X, Z軸方向はすべて×1,Y軸方向のみ任意の値に設定(下表参照)
評価観点:Total mass(全体質量), Scalingによる各部のmassの増加倍率
37
Scalingノウハウ集 Scaling
<Preserve mass distribution (PMD)のチェックON/OFFの違い>
1軸方向(今回はY軸)のみScalingした場合のPMD check ON/OFFの違い検証結果
①Total massの比較
Total massはPMD ON/OFFによらず
設定した目標Total massに一致する 38
Scalingノウハウ集 Scaling
<Preserve mass distribution (PMD)のチェックON/OFFの違い>
1軸方向(今回はY軸)のみScalingした場合のPMD check ON/OFFの違い検証結果
②Scalingによる各部のmass増加倍率の比較
PMD ON:目標Total mass/Base model massの一律の倍率ですべてScalingされる
PMD OFF:Scale Factorの設定値に応じて、各骨(Body)は個別の倍率でScalingされる
※ PMD OFFにおけるmass増加倍率が Scale Factorの値と一致しない理由は次スライド参照 39
Scalingノウハウ集 Scaling
<Preserve mass distribution (PMD)のチェックON/OFFの違い>
1軸方向(今回はY軸)のみScalingした場合のPMD check ON/OFFの違い検証結果
PMD_OFFの各部massの内部計算メカニズム
②Total massが算出される butこの時点でTotal massは
85.9426 kgであり目標の97.7140 kgと一致しない
⇒ここから、さらに補正係数をかけてTotal massを調整する必要あり
③一回目のScalingによるTotal massと目標
Total massの比を一律の補正係数βとして
各骨(Body)にさらに掛け算してTotal massを
一致させる
①設定した各Scale Factorが
各々の骨(Body)のmassに
掛け算される
40
Scalingノウハウ集 Scaling
<Preserve mass distribution (PMD)のチェックON/OFFの違い>
3軸方向(今回はUniformを例に説明)を使用したときのPMD check OFFの注意点
3軸方向すべてにScale Factorを設定した場合において(全方向いずれも Scale Factor ≠ 1)、
PMD_OFFを使用する際は、massの変化に細心の注意を払う必要がある
結論として、各部の3軸方向のScale Factorを相当良い精度で設定しない限り、PMD_OFFでScalingされた質量分布を
そのまま採用すべきではない(質量分布の誤差が大きくなりやすいため)
3軸方向にScale Factorを設定した場合
Scale Factorの誤差が3乗でmassに
効いてくるので要注意!!※次スライドで説明
41
Scalingノウハウ集 Scaling
<Preserve mass distribution (PMD)のチェックON/OFFの違い>
3軸方向(今回はUniformを例に説明)を使用したときのPMD check OFFの注意点
ベースモデルの
骨Aの質量
~質量のスケーリング計算式~
×
骨Aの
Scale Factor
(X軸方向)
×
一律の
補正係数β
スケーリング後の
骨Aの質量
=
骨Aの
Scale Factor
(Y軸方向)
骨Aの
Scale Factor
(Z軸方向)
× ×
3軸方向すべてにScale Factorを設定した場合(全方向 Scale Factor ≠ 1)、
Scale Factorの設定誤差は3乗で効いてくることになる
例
Base
Scaling
長さ方向のみ
×0.7
3軸方向すべて
×0.7(Uniform)
3軸方向すべて
×1.2(Uniform)
M kg 0.7M kg※
0.7^3
≒0.34M kg※
1.2^3
≒1.73M kg※
※これらの質量に対してTotal mass合わせのために補正係数βがさらに掛け算される 42
Scalingノウハウ集 Scaling
<Preserve mass distribution (PMD)のチェックON/OFFの違い>
じゃあScalingはどうするべきか?(個人的見解)
R.Knee.Lat
R.ASIS
R.Knee.Med
骨の長さ方向のScalingは比較的誤差が出にくい
⇒massのScalingに使用可能
骨の幅方向のScalingは比較的誤差が出やすい(特に被験者の肉厚が大きい箇所のマー
カーペアを使用した場合)⇒単なるマーカーの位置誤差がScale Factorに反映されてしま
う可能性高い。また、左図の例において、膝の箇所のマーカー間距離が大腿骨全体の骨
の太さのScale Factorとして妥当かはわからない
(人によって骨の形状は千差万別?or 膝の幅と比例する?・・・)
⇒骨の太さにかかわる方向は、安易にマーカー距離に基づくScale Factorを
使用すべきではない?(被験者の体格の特徴データ、解剖学的な知見をもとに判断したほ
うがよい?)
筋骨格BodyのScaling:長さ方向(pelvis等の場合は幅)はマーカーペアを使用してScale Factorを設定する、骨の太さにかかわる方向は、
sampleやネットに公開されているリソース、被験者の体格の特徴を示すデータ、解剖学的知見等から総合判断してManual Scaleで設定をする。
MassのScaling:PMD_OFFの場合、Scale Factorの設定により、自動的に決められてしまうため、Scaling後にmassの分布を確認する。⇒
被験者の体格の特徴や解剖学的知見等をもとに不自然な部位を手入力で修正していく(注:massの調整比率分だけinertiaも調整する)
質量&inertiaの分布修正後、Total質量が目標Total質量と一致するように各Bodyに一律の補正係数をかけて値を最終調整する
PMD_ONの場合も基本同様(ただし、標準的な体格であれば、PMD_ONにして、手動での調整は何もしないほうが結果的に良いかもしれない・・・)
前述スライドに示したように幅方向のScale Factorをどう考えるかで
Scaling後の骨の重量は大幅に変わってくる(全体の質量分布が
非現実的な分布になる場合もある⇒つまり、解析の精度に致命的な
影響を及ぼす可能性あり ※影響要調査)
43
<201128追記>
各骨に対する解剖学的なマーカ位置をFixedしたうえでScalingを行う場
合、骨の太さにかかわる方向含めて、全方向のScale Factorを、モデル
マーカと実験マーカの距離比に基づいて設定したほうが良いかもしれない
(理由:マーカーの骨に対する相対的位置が固定されているため)
Scalingノウハウ集 Scaling
<初期のモデルマーカー位置がScalingに及ぼす影響について(重要)>
なぜ、Scaling実行前にモデルマーカー位置を調整する必要があるのか?
⇒これらマーカーと骨の微妙な距離は何なのか?
どうせScalingの計算するんだから初期位置は適当でよいのでは?
初期マーカー位置によってScalingの結果に天と地ほどの差が出てしまう
⇒初期マーカー位置には細心の注意を払う必要あり
(特に脂肪や筋肉量が標準から大きく乖離している被験者の場合)
これより、骨盤(pelvis)を例に考えてみる
被験者の体表面相当※1のライン
<初期モデルマーカー位置>
骨格Body近傍に設置
被験者の体表面相当位置※1に設置
被験者の体表面位置より外側※2に設置
L_wide
L_normal
L_narrow
※1:被験者のサイズ比率(=実験マーカー距離/被験者の骨盤の幅)を
モデルに適用した位置(=モデルマーカー距離/モデルの骨盤bodyの幅)
※2:被験者の実際の体表面位置(=実験マーカー距離)より外側に設置する
という意味(=モデルマーカー距離 > 実験マーカー距離)
ベースモデルの
骨盤
44
<201128追記>
解剖学的な位置が明確でないTracking用マーカは、
そもそもScale Factorとして使用すべきではない.
Scale Factorには必ず解剖学的配置のマーカー(各関節、骨近傍)を使用する
Scalingノウハウ集 Scaling
<初期のモデルマーカー位置がScalingに及ぼす影響について(重要)>
なぜ、Scaling実行前にモデルマーカー位置を調整する必要があるのか?
L_narrow
パターン1:骨格Body近傍にモデルマーカーを設置
モデル
実験
(被験者)
L_exp
Scaling
Scaling後のpelvis
Scale Factor =
L_narrow
L_exp
>
本来の
スケール倍率
被験者の体表面位置まで
pelvisが拡大されてしまう
L_scaled
(=L_exp)
モデルより
やや大きい想定
45
Scalingノウハウ集 Scaling
<初期のモデルマーカー位置がScalingに及ぼす影響について(重要)>
なぜ、Scaling実行前にモデルマーカー位置を調整する必要があるのか?
パターン2:被験者の体表面位置より外側に設置
モデル
実験
(被験者)
L_exp
Scaling
Scaling後のpelvis
L_scaled
(=L_exp)
L_wide
拡大されるべきpelvisが
縮小されてしまう
モデルより
やや大きい想定
Scale Factor =
L_wide
L_exp > 本来の
スケール倍率
46
Scalingノウハウ集 Scaling
<初期のモデルマーカー位置がScalingに及ぼす影響について(重要)>
なぜ、Scaling実行前にモデルマーカー位置を調整する必要があるのか?
パターン3:被験者の体表面相当の位置に設置
モデル
実験
(被験者)
L_exp
Scaling
Scaling後のpelvis
被験者の肉厚が考慮された
Pelvisのサイズになる
モデルより
やや大きい想定
Scale Factor =
L_normal
L_exp ≒ 本来の
スケール倍率
L_normal
L_scaled
(=L_exp)
47
Scalingノウハウ集 Scaling
<初期のモデルマーカー位置がScalingに及ぼす影響について(重要)>
なぜ、Scaling実行前にモデルマーカー位置を調整する必要があるのか?
大きすぎる 小さすぎる 適正
Scaling前の初期モデルマーカー位置により、Scaling後のサイズは大きく影響を受ける
⇒初期モデルマーカー位置の調整は最低限の精度を保証したモデルを構築するうえで重要なプロセス
したがって、
被験者の写真(マーカー添付状態)や、あればレントゲン写真?等を参考に
初期モデルマーカー位置の妥当性を必ず確認し、必要に応じてマーカー位置の調整を行う
別の見方をすると、肉厚が厚い部位はマーカー設置位置の誤差が生じやすく、Scalingの精度が落ちやすい
関節回りの肉厚が厚い人は特に注意する
48
Scalingノウハウ集 Scaling
<初期のモデルマーカー位置がScaling(Scale Factor)に及ぼす影響について(重要)>
なぜ、Scaling実行前にモデルマーカー位置を調整する必要があるのか?
●スケーリングにおけるマーカーの選択(大腿骨のスケーリングにおけるVery Bad例とGood例)
大腿部のような肉厚の厚い部位かつ明確な設置位置が分かりずらい部位(関節から離れた箇所)は、
初期のモデルマーカー位置次第でいくらでもScale Factorが変化してしまうので、選択すべきではない
例えばFemur(大腿骨)のスケーリングをするうえで上左図2つのような大腿部のマーカーペアを選択した場合、
得られたScale Factorの値は、ほぼマーカー設置位置の誤差を拾っているだけといっても過言ではない
上右図のような骨や関節近傍のマーカペアを選択すべきである
R.Knee.Lat
R.ASIS
R.Thigh.Upper
R.Thigh.Rear
Very Bad Good
微妙なマーカーの設置位置の違いで
Scale Factorはいくらでも変わってしまう
関節や骨近傍なのでモデルと実験で
解剖学的なマーカー位置の誤差が出にくい
49
Scalingノウハウ集 Scaling
<初期のモデルマーカー位置がScalingに及ぼす影響について(重要)>
極端なNG事例紹介
初期モデルマーカーの解剖学的な位置がある程度実験マーカー位置と一致していれば
Scalingにより、マーカーの位置は実験とほぼ一致するように調整される
しかし、筋骨格Bodyのサイズ、質量・慣性マスは、これまで説明してきたScale Factorの設定次第で
大きく変わってしまう。以下に、極端なNG事例を紹介する。
<メモ>通常の調整範囲でScale Factorの数値をパラメータスタディしても、変化代が小さいため、仕組みの理解が
しずらい。各パラメータがどう影響するのかを学習するうえでは、下図のように極端な数値で確認するのが良い
Manual scale
一律×2
Manual scale
一律×0.5
マーカー位置は妥当な位置※だが
モデル自体は完全にNG
X, Y, Zのいずれか一方向:×1.2
残りの2軸方向 ×0.8
X(×1.2) Y(×1.2) Z(×1.2)50
※<201128追記>
上図↑では、解剖学的なマーカ位置が骨に対して
Fixedされていなかったため、Scaling後にマーカ位
置と関節位置が大きくずれている(P27参照)
Scalingノウハウ集 Scaling
<③メモ:結局どういう考え方・プロセスでScalingしたらよいか?(個人的見解)>
51
ステップ1:モデルマーカー作成&解剖学的モデルマーカー配置事前調整
実験に対応するマーカーをモデル上に作成。写真等を参考にしつつ、解剖学的な配置のマーカー(各関節、骨近傍のマーカー)位置が実験配置と合うように微調
整する※それ以外のTrackingマーカ(大腿部等)はざっくりでOK(事前にきっちり合わせるのは困難なため)
ステップ2:解剖学的マーカ配置のFix
調整が終わったら、解剖学的な配置のマーカー(各関節、骨近傍)は骨に対する相対的な位置をFixする(fixedにチェック)
大腿部等、解剖学的な位置が明確に定まらないマーカーはFreeにしておく
⇒解剖学的なマーカー位置をFixしておけば、Scalingにより、静止立位時の姿勢(関節角度)が
精度よく求められる(マーカー位置設定がFreeだと、Scaling時にマーカが骨に対して独立して移動してしまう)
ステップ3:Scale Factorの設定
基本的には、全骨、全方向に対してモデルマーカーと実験マーカーの距離比でScale Factorを設定する
(骨にFixされた解剖学的な配置マーカが、実験とよく一致するようにするため)
足部?等 マーカ間距離が短く、モデルマーカ配置の誤差がScalingの誤差として影響しやすい部位に関しては、
適宜UniformやManual scale等を使用する
(例:一番信頼できそうなマーカー間距離のScale Factorを全方向に適用、 文献を参照してManual scaleを設定する等)
ステップ4:Scalingの重み付け設定
パターン1:大腿部等、解剖学的な位置が明確に定まらないマーカーは重み付けを0にする
⇒この場合、Scaling後にこれらのマーカー位置を手動で微調整する
パターン2:大腿部等、解剖学的な位置が明確に定まらないマーカーは重み付けを相対的に低く設定しておく※
※重み付けが大きいと解剖学的なマーカー位置のScaling精度の低下につながるため
ステップ5:Scaling実行とScale Factor・重み付けの再調整
Scalingを実行。Scaling後、必要に応じてScale Factorを調整(Uniform、Manual scale等を使用した部位に特に注意する)
精度よく観察したい部位において、マーカー位置が十分一致しているか等チェックし、必要に応じて重み付けを再調整する
※ステップ4パターン1の場合は、大腿部等のTrackingマーカが実験配置と一致するように手動で微調整する
※基本的にはScaling実行前のモデルに戻って、設定を調整したほうが良さそう(Scale Factorが二重カウントになってしまったり 等々の設定ミスを防ぐため)
ステップ6:Scaling再実行⇒解剖学的な配置のマーカ位置が精度よく実験配置と一致するまで実施
納得できるScaling結果が得られるまで、繰り返し実施する(毎回、Scaling前の最初のモデルに戻って調整を行う)
⇒被験者相当にスケール&姿勢が調整された骨格モデルおよび解剖学的なマーカー位置の設定が完了
<201128追記>
ステップ7:大腿部等 TrackingマーカのScaling 最後の仕上げ
⇒ステップ6でScaleされたモデルに対して、大腿部等その他残りのマーカー位置のみを重み付けし(解剖学的なマーカ位置は重み付けを0にしておく)、
Scale Factorをすべて×1倍(or Scale Factorの設定を全部消す?)にする。この条件でScalingを行い、残りのマーカ位置を実験配置と一致させる
このようにすれば、骨格モデルはそのままで、残りのTrackingマーカー位置のみを実測に精度よく一致させることが可能だと思われる
※パターン1、2いずれにしても
解析目的に応じて適宜重み付けを調整する
(どの部位を重視して観察したいか)
目次
1.はじめに
2.全体概要~OpenSIMの基本的な解析~
3.各解析ステップ詳細
- Scaling
- IK(Inverse Kinematics)
- RRA(Residual Reduction Algorithm)
- SO(Static Optimization)
- CMC(Computed Muscle Control)
52
<Output>
スケーリングされた
モデル
IK(Invese Kinematics)の位置づけ IK(Inverse Kinematics)
Scaling
IK
(Inverse
Kinematics)
RRA
(Residual
Reduction
Algorithm)
CMC
(Computed
Muscle
Control)
SO
(Static
Optimization)
ID
(Inverse
Dynamics)
被験者の体格を
再現したモデルを構築
実測マーカの動きを
再現した運動学データの生成
<Output>
運動学データ
<Output>
●動的に整合のとれたモデル
(質量中心(COM)と
各BodyのMassが
修正されたモデル)
●調整された運動学データ
動的に整合のとれた
モデルにする
(胴体の質量中心&各Bodyの
質量分布の調整)
筋力・筋活性度の
算出
筋力・筋活性度の
算出
関節トルク・力の
算出
ScalingでOutputされたモデルと実験の歩行データ(マーカーの時系列データ.trc)を用いて、実際の動作を
シミュレーション上で再現する(運動学データを生成する)。IKで生成した運動学データを使用して、次のステップのRRA、
SO、CMC、IDの計算が行われる。データを読み込んで計算を走らすのみなので、全体のプロセスの中では最も
設定が簡単なステップの一つである。
・モデル.osim
・モデル用マーカーセット.xml
・実測マーカー(静止状態).trc
・実測マーカー(運動中).trc
筋骨格モデルの解析を実施するための準備プロセス
精度の良い解析モデル構築のためには
複数回のトライアンドエラーが必須
・スケーリングされたモデル.osim
・床反力の実測データ.mot
&データ読込設定ファイル.xml
・仮想アクチュエータ設定ファイル.xml
・追跡座標タスク&重み設定ファイル.xml
53
入出力ファイル
IK
Tool
①Scalingされたモデル.osim
<使用ファイル概要>
Input
①Scalingされたモデル.osim:ScalingでOutputされたモデルを使用する ※上図記載のファイル名はsampleにはないので注意
③実験のマーカーデータ.trc(モーションキャプチャーデータ): 運動中の実験マーカーデータを用意する。マーカー名はモデルのマーカー名と同じに
する必要あり。また、データはScalingの章で説明したようにOpenSIMの形式ルールに整理しておく ※今回は上図sampleファイルをそのまま使用
Output
運動学データ.mot:実験の運動を再現した運動学データ ※上図記載のファイル名はsampleにはないので注意
②実験マーカーデータ.trc
※運動中のデータ
Input Output
運動学データ
(gait2354_simbody_scaled.osim)
(subject01_walk1.trc)
(gait2354_IK_results.mot)
各設定条件をすべて記録した
設定ファイル.xml(2回目以降使用)
IK(Inverse Kinematics)
目的:運動中の実験マーカーデータの座標を追従するモデルのモーションデータ.mot (運動学データ) を生成する
(要するに、実験で測定した動作をモデル上で再現させる)
座標軌道(関節角度,平行移動)を含む
モーションファイル
※仮名
※仮名
54
概略・仕組み IK(Inverse Kinematics)
目的:運動中の実験マーカーデータの座標を追従するモデルのモーションデータ.mot (運動学データ) を生成する
(要するに、実験で測定した動作をモデル上で再現させる)
Scalingされたモデル
(被験者相当の筋骨格モデル)
運動中の
実験マーカーデータ
実験のマーカーデータの動作を
追従する運動学データを生成
逆運動学
計算
逆運動学計算により、マーカーや座標の重み付き2乗誤差の合計(Squared Error)を最小化
⇒各timeステップにおいて、実験マーカーとモデルマーカーが最適に一致する姿勢を計算する
𝑆𝑞𝑢𝑎𝑟𝑒𝑑 𝐸𝑟𝑟𝑜𝑟 =
𝑖=1
𝑚𝑎𝑟𝑘𝑒𝑟𝑠
𝜔𝑖 𝑥𝑖
𝑠𝑢𝑏𝑗𝑒𝑐𝑡
− 𝑥𝑖
𝑚𝑜𝑑𝑒𝑙
2
+
𝑗=1
𝑗𝑜𝑖𝑛𝑡 𝑎𝑛𝑔𝑙𝑒𝑠
𝜔𝑗 𝜃𝑗
𝑠𝑢𝑏𝑗𝑒𝑐𝑡
− 𝜃𝑗
𝑚𝑜𝑑𝑒𝑙
2
x : マーカー座標位置
θ :関節角度
Subject : 被験者マーカーの数値
model :モデルマーカーの数値
[Ref.1]
[Ref.1]: Scott L. Delp*, Frank C. Anderson, Allison S. Arnold, Peter Loan, Ayman Habib, Chand T. John, Eran Guendelman, and Darryl G. Thelen,
“OpenSim: Open-Source Software to Create and Analyze Dynamic Simulations of Movement”, IEEE TRANSACTIONS ON BIOMEDICAL ENGINEERING, VOL. 54, NO.11,
NOV. 2007
ω : 重み係数
55
操作手順(全体の流れ)
②IKの実行(Run)
Output:実験のマーカーデータを追従する運動学データ.mot
①IK Toolの設定(入力ファイルの指定等)
Settingsタブ:Scalingされたモデル.osimおよび実験マーカーデータ.trcを指定する
Weightsタブ:必要に応じてどのマーカー、座標をより厳密に追従させるのか重み付けを行う
※とりあえずはsampleファイルの設定のままでOK 上手くいかないときに調整する
※200812追記:mtpとsubtalarのCoordinateはvalue 0 weight 1000で固定したほうが良いかもしれない
(操作手順(詳細操作):重み付け(Weights)の設定に関してのページ参照)
IK(Inverse Kinematics)
56
操作手順(詳細操作) IK(Inverse Kinematics)
<①IK Toolの設定&②IKの実行(RUN)>
1.Scalingされたモデル.osimを開く
2. Tools⇒Inverse Kinematicsを選択
3.Settingsの設定を行う
IKの対象となるmodel名
(確認のみ)
実験マーカーデータ.trcのファイル名
及びIKに使用する時間幅を指定
出力するフォルダとファイル名の指定
57
操作手順(詳細操作) IK(Inverse Kinematics)
<①IK Toolの設定&②IKの実行(RUN)>
4.WeightsのタブでIKで追従するマーカーセットの確認を行う
⇒必要に応じてIKで追従するマーカー、Coordinateの重みづけを行う(IKが上手くいかなかったときや解析目的に応じて)
※注※ 例えばsampleの実験マーカーデータ.trcの場合、
R.Knee.Lat等、一部のマーカーは存在しないため、チェックを外す
必要がある。計算実行の「Run」ボタンが押せないときは、実験データ
に存在しないマーカー名にチェックが入っている可能性が高いので
要チェック
5.設定をSaveしてRunで実行する
58
操作手順(詳細操作) IK(Inverse Kinematics)
<重み付け(Weights)の設定に関して>
SimTKのソースやデフォルトのサンプルファイル、論文等を参考に重み付けする
59
例:Gait2354simbodyのサンプルファイルの設定
C:OpenSim 4.1ResourcesModelsGait2354_Simbodysubject01_Setup_IK
<要学習>
・Weightsの差の付け方の基準は何か?
予想:誤差の少ない位置、運動学データ生成に重要な位置(足のHeel Tip等)の重みを
増やして、あまり関係ない部位(Top Head)の重みを小さくしている?
絶対値よりも相対的な各重みの比が重要
Markerの重み付け
Coordinateのvalue設定と重み付け
サンプルファイルでは
距骨下関節と足指付け根の関節は0で固定
⇒精度よく追従させることが困難だからか?
こっちのほうが全体のIKの精度が良くなる?
※RRAでも一般的にsubtalarとmtpを
固定したほうが良いとの記載あり(User’s Guideより)
https://simtk-confluence.stanford.edu:8443/display/OpenSim/IK+Settings+Files+and+XML+Tag+Definitions
出典:User’s guideより
mtp
subtalar
https://simtk-confluence.stanford.edu:8443/display/OpenSim/Getting+Started+with+RRA#GettingStartedwithRRA-
Troubleshooting:
<User’s guide ~IK~>
<User’s guide ~RRA~>
目次
1.はじめに
2.全体概要~OpenSIMの基本的な解析~
3.各解析ステップ詳細
- Scaling
- IK(Inverse Kinematics)
- RRA(Residual Reduction Algorithm)
- SO(Static Optimization)
- CMC(Computed Muscle Control)
60
<Output>
スケーリングされた
モデル
RRA(Residual Reduction Algorithm)の位置づけ RRA(Residual Reduction Algorithm)
Scaling
IK
(Inverse
Kinematics)
RRA
(Residual
Reduction
Algorithm)
CMC
(Computed
Muscle
Control)
SO
(Static
Optimization)
ID
(Inverse
Dynamics)
被験者の体格を
再現したモデルを構築
実測マーカの動きを
再現した運動学データの生成
<Output>
運動学データ
<Output>
●動的に整合のとれたモデル
(質量中心(COM)と
各BodyのMassが
修正されたモデル)
●調整された運動学データ
動的に整合のとれた
モデルにする
(胴体の質量中心&各Bodyの
質量分布の調整)
筋力・筋活性度の
算出
筋力・筋活性度の
算出
関節トルク・力の
算出
IKで生成された被験者の運動学データ+床反力データを活用することで動的に整合のとれたモデルを構築する。
RRAで残差(Residual:誤差の推定値)を一定水準以下まで小さくできない場合、状況に応じてScalingからやり直す。
※RRAを実施していなくても次ステップのSOやIDは実施可能。(CMCの場合はRRAの実施が必要)
ただし、SOやIDにおける最終的な解析結果(筋活性度等)の誤差を減らすためには、基本的にRRAは実施するべきである。また、モデルの残差を
この段階で極力減らしておかないと、次の解析ステップで計算の収束性、誤差をどこまで許容するか等で結局苦労する可能性がある。
・モデル.osim
・モデル用マーカーセット.xml
・実測マーカー(静止状態).trc
・実測マーカー(運動中).trc
筋骨格モデルの解析を実施するための準備プロセス
精度の良い解析モデル構築のためには
複数回のトライアンドエラーが必須
・スケーリングされたモデル.osim
・床反力の実測データ.mot
&データ読込設定ファイル.xml
・仮想アクチュエータ設定ファイル.xml
・追跡座標タスク&重み設定ファイル.xml
61
入出力ファイル
RRA
Tool
①Scalingされたモデル.osim
<使用ファイル概要>
Input
①Scalingされたモデル.osim:(2回目のRRA以降は、各回ごとに前回のRRAで質量中心・全体の質量分布を更新したモデルを使用する)
②IKの運動学データ.mot:IKで生成された運動学データ
③床反力データgrf.mot & 床反力データ読み込み設定ファイル.xml:動的に整合性をとるために、外力である床反力データが必要となる
※今回は上図sampleファイルをそのまま活用
※床反力データgrf.motはOpenSIMで読み込める形式に整理する。
④追跡タスクファイル.xml(追跡する座標と重みの設定):RRAの計算で追従する運動学データ座標、重みの設定
※今回は上図sampleファイルをそのまま活用
⑤仮想Actuatorの設定ファイル.xml:動的な不整合の辻褄を合わせるためのResidual actuatorと筋肉の代わりにモデルを駆動するための
reserve actuatorの設定ファイル ※今回は上図記載のsampleファイルをほどんどそのまま活用
(actuatorを設置するpelvisのCOM座標は使用モデル(Scalingされたモデル)に応じて調整必要 2回目以降のRRAでは、Actuatorの設定値も任意調整する)
Output
動的に整合のとれたモデル(胴体(torso)の質量中心(COM)と全体質量分布が修正されたモデル).osim
調整された運動学データ.sto (修正されたモデルの順動力学解析※で得られる運動学データ ※RRAの内部計算で実行される)
③-1床反力データgrf.mot
Input Output
動的に整合のとれたモデル.osim
(gait2354_simbody_scaled.osim)
(subject01_walk1_grf.mot)
(gait2354_IK_results.mot)
各設定条件をすべて記録した
設定ファイル.xml(2回目以降使用)
RRA(Residual Reduction Algorithm)
目的:
②IKの運動学データ.mot
調整された運動学データ.sto
(gait2354_simbody_RRA_adjusted
_Kinematics_q.sto)
(gait2354_simbody_RRA_adjusted.osim)
※仮名
※仮名
※仮名
※仮名
④追跡タスクファイル.xml
⑤仮想Actuator設定ファイル.xml
③-2床反力データ読み込み設定ファイル.xml
実験の誤差やモデルの仮定(一部簡略化したりとか、腕が無いモデルを使用した場合等)の影響により、大抵の場合、
モデルの運動学データ(IK)は床反力データと動的に整合が取れていない(=ニュートンの第二法則:運動方程式を満足しな
い)⇒RRAにより床反力データと動的に一致するモデルにする
(gait2354_RRA_Actuators.xml)
(gait2354_RRA_Tasks.xml)
(subject01_walk1_grf.xml)
62
※Subtalarとmtpのlock方法は操作手順(詳細操作)の最後のほうのページ参照
概略・仕組み RRA(Residual Reduction Algorithm)
目的:実験の誤差やモデルの仮定(一部簡略化したりとか、腕が無いモデルを使用した場合等)の影響により、大抵の場合、
モデルの運動学データ(IK)は床反力データと動的に整合が取れていない(=ニュートンの第二法則:運動方程式を満足
しない)⇒RRAにより床反力データと動的に一致するモデルにする
胴体(torso)※1の質量中心(COM:center of mass)&モデルのTotal質量(各Bodyの質量分布※2)を調整し、IKで得られた運動学データ
を調整することで床反力データと動的に一致させる(残差を減らす)。Outputとして、質量中心・質量分布※2が調整されたモデル&調整された運
動学データが生成される(次の解析ステップで使用)。RRAでは仮想アクチュエータ(Residual actuator, Reserve actuator)という概念が導入
される。モデルの駆動は筋肉の代わりにReserve actuatorが使用される(要するに筋肉なしの骨だけモデルをReserve actuatorで動かしている)。
Residual actuatorは床反力データに対して力学的に辻褄を合わせる役割を持つ。RRAは、このResidual actuatorの力(残差力)を最小化す
るプロセスである。(⇒力学的な不整合を最小化する) ※1胴体(torso)が無いモデルの場合は、全Bodyの中で最も重いBody(例:骨盤(pelvis))を質量中
心(COM)の調整対象に設定する ※2質量分布は解析結果として得られる推奨値をもとに、手動で調整する必要あり。
𝑆𝑞𝑢𝑎𝑟𝑒𝑑 𝐸𝑟𝑟𝑜𝑟 =
𝑖=1
𝑗𝑜𝑖𝑛𝑡𝑠
Ω𝑗 𝑞𝑗
𝑑𝑒𝑠𝑖𝑟𝑒𝑑
− 𝑞𝑗
𝑚𝑜𝑑𝑒𝑙 2
[Ref.1]
[Ref.1]: Scott L. Delp*, Frank C. Anderson, Allison S. Arnold, Peter Loan, Ayman Habib, Chand T. John, Eran Guendelman, and Darryl G. Thelen,
“OpenSim: Open-Source Software to Create and Analyze Dynamic Simulations of Movement”, IEEE TRANSACTIONS ON BIOMEDICAL ENGINEERING, VOL. 54, NO.11,
NOV. 2007
𝐹𝑒𝑥𝑡𝑒𝑟𝑛𝑎𝑙 =
𝑖=1
𝑆𝑒𝑔𝑚𝑒𝑛𝑡𝑠
𝑚𝑖𝑎𝑖 − 𝑭𝒓𝒆𝒔𝒊𝒅𝒖𝒂𝒍
: 外力(床反力)
: 残差力(residual actuatorの力)
: 各Bodyが発生させる力(Body質量×加速度)
:PD制御により決定される各関節の要求加速度
:モデルの各関節の加速度
:各関節の重み係数
IKで得られた運動と床反力データは
力学的に整合が取れていない
仮想アクチュエータで骨だけモデルを駆動
⇒Residual actuatorの力(残差力)を
最小化できるようにモデルを調整する
(胴体の質量中心、全体の質量分布を調整)
Residualアクチュエータ
(役割:力学的不整合の辻褄を合わせる)
Reserveアクチュエータ
(役割:筋肉の代わりにモデルを駆動)
胴体(torso)の
COM
63
概略・仕組み RRA(Residual Reduction Algorithm)
<より詳細なRRAの仕組み> ※内部的な計算の仕組み説明であり、実際の操作手順を示しているわけではないので注意
1st :モデルの筋肉が仮想的なアクチュエータ (Residual actuator, Reserve actuator ※)に置き換えられる
※Residual actuator:骨盤に設定された6自由度方向(Fx,Fy,Fz,Mx,My,Mz)の残差力⇒RRAではこれを最小化する
残差力は力学的な矛盾の辻褄を合わせるために導入される仮想的な力(実際には存在しない力)
Reserve actuator:各関節の全自由度に設定された補完力⇒RRAでは筋肉の代わりにモデルを駆動する役割を持つ
2nd:各timeステップにおいて、モデルを運動学データのポジションに移動させるために、
必要な全てのアクチュエータの力・トルクが計算される(目的関数を最小化する力・トルクが算出される)
※内部計算でCMC(Computed muscle control)が実行されている。筋肉なしの場合、CMCは骨だけのモデルをアクチュエータで駆動して、
床反力と一致する質量分布と関節運動学を算出できる
Residualアクチュエータ
(基本的に骨盤(pelvis)に設定される)
Reserveアクチュエータ
(各関節の自由度に対して設定される)
<仮想アクチュエータ>
<IKの結果>
骨+筋肉 骨+仮想アクチュエータ
𝑆𝑞𝑢𝑎𝑟𝑒𝑑 𝐸𝑟𝑟𝑜𝑟 =
𝑖=1
𝑗𝑜𝑖𝑛𝑡𝑠
Ω𝑗 𝑞𝑗
𝑑𝑒𝑠𝑖𝑟𝑒𝑑
− 𝑞𝑗
𝑚𝑜𝑑𝑒𝑙 2 これを最小化するためのアクチュエータの力・トルクが
各timeステップごとに算出される。
64
概略・仕組み RRA(Residual Reduction Algorithm)
<より詳細なRRAの仕組み> ※内部的な計算の仕組み説明であり、実際の操作手順を示しているわけではないので注意
3rd:シミュレーションの最後に各Residualアクチュエータ(Fx,Fy,Fz,Mx,My,Mz)の時間平均残差力が計算される。
力学的不整合により発生する極端なモデルの傾きを修正するために、残差トルク平均値Mx,Mzの値を使って、適切な胴体(torso)※の
質量中心(COM)が計算される。また、修正すべき全体質量および各Body質量の推奨値が計算される。
Mz Mx
※胴体(torso)
Mx:前額面上の回転トルク
Mz:矢状面上の回転トルク
胴体(torso)の
COM
骨盤(pelvis)の
COM
RRAでは、基本的に全Bodyの中で最も重いBody(体
幹)を質量中心(COM)調整Bodyとして選択する
理由:調整代が大きい&モデルと被験者のCOMの
誤差が大きくなりやすいBodyであるため
𝐹𝑒𝑥𝑡𝑒𝑟𝑛𝑎𝑙 =
𝑖=1
𝑆𝑒𝑔𝑚𝑒𝑛𝑡𝑠
𝑚𝑖𝑎𝑖 − 𝑭𝒓𝒆𝒔𝒊𝒅𝒖𝒂𝒍
※胴体(torso)が無いモデルの場合は、全Bodyの中で
最も重いBody(例:骨盤(pelvis))を質量中心(COM)の
調整対象に設定する
65
概略・仕組み RRA(Residual Reduction Algorithm)
<より詳細なRRAの仕組み> ※内部的な計算の仕組み説明であり、実際の操作手順を示しているわけではないので注意
4th:胴体(torso)※の質量中心(COM)、各bodyの質量分布を調整したモデルで上記RRAのプロセスを繰り返す
(より残差力が小さくなるようにResidual actuatorの制御設定を調整する(手動で調整?))
※胴体(torso)が存在しないモデルの場合は、骨盤(pelvis)等、体幹部の最も質量の大きいbodyを質量中心(COM)の調整対象とする
5th:RRAプロセスを何回繰り返すかは自己判断⇒残差力etc.が一定の値(Usersguide参照)より小さくなり、モデルの駆動が
ほぼ筋肉のみで実現される状態になればOK(残差力は実際には存在しない仮想の力であるため、基本的に0に近づけるべき)。
※参考:残差を最小化するために、残差力制御の制限値を厳しくしすぎると力が不足してIKの動作を生成できない。
逆に制限値を緩くすると残差力が優先的にモデル駆動のために使用されてしまい、非現実的な物理挙動になる。
66
操作手順(全体の流れ)
④RRAの実行(Run)&モデル、仮想Actuatorの修正
残差が十分に
小さくなるまで
繰り返す
Output:動的に整合のとれたモデル
(胴体(torso)の質量中心(COM)と全体質量分布が修正されたモデル).osim
調整された運動学データ.sto
(修正されたモデルの順動力学解析※で得られる運動学データ ※RRAの内部計算で実行される)
①Main Settings(RRA Tool)の設定
RRA(Residual Reduction Algorithm)
②Actuators and External Loads(RRA Tool)の設定
③Integrator Settings(RRA Tool)の設定
計算のステップ数、サイズ、積分計算のエラー許容度を設定する
※とりあえずは、何か問題が発生しない限り、sampleの設定で良い
●②-1:Actuators(仮想アクチュエータ)の設定
●②-2:External Loads(床反力データ)の設定
実験の床反力データgrf.motの読み込み設定をする
※読み込み設定ファイル.xmlを作成しておけば、設定ファイルを指定するだけでOK
NotePad++で仮想アクチュエータの設定ファイル.xmlを開き、数値を設定する
・入出力ファイルの指定(入力設定:IKの運動学データ.mot、追跡タスクファイル.xml
出力設定:RRAで調整されたモデルデータ)
・フィルターの設定(基本的にノイズを除去するためにチェックを入れる 周波数はデフォルトの6HzでOK)
※RRAの対象となるmodel.osimは、現在開かれているモデルが自動的に選択される
2回目以降のRRAでは、質量中心(COM)と質量分布を調整したモデル.osimを使用する
・質量中心を調整する体幹bodyの指定(基本は胴体(torso)、胴体が無いモデルの場合は骨盤(pelvis))
67
操作手順(詳細操作)
<①Main Settings(RRA Tool)の設定>
1.Scalingされたモデル.osimを開き、Tools⇒Reduce Residuals・・・を選択
2.Main settingsの設定を行う
使用するIKの運動学データ.motを指定
フィルターはノイズ除去のため基本的にチェックを入れる
※デフォルトの6Hz設定にしておけば人間の動作以外のノイズが
基本的に除去できる
RRA(Residual Reduction Algorithm)
追跡タスクファイル.xmlを指定
(追跡タスクファイル:どの関節自由度の動作を
追跡するか&それらの重みづけの設定)
・RRAで調整されたOutputモデル.osimのファイル名と保存フォルダの指定
・RRAで質量中心(COM)を調整する体幹Bodyの選択(基本的にtorso)
・使用する運動学データの時間幅の指定
・Outputデータの共通ファイル名(例:~_forces.stoの「~」の部分の名前)の指定
・Outputデータの保存フォルダの指定
Openして選択されているモデルが自動でRRAの対象として選択される
※2回目以降のRRAでは、前回のRRAで調整したモデルを用いてRRAを行う
68
操作手順(詳細操作)
<②Actuators and External Loads(RRA Tool)の設定>
RRA(Residual Reduction Algorithm)
1.仮想アクチュエータの設定ファイル.xmlをNotePad++で開く
(sampleや過去に使用した設定ファイルのコピーでOK。今回はgait2354_RRA_Actuators.xmlをベースにしたファイルを使用)
仮想アクチュエータ設定ファイル
<Residual actuator(基本的にpelvisに対して設定)>
並進3自由度、回転3自由度の合計6自由度に対して
1つずつactuatorを設定する
<Reserve actuator(RRAでは筋肉の代わりにモデルを駆動)>
各関節自由度一つ一つに対して設定する
②-1:Actuators(仮想アクチュエータ)の設定
69
<actuatorの力と制御値の設定 ※詳細は後述の疑問集参照>
操作手順(詳細操作)
<②Actuators and External Loads(RRA Tool)の設定>
RRA(Residual Reduction Algorithm)
②-1:Actuators(仮想アクチュエータ)の設定
2. Residual actuatorの設定を行う
FXの例
※FY,FZも同様に設定
(数値はとりあえずsampleのままでOK)
= Optimal force × control value
アクチュエータの力
(ここではResidual force)
●RRAの最適化計算では「計算コスト」が最も小さくなるようにモデルの各部の力が計算される
(要するに、最小の労力でモデルを駆動できるように各部の力が最適化される)
⇒したがって、計算コストの小さいアクチュエータから優先的にモデルの駆動に使用される
●Residual forceは、力学的不整合の辻褄を合わせるための、実際には存在しない力である。
⇒最適化計算での使用優先度が低くなる(コストが高くなる)ように、値を設定する必要がある
Optimal force:値が小さいほど計算コスト 大
Control value : 値が大きいほど計算コスト 大
例:[Optimal force 小] × [Control value 大]
⇒筋肉量の少ない人が、筋肉を最大限活性化させて物を持ち上げているイメージ⇒コスト大
[Optimal force 大] × [Control value 小]
⇒筋肉量の多い人が、少ない筋活性度で軽々と物を持ち上げているイメージ⇒コスト小
値を大きく
値を小さく
<body>Residual actuatorを設置body⇒pelvis
<point>pelvisのCOM座標(ScalingしたモデルのCOM)
<direction> 力の作用方向
※point_is_global:false⇒bodyの相対座標系で力の作用点が定義される
force_is_global:true⇒global座標系で力の作用方向が定義される 70
操作手順(詳細操作)
<②Actuators and External Loads(RRA Tool)の設定>
RRA(Residual Reduction Algorithm)
2. Residual actuatorの設定を行う
MXの例
※MY,MZも同様に設定
(数値はとりあえずsampleのままでOK)
BodyAはpelvis、BodyBはgroundを指定
Optimal forceやcontrol valueの考え方はFX,FY,FZと同じ
②-1:Actuators(仮想アクチュエータ)の設定
71
操作手順(詳細操作)
<②Actuators and External Loads(RRA Tool)の設定>
RRA(Residual Reduction Algorithm)
3. Reserve actuatorの設定を行う(今回はsampleの設定をそのまま活用)
②-1:Actuators(仮想アクチュエータ)の設定
例:hip_flexion_rの設定
設定の対象とする関節自由度の指定
RRAでは筋肉の代わりにモデルを駆動するために
使用されるため、Residual actuatorと比較して
かなり大きい値が設定される
※どの程度にすればよいか不明。
とりあえずはSample等を参考に決めれば良い 72
操作手順(詳細操作)
<②Actuators and External Loads(RRA Tool)の設定>
RRA(Residual Reduction Algorithm)
4. 作成した仮想アクチュエータの設定ファイル.xmlを保存し、Toolでファイルを指定する
②-1:Actuators(仮想アクチュエータ)の設定
Add⇒使用する仮想アクチュエータのファイル.xmlを指定する
73
操作手順(詳細操作)
<②Actuators and External Loads(RRA Tool)の設定>
RRA(Residual Reduction Algorithm)
Toolで床反力データの読み込み設定を行う
②-2: External Loads(床反力データ)の設定
床反力データgrf.motの読み込み設定がされたファイル.xmlを
指定する(設定ファイルの中身は次ページ参照)
74
操作手順(詳細操作)
<②Actuators and External Loads(RRA Tool)の設定>
RRA(Residual Reduction Algorithm)
②-2: External Loads(床反力データ)の設定
参考:床反力データ読み込み設定ファイル.xmlの中身
床反力を受けるbodyを指
定(ここではcalcn_r)
適用する床反力・モーメントと作用点の名前
を指定する
右足
左足
床反力データgrf.motの指定
75
操作手順(詳細操作) RRA(Residual Reduction Algorithm)
参考:sampleファイルの床反力データと設定ファイルの対応
(subject01_walk1_grf.mot, subject01_walk_grf.xml)
②-2: External Loads(床反力データ)の設定
例:左足
設定ファイルには、床反力データgrf.motの項目名に
対応する名前から末尾のx,y,zを除いた名前を入力?
⇒grf.motの各項目名の付け方にルールあり?
(末尾に必ずx,y,zを記載するとか・・・)
※右足のデータもこのファイル内に存在する
<②Actuators and External Loads(RRA Tool)の設定>
76
操作手順(詳細操作) RRA(Residual Reduction Algorithm)
参考:設定した床反力データがどのように読み込まれているかチェックしてみる
②-2: External Loads(床反力データ)の設定
.xmlを読み込まずにToolsの画面上で設定をしてもよい
(Force data fileを指定⇒Add⇒床反力データ読み込みの設定を行う⇒※Saveで.xmlファイルが保存できる)
<②Actuators and External Loads(RRA Tool)の設定>
77
操作手順(詳細操作)
<③Integrator Settings(RRA Tool)の設定>
RRA(Residual Reduction Algorithm)
必要に応じて数値を調整する
今回はとりあえずデフォルトの設定を使用
78
操作手順(詳細操作)
<④RRAの実行(Run)&モデル、仮想Actuatorの修正>
RRA(Residual Reduction Algorithm)
1. 設定完了後⇒設定をSave⇒RunでRRAを実行
2.計算完了後Window右下のMessages Windowを確認する
3. Messages Windowに左記のように、指定したBody(今回はtorso)の質量中心
(COM)の調整結果と質量分布の修正推奨値※、Residual actuatorの力の
時間平均値が表示される
※質量分布の推奨値は、全体質量の修正値に応じて、各Body一律の係数で
修正されると思われる
4.Residual forcesの平均値、MAX値(FX,FY,FZ,MX,MY,MZ)、そのほかエラーの出力値が一定
以下になっているかチェックする(参考閾値はユーザーズガイド参照、Residual forcesのMAX値は
Outputファイルをエクセルでグラフ化するなどして判断する)
https://simtk-
confluence.stanford.edu:8443/display/OpenSim/Getting+Started+with+RRA
Thresholds: Good OK BAD
MAX Residual Force [N] 0-10N 10-25N >25N
RMS Residual Force [N] 0-5N 5-10N >10N
MAX Residual Moment [Nm] 0-50Nm 50-75N >75N
RMS Residual Moment [Nm] 0-30Nm 30-50N >50N
MAX pErr [trans, cm] 0-2cm 2-5cm >5cm
RMS pErr [trans, cm] 0-2cm 2-4cm >4cm
MAX pErr [rot, deg] 0-2deg 2-5deg >5deg
RMS pErr [rot, deg] 0-2deg 2-5deg >5deg
[Ref.2]
<Users guide 参考閾値 [Ref.2]>
79
操作手順(詳細操作)
<④RRAの実行(Run)&モデル、仮想Actuatorの修正>
RRA(Residual Reduction Algorithm)
5. 全体質量の修正代の推奨値が小さく、Residual forcesやエラーが一定以下になっていれば、RRAを完了する。
そうでなければ、モデルの質量分布、必要に応じて仮想アクチュエータの設定値(Optimal forcesやcontrol value)を調整して
再びRRAを実行する
RRAの再実行が必要な例
(最もよくあるパターン)
RRA完了後に表示される全体質量の修正代が大きく(数kgオーダー)、
Residual forcesの平均値 FYがかなり大きい場合(FY:上下方向の残差力)、
Scalingで設定した目標質量が床反力データと全く整合が取れていないことを意味する
グラフ化するとFYだけ閾値を
大幅にOverしていることがよくわかる
⇒このような場合は各Bodyの質量を推奨値に修正したうえで、RRAを再実行する
一部を簡略化したモデル(例:腕のないモデル等)はScalingの段階で床反力整合のとれた
質量に設定することが難しいので、基本的に質量修正による2回目のRRAは必須になる
場合が多いと思われる
※個人的見解:各Bodyの質量分布を大幅に調整する場合、調整比率に応じて
各bodyの慣性マスも調整すべき(質量と慣性マスの整合性をとるため)
※質量調整による2回目のRRAを実施してもResidual forces(他 error値)が
一定以下にならない場合は、仮想アクチュエータの設定値を調整する
(例:FYが大きいなら、FYのOptimal Forceを小さくする or FXやFZのcontrol
valueを小さくして想定的にFYの使用コストを上げる等)
6.RRAの繰り返しでどうにもできない場合、Scalingからやり直す(寸法関係的な不整合が大きいと推測されるため)
80
操作手順(詳細操作)
<その他:RRAの設定に関して>
RRA(Residual Reduction Algorithm)
81
https://simtk-
confluence.stanford.edu:8443/display/OpenSim/Getting+Started+with+RRA#GettingStartedwithRRA-
Troubleshooting:
RRA User’s guideより
SimTKのソースや論文等どういう設定になっているか要調査
.osimファイルを開いてmtp, subtalarで検索
⇒「locked」の項目があるので、false⇒trueに変更すればOK
だと思われる(モデル変更してIK Toolのweightタブを見ると
Lockedになっていることが確認できる)
※次のプロセスのCMCでmtp、subtalarをlockしたまま
実行する場合は、Task fileでmtp, subtalarをfalse設定にして
tracking対象から除外する必要あり(200812時点の見解)
RRA疑問集
Appendix
~仮想アクチュエータに関する疑問あれこれ~
RRA
※本疑問集は、独学で取り組んだ際に自身が初見で感じた個人的な疑問といくつかの見解である。
「仮想アクチュエータ」は、設定に関して暗黙の部分が多く、初めて取り組んだ際に多くの人が疑問を持つと思われる。
また、RRAだけでなくSOやCMCにおいても、仮想アクチュエータは解析精度に強い影響を及ぼす重要なファクターである。
そこで、正解のやり方を示すことはできないが、個人的に感じた疑問と見解を本疑問集にまとめることとした。 82
RRA疑問集
<Q1.仮想アクチュエータの発揮する力と設定値の関係は結局どうなってるの?>
~_controls.sto 出力されたグラフに
Optimal forceの値を掛ける
(各軸方向それぞれに
対応する数値)
仮想アクチュエータが発揮する力は、直接数値を設定するわけではなく、①Optimal forceと②control value(min,max)の
2つの項目の設定値によって決められる。⇒実際の関係性は、計算中においてどうなっているのか?
ここではResidual actuator(FX,FY,FZ,MX,MY,MZ)を例に確認してみることとする。
前述のスライドのように、「Residual force = optimal force*control value」の関係式が成り立っていることが確認できた
Force.stoのグラフ(Residual force)と
一致することが確認できた
~_force.sto
エクセル計算
RRA(Residual Reduction Algorithm)
計算中(運動中)のcontrol valueの時間変化
83
RRA疑問集
<Q2.仮想アクチュエータの設定値は結局どうすればよいの?>
疑問:計算コストを上げることとResidual forceを小さくすることのどちらを優先してControl valueを決めればよいのか?
そもそもControl valueは、どの程度のオーダに設定すればよいのか?
RRA(Residual Reduction Algorithm)
①Residual actuatorに関して
計算コストを上げるためには
Control valueを大きくする必要がある
Residual forceを小さくするためには
Control valueを小さくする必要がある
= Optimal force × control value
Residual force
●RRAの最適化計算では「計算コスト」が最も小さくなるようにモデルの各部の力が計算される
(要するに、最小の労力でモデルを駆動できるように各部の力が最適化される)
⇒したがって、計算コストの小さいアクチュエータから優先的にモデルの駆動に使用される
●Residual forceは、力学的不整合の辻褄を合わせるための、実際には存在しない力である。
⇒Residual forceの数値を最小化しつつ、最適化計算での使用優先度が低くなる(コストが高くなる)ように、値を設定する必要がある。
Optimal force:値が小さいほど計算コスト 大
Control value : 値が大きいほど計算コスト 大
しかしながら・・・ <Control valueの矛盾が生じる>
例:[Optimal force 小] × [Control value 大]
⇒筋肉量の少ない人が、筋肉を最大限活性化させて物を持ち上げているイメージ⇒コスト大
[Optimal force 大] × [Control value 小]
⇒筋肉量の多い人が、少ない筋活性度で軽々と物を持ち上げているイメージ⇒コスト小
以下に示すように、Control value はResidual forceと計算コストに対して、正反対の影響を及ぼしてしまう
84
RRA疑問集
<Q2.仮想アクチュエータの設定値は結局どうすればよいの?>
設定したcontrol valueの範囲に対して、解析中にどの程度の制御値が発揮されるかは暗黙的でわからない
(厳密に設定で数値をコントロールできない)
RRA(Residual Reduction Algorithm)
①Residual actuatorに関して
Control valueの設定値と計算中のcontrol出力値
~_controls.sto
MIN:-Infinity ~ MAX:Infinityの設定に対して、実際には±10程度の出力
物理的な不整合の度合いや、アクチュエータの使用優先度が複合的に関係するため
Control valueの設定を極端に大きくしたからといって、実際の制御値が大きくなるわけではない
では、結局どうしたらよいのか?? 85
RRA疑問集
<Q2.仮想アクチュエータの設定値は結局どうすればよいの?>
RRA(Residual Reduction Algorithm)
①Residual actuatorに関して
●個人的見解~residual actuatorの設定をどうすべきか~
1st :とりあえず、control valueのmin/maxは-Infinity/Infinityに設定して、residual actuatorの使用コスト
を極端に大きくする(具体的な数値としてどの程度のオーダにすれば妥当なのか不明なため)
2nd :Optimal forceを可能な限り小さい値に設定する
3rd :計算を流す。 エラーになった場合はOptimal forceを少し大きくする。うまく流れた場合は、Optimal forceを
さらに小さくする⇒目標水準に達するまでこれを繰り返す。
86
疑問:計算コストを上げることとResidual forceを小さくすることのどちらを優先してControl valueを決めればよいのか?
そもそもControl valueは、どの程度のオーダに設定すればよいのか?
201011追記:Residual actuator設定に関する別の考え方(発揮する力の上限を確実に設ける方法)
設定したcontrol valueの範囲に対して、解析中にどの程度の制御値が発揮されるかは暗黙的でわからない
(厳密に設定で数値をコントロールできない)
1st : Residual Forceの上限を決めてしまう
2nd :決めた上限値になるようにOptimal force、Control valueの数値を決定する
(手順:Control valueをReserve actuatorと比較して桁の大きい値とする※
⇒Residual Force=Optimal Force × Control valueが成立するようにOptimal forceの値を設定する
※この場合Reserve actuatorのControl valueは、Residual actuatorよりも計算コストを下げる必要がある。
したがって、Reserve actuatorのControl valueは、infinityではなく、Residual actuatorより小さい数値に
設定する(Optimal forceの数値が大きければ、Control valueがResidual actuatorと同じ数値でもコスト観点でOKか
もしれない。また、Reserve actuatorの発揮する力が不足しないようにOptimal Forceを適切な数値に設定する必要あり)
RRA疑問集
<Q2.仮想アクチュエータの設定値は結局どうすればよいの?>
RRA(Residual Reduction Algorithm)
②Reserve actuatorに関して
例:gait2354_RRA_Actuators.xml
(サンプルファイル) RRAでは、Reserve actuatorは筋肉の代わりに
モデルを駆動するために使用される。
⇒当然ながらOptimal forceはResidual actuator
よりも大きくなる
⇒sampleファイルは部位によって100,200,300と
数値に差がつけられているが・・・
・各部の数値のバランスはどうしたらよいのか?
・筋肉の代わりの役割を果たすためには、
どの程度の数値にすればよい?
・一律同じ数値ではだめなのか?
●個人的見解
結局Control valueが大きければアクチュエータの力はい
くらでも大きくできる
⇒各部の計算コストのバランスだけ考えればよいと考える
(一般的に考えて、積極的に動くであろう部位の数値は
少し大きくする等)
※Optimal forceのオーダが10^2程度あれば、
少なくともResidual actuatorと比較して
Reserve actuatorのほうが優先的にモデルの駆動に使
用されると考えられる(計算コストの観点より) 87
注:以下見解は、control valueが
Residual、Reserveで同等かつ、
いずれも十分に大きい場合の見解である
RRA疑問集
<Q2.仮想アクチュエータの設定値は結局どうすればよいの?>
RRA(Residual Reduction Algorithm)
●仮想アクチュエータに関する個人的見解(Residual & reserve actuator)
仮想アクチュエータの妥当な設定を把握するためには、以下の方法で自分なりの知見を蓄積するしかないと考える。
・サンプルファイルやネットのリソース、論文等を参考にする
・自分で数値を色々振って解析を流す⇒傾向をとらえる
・相対的に明らかに動きの少ない部位はActuatorの使用優先順位を下げる 等
88
目次
1.はじめに
2.全体概要~OpenSIMの基本的な解析~
3.各解析ステップ詳細
- Scaling
- IK(Inverse Kinematics)
- RRA(Residual Reduction Algorithm)
- SO(Static Optimization)
- CMC(Computed Muscle Control)
89
<Output>
スケーリングされた
モデル
SO(Static Optimization)の位置づけ SO(Static Optimization)
Scaling
IK
(Inverse
Kinematics)
RRA
(Residual
Reduction
Algorithm)
CMC
(Computed
Muscle
Control)
SO
(Static
Optimization)
ID
(Inverse
Dynamics)
被験者の体格を
再現したモデルを構築
実測マーカの動きを
再現した運動学データの生成
<Output>
運動学データ
<Output>
●動的に整合のとれたモデル
(質量中心(COM)と
各BodyのMassが
修正されたモデル)
●調整された運動学データ
動的に整合のとれた
モデルにする
(胴体の質量中心&各Bodyの
質量分布の調整)
筋力・筋活性度の
算出
筋力・筋活性度の
算出
関節トルク・力の
算出
RRAで動的に整合のとれたモデル、調整された運動学データ(その他床反力データ)を使用して各部の筋力・筋活性度を算出する
※RRAを実施していなくてもSOの実施は可能。ただし、SOにおける最終的な解析結果(筋活性度等)の誤差を減らすためには、基本的にRRAは
実施するべきである。また、モデルの動的不整合をRRAによって極力減らしておかないと、SOの解析において計算の収束性、誤差をどこまで
許容するか等で結局苦労する可能性がある。
・モデル.osim
・モデル用マーカーセット.xml
・実測マーカー(静止状態).trc
・実測マーカー(運動中).trc
筋骨格モデルの解析を実施するための準備プロセス
精度の良い解析モデル構築のためには
複数回のトライアンドエラーが必須
・スケーリングされたモデル.osim
・床反力の実測データ.mot
&データ読込設定ファイル.xml
・仮想アクチュエータ設定ファイル.xml
・追跡座標タスク&重み設定ファイル.xml
・床反力の実測データ.mot
&データ読込設定ファイル.xml
・仮想アクチュエータ設定ファイル.xml
90
入出力ファイル
SO
Tool
①RRAで調整されたモデル.osim ※
<使用ファイル概要>
Input
①RRAで調整されたモデル.osim:RRAで調整されたモデルが望ましいが、Scaling後のモデルでもSOの実行は可
②RRAで調整された運動学データ.mot:RRAで調整された運動学データが望ましいが、IKの運動学データでもSOの実行は可
③床反力データgrf.mot & 床反力データ読み込み設定ファイル.xml:動力学のシミュレーションなので外力(床反力)データが必要
④仮想Actuatorの設定ファイル.xml:動的な不整合の辻褄を合わせるためのResidual actuatorと
筋力不足を補助するためのReserve actuatorの設定ファイル
※Reserve actuatorに関する注意点:RRAでは筋肉の「代わり(replace)」にモデルを駆動する役割
だったが、SOでは筋力の不足を「補助(Append)」する役割であるため、reserve actuatorの値を
最小限の大きさに設定する必要がある(値が大きいとアシスト装具を装着しているような状態となり、
計算結果の筋力・筋活性度は現実とかけ離れた傾向となってしまうので注意する)
Output
筋力の時系列データ.sto
筋活性度の時系列データ.sto
③-1床反力データgrf.mot
Input Output
(gait2354_RRA_adjusted.osim)
(subject01_walk1_grf.mot)
(gait2354_RRA_kinematics_q.sto)
各設定条件をすべて記録した
設定ファイル.xml(2回目以降使用)
目的:
②RRAで調整された
運動学データ.sto ※ 筋力の時系列データ.sto
※仮名
※仮名
④仮想Actuator設定ファイル.xml
③-2床反力データ読み込み設定ファイル.xml
(gait2354_SO_Actuators.xml)
(subject01_walk1_grf.xml)
SO(Static Optimization)
運動学データのモーションに対応する筋力・筋活性度を算出する
※仮名
筋活性度の時系列データ.sto
91
概略・仕組み
目的:
SOはIDの拡張的な計算であり、各瞬間ごとに、正味の関節トルクから
個々の筋肉の力を算出する。筋力は筋活性度の目的関数の二乗和を最小化することにより算出される。
具体的には、これまでのステップで既知となっているモデルの運動学データ(位置、速度、加速度)を活用し、
各timeステップごとに上記の方程式を解いている
[Ref.3]
[Ref.3]:Users guide https://simtk-confluence.stanford.edu:8443/display/OpenSim/How+Static+Optimization+Works
𝑚=1
𝑛
(𝑎𝑚𝐹
𝑚
0
)𝑟𝑚,𝑗 = 𝜏𝑗
SO(Static Optimization)
運動学データのモーションに対応する筋力・筋活性度を算出する
𝑚=1
𝑛
[(𝑎𝑚𝑓(𝐹
𝑚
0
, 𝑙𝑚, 𝑣𝑚)]𝑟𝑚,𝑗 = 𝜏𝑗
𝐽 =
𝑚=1
𝑛
(𝑎𝑚)𝑃
目的関数
力-長さ-速度の関係式
力の生成式 n :筋肉の数
m :各部の筋肉
P :ユーザの定める任意定数
: 各timeステップごとの筋肉mの活性度レベル
: 筋肉mの最大力(等尺性:isometric)
: 関節軸jに関する筋肉mのモーメントアーム
: 関節軸jに作用する一般化された力
: 筋肉mの長さ
: 筋肉mの収縮速度
: 筋肉mの力-長さ-速度平面
92
概略・仕組み
<SO実行時の注意点>
SO(Static Optimization)
●仮想アクチュエータの使用に関して ~なぜ、SOでも必要なのか~
・RRAで残差を減らしているとはいえ、0になるわけでなはい。モデルの様々な仮定の影響や実測の誤差等の影響のため、
必ず残差は残ってしまう。したがって、SOでも残差を補うための仮想アクチュエータが必要となる。
・モデルの筋力が弱い場合や仮想アクチュエータの力が不足している場合、最適化計算に異常に時間がかかるor
収束しない可能性がある。その場合は、仮想アクチュエータの設定を調整する。
ただし、仮想アクチュエータは実際には存在しない力なので、理想的には無いに越したことはない。
計算がうまく実行できる範囲で極力小さい値に設定する必要がある。
安易に大きい力を設定してしまった場合、全く異なる非現実的な解析結果が出てしまう
(≒アシスト装具を装着して制御力を与えているような状態になってしまう)
仮想アクチュエータの扱いは最新の注意を払うこと!!
●SOに使用するInputデータについて ~RRAを事前にやる必要あるのか?~
RRAをやらずにScaling⇒IK⇒SOのプロセスで解析を行うこともできる。ただし、RRAをやらない場合、モデルの質量中心
や質量分布の誤差が大きい可能性が高い。したがって、SOのプロセスにおいて残差力が大きくなってしまうor計算がなかな
か収束しない可能性がある。結果的にSOのプロセスで苦労したり、Scalingのプロセスからやり直すことになるので、
RRAは基本的に実施すべきであると考える。
<個人的見解>
SOの計算が成功したからといって、その結果をそのまま信頼することは危険である。Sampleや信頼できる他の解析データ、
類似の運動を解析した結果と比較し、最低限、明らかな異常が無いかどうかを確認する必要がある。
(SOの解析結果は、Scalingや仮想アクチュエータの条件設定次第でいくらでも変わってしまう) 93
操作手順(全体の流れ)
③SOの実行(Run)&仮想Actuatorの修正
計算がFAILする場合はActuatorの設定を調整する
Output:筋力の時系列データ.sto
筋活性度の時系列データ.sto
①Main Settings(SO Tool)の設定
②Actuators and External Loads(RRA Tool)の設定
●②-1:Actuators(仮想アクチュエータ)の設定
●②-2:External Loads(床反力データ)の設定
実験の床反力データgrf.motの読み込み設定をする
※読み込み設定ファイル.xmlを作成しておけば、設定ファイルを指定するだけでOK
NotePad++で仮想アクチュエータの設定ファイル.xmlを開き、数値を設定する
・入出力ファイルの指定(入力設定:RRAで調整された運動学データ.sto
※RRA未実施の場合はIKの運動学データ.mot
出力設定:SOの出力結果名と出力フォルダの設定)
・フィルターの設定(RRA実施済の場合はチェック不要、RRA未実施の場合は6Hzのフィルターをかける)
・モデル.osimは選択中のモデルが自動で選択される
※RRA実施後のモデルを開いておく、Scaling後のモデルでもSOの実施は可能
SO(Static Optimization)
最小限の仮想Actuator
の力で計算が成功するまで
繰り返す
※どうやってもうまくいかない
場合は最悪、Scalingまで
戻る必要あり
94
操作手順(詳細操作)
<①Main Settings(RRA Tool)の設定>
1.Scalingされたモデル.osimを開き、Tools⇒Static Optimization・・・を選択
2.Main settingsの設定を行う
Motionを選択し、使用する運動学データを指定
IKの場合 ~.mot RRAの場合 ~q.sto
※RRAを実施済みの場合はフィルターにチェックを入れる必要なし
最適化計算における目的関数の設定および
力-長さ-速度の関係式の使用有無、解析インターバルの設定
⇒基本的にデフォルトの状態のままでOK
※目的関数、力-長さ-速度の関係式は「概略・仕組み」のスライド参照
・Outputデータの共通ファイル名(例:~.stoの「~」の部分の名前)の指定
・Outputデータの保存フォルダの指定
Openして選択されているモデルが自動でSOの対象として選択される
SO(Static Optimization)
解析区間の設定
95
操作手順(詳細操作)
<②Actuators and External Loads(RRA Tool)の設定>
作成した仮想アクチュエータの設定ファイル.xmlを保存し、Toolでファイルを指定する
②-1:Actuators(仮想アクチュエータ)の設定
Add⇒使用する仮想アクチュエータのファイル.xmlを指定する
SO(Static Optimization)
注:RRAと異なり、SOは筋肉の置き換えではなく
筋肉の補助(計算が収束するように)の役割なので
[Append]を選択する
96
操作手順(詳細操作)
<②Actuators and External Loads(RRA Tool)の設定>
Toolで床反力データの読み込み設定を行う
②-2: External Loads(床反力データ)の設定
床反力データgrf.motの読み込み設定がされたファイル.xmlを
指定する(設定ファイルの中身等 詳細はRRAの章参照)
SO(Static Optimization)
97
操作手順(詳細操作)
<③SOの実行(Run)&仮想Actuatorの修正>
SO(Static Optimization)
1. RUNで計算実行⇒計算がうまく進んでいるか確認する
●エラー例:仮想Actuatorの力が弱すぎた場合(or 仮想Actuatorをそもそも設定していなかった場合)
Messageウィンドウに計算失敗のメッセージが表示される
右下の解析進行%表示も全然進まない
2. 計算が失敗した場合は仮想アクチュエータの設定値を調整して、再度SOを実行する
(例えばResidual ForceのOptimal Forceの値を変える ※数[N]レベルの調整)
また。計算がうまく流れていても、仮想アクチュエータの数値が十分に小さくない場合は
アクチュエータの数値を調整し、最小限の補助力で計算が流れるようにする
(理想:ほぼ100%筋肉の力のみでモデルが駆動できている状態)
※仮想アクチュエータの制御概念はRRAのセクション参照 98
目次
1.はじめに
2.全体概要~OpenSIMの基本的な解析~
3.各解析ステップ詳細
- Scaling
- IK(Inverse Kinematics)
- RRA(Residual Reduction Algorithm)
- SO(Static Optimization)
- CMC(Computed Muscle Control)
99
<Output>
スケーリングされた
モデル
CMC(Computed Muscle Control)の位置づけ CMC(Computed Muscle Control)
Scaling
IK
(Inverse
Kinematics)
RRA
(Residual
Reduction
Algorithm)
CMC
(Computed
Muscle
Control)
SO
(Static
Optimization)
ID
(Inverse
Dynamics)
被験者の体格を
再現したモデルを構築
実測マーカの動きを
再現した運動学データの生成
<Output>
運動学データ
<Output>
●動的に整合のとれたモデル
(質量中心(COM)と
各BodyのMassが
修正されたモデル)
●調整された運動学データ
動的に整合のとれた
モデルにする
(胴体の質量中心&各Bodyの
質量分布の調整)
筋力・筋活性度の
算出
筋力・筋活性度の
算出
関節トルク・力の
算出
RRAで動的に整合のとれたモデル、調整された運動学データ(その他床反力データ)を使用して各部の筋力・筋活性度を算出する
・モデル.osim
・モデル用マーカーセット.xml
・実測マーカー(静止状態).trc
・実測マーカー(運動中).trc
筋骨格モデルの解析を実施するための準備プロセス
精度の良い解析モデル構築のためには
複数回のトライアンドエラーが必須
・スケーリングされたモデル.osim
・床反力の実測データ.mot
&データ読込設定ファイル.xml
・仮想アクチュエータ設定ファイル.xml
・追跡座標タスク&重み設定ファイル.xml
・床反力の実測データ.mot
&データ読込設定ファイル.xml
・仮想アクチュエータ設定ファイル.xml
100
入出力ファイル
CMC
Tool
①RRAで調整されたモデル.osim
<使用ファイル概要>
Input
①RRAで調整されたモデル.osim:RRAで調整されたモデルを使用する
②RRAで調整された運動学データ.mot:RRAで調整された運動学データを使用する
③床反力データgrf.mot & 床反力データ読み込み設定ファイル.xml:動力学のシミュレーションなので外力(床反力)データが必要
④仮想Actuatorの設定ファイル.xml:動的な不整合の辻褄を合わせるためのResidual actuatorと、
筋力不足を補助するためのReserve actuatorの設定ファイル
※Reserve actuatorに関する注意点:RRAでは筋肉の「代わり(replace)」にモデルを駆動する役割
だったが、CMCでは筋力の不足を「補助(Append)」する役割であるため、reserve actuatorの値を
最小限の大きさに設定する必要がある(値が大きいとアシスト装具を装着しているような状態となり、
計算結果の筋力・筋活性度は現実とかけ離れた傾向となってしまうので注意する)
⑤追跡タスクファイル.xml(追跡する座標と重みの設定):CMCの計算で追従する運動学データ座標、重みの設定
⑥制御力の拘束条件設定ファイル.xml(必要に応じて※無くても計算は流れる):実測や一般的な知見、そのほか解析の意図に応じて、
各筋肉の活性度の制約条件を設定する
(特定のタイミングでの特定部位の筋活動を抑制する等・・)
③-1床反力データgrf.mot
Input Output
(gait2354_RRA_adjusted.osim)
(subject01_walk1_grf.mot)
(gait2354_RRA_kinematics_q.sto)
各設定条件をすべて記録した
設定ファイル.xml(2回目以降使用)
目的:
②RRAで調整された
運動学データ.sto ※
筋力の時系列データ.sto
※仮名
※仮名
④仮想Actuator設定ファイル.xml
③-2床反力データ読み込み設定ファイル.xml
(gait2354_CMC_Actuators.xml)
(subject01_walk1_grf.xml)
運動学データのモーションに対応する筋力・筋活性度を算出する
※仮名
筋活性度の時系列データ.sto
CMC(Computed Muscle Control)
⑤追跡タスクファイル.xml
(gait2354_CMC_Tasks.xml)
⑥制御力の拘束条件設定ファイル.xml
(gait2354_CMC_ControlConstraints.xml)
101
注:200812追記
指先や足部が不自然に折れ曲がったりする挙動が見られた場合は.osimファイルの
mtp、subtalarをlockする ※lockする場合taskファイルの設定も変更しないと
計算エラーになる(詳細はCMC疑問集 参照)
+
-
+
-
概略・仕組み
目的:
CMCの内部計算では、SO+FD(Forward dynamics)+PD制御(フィードバック制御の一種)を
組み合わせた計算を実行している。
[Ref.4, 5]
[Ref.4]:Users guide https://simtk-confluence.stanford.edu:8443/display/OpenSim/How+CMC+Works
[Ref.5]:Thelen, D.G. and Anderson, F.C., "Using computed muscle control to generate forward dynamic simulations of human walking from experimental data, J. Biomech., 2006, 39(6):1107-1115
運動学データのモーションに対応する筋力・筋活性度を算出する
CMC(Computed Muscle Control)
SO
(Static
Optimization)
FD
(Forward
Dynamics)
𝑥
𝑞
𝑞
𝑞𝑒𝑥𝑝
𝑞𝑒𝑥𝑝
𝑞𝑒𝑥𝑝
𝑓𝑔𝑟𝑓
𝑒𝑥𝑝
𝑞𝑑𝑒𝑠𝑖𝑟𝑒
(𝑡 + 𝑇)
+
+
+
𝑘𝑝
𝑘𝑣
,
, :Inputされた運動学データ
:FDで計算された運動学データ
:目標加速度
:床反力データ
,
𝑘𝑝 𝑘𝑣 :制御ゲイン
CMCの計算概略図
1st : 目標加速度 𝑞𝑑𝑒𝑠𝑖𝑟𝑒
(𝑡 + 𝑇) が計算される
Before CMC: 初期状態が計算される
2nd : 目標加速度を追従するための筋力・筋活性度がSOにより計算される
𝑞𝑑𝑒𝑠𝑖𝑟𝑒
𝑡 + 𝑇 = 𝑞𝑒𝑥𝑝
𝑡 + 𝑇 + 𝑘𝑣[𝑞𝑒𝑥𝑝
𝑡 − 𝑞(𝑡)]+𝑘𝑝[𝑞𝑒𝑥𝑝
𝑡 − 𝑞(𝑡)]
P制御
D制御
フィードバック制御
3rd : SOで計算された筋力・筋活性度を使って、FDにより𝑞、 𝑞が計算される
各ステップで
実行される
102
概略・仕組み
<その他:CMCについて>
●SOと何が違うのか?
前述のとおり、CMCの内部計算では、SO+FD(Forward dynamics)+PD制御(フィードバック制御の一種)を
組み合わせた計算を実行している。
SOの解析結果をFDの入力として活用⇒FDによりモデルの位置、速度を算出⇒FDで算出した位置、
速度のデータを使って、PD制御をかける
⇒計算の仕組みから考えると、フィードバック制御をかけることで、時間軸の中で動的に整合のとれたモデルが構築できる
CMCのほうが精度の良い解析結果が得られると考えられる。また、各瞬間ごとに最適化しているのみのSOの場合、
応答結果が振動的になりやすいのでは??(フィルターかければほぼ解決することかもしれないが・・・)
● Control constraints(制御の拘束条件)ってどう使うの? ~
CMCを実施すると、内部計算においてOptimizerが、本来アクティブにすべきでない筋肉をアクティブにしてしまう場合があ
る。したがって、たとえば、事前に筋電図のデータが得られていた場合を考えてみる。解析結果において、実測の筋電図デー
タでは活性化されていない筋肉が活性化されていた場合、Control constraintsによって意図的にそれを抑制することが
可能となる。
メモ(個人的な所感):EMGデータがない場合、解析の筋活性度の妥当性判断かなり困難?
想定外の筋肉が活性化されてしまう事象が頻繁に起こりえるのであれば、解析の妥当性を
どう保証するのか?そもそも適切なControl constraintsの設定はいったい何なのか?・・・
⇒とりあえずは色々なネット上のリソース、論文を参考にして経験則的なノウハウを蓄積していく
&人間の運動に関する理解を深めていくしかないか?・・・
⇒未知のメカニズム解明等に取り組む場合はどうしたらよいのか?(新規発見なのか単なる計算エラーなのかどう判断する?)
CMC(Computed Muscle Control)
● 解析区間(時間範囲)について
初期状態の計算において、筋肉の初期状態は通常、平衡状態から外れている。また、各筋肉の状態は最初のわずかな
時間の間に急激に変化する。したがって解析区間は、興味対象としている時間範囲に対して一般的に0.03秒前から開
始する必要がある 103
操作手順(全体の流れ)
③CMCの実行(Run)&仮想Actuatorの修正
計算がFAILする場合はActuatorの設定を調整する
Output:筋力の時系列データ.sto
筋活性度の時系列データ.sto
①Main Settings(SO Tool)の設定
②Actuators and External Loads(RRA Tool)の設定
●②-1:Actuators(仮想アクチュエータ)の設定
●②-2:External Loads(床反力データ)の設定
実験の床反力データgrf.motの読み込み設定をする
※読み込み設定ファイル.xmlを作成しておけば、設定ファイルを指定するだけでOK
NotePad++で仮想アクチュエータの設定ファイル.xmlを開き、数値を設定する
※設定の考え方は基本的にSOと同じ
・入出力ファイルの指定(入力設定:RRAで調整された運動学データ.sto
追跡タスクファイル.xml
アクチュエータの制約条件設定ファイル(必要に応じて)
出力設定:CMCの出力結果名と出力フォルダの設定
・フィルターの設定(RRA実施済の場合はチェック不要)
・解析区間、ステップの設定
・モデル.osimは選択中のモデルが自動で選択される
※RRA実施後のモデルを開いておく
CMC(Computed Muscle Control)
最小限の仮想Actuator
の力で計算が成功するまで
繰り返す
※どうやってもうまくいかない
場合は最悪、Scalingまで
戻る必要あり
104
※②以降のステップはSOと基本的に同じなので詳細手順の説明は省略する
操作手順(詳細操作)
<①Main Settings(RRA Tool)の設定>
1.Scalingされたモデル.osimを開き、Tools⇒Static Optimization・・・を選択
2.Main settingsの設定を行う
3.Actuatorや外力、Integrator~のタブをSOと同じ手順で設定し、Run
Kinematics_q.sto
※RRAを実施していれば基本的にFilterは空欄で
良いと思われる
・Outputデータの共通ファイル名(例:~.stoの「~」の部分の名前)の指定
・Outputデータの保存フォルダの指定
解析区間、ステップの設定
105
CMC(Computed Muscle Control)
Controlconstraints(コントロール値の制約)
基本的には設定なしでも流れるがEMGデータと
の整合を取りたい場合等、個別の筋肉に対して
制約を設けたい場合に設定する
※次ページ参照
操作手順(詳細操作)
<Actuator constraints(controlconstraintsについて)>
106
CMC(Computed Muscle Control)
https://simtk-
confluence.stanford.edu:8443/display/OpenSim/CMC+Settings+Files+and+X
ML+Tag+Definitions#CMCSettingsFilesandXMLTagDefinitions-
SpecifyingAnalysesandResults
参考サイト(User’s guide CMC Settings Files and XML Tag Definitions)
※constraintsファイル内で定義されていない筋肉は
拘束なし(おそらく0.02 – 1の閾値が適用される)
<object>内に記載されている筋肉で、何も拘束の
定義がされていないものに対してdefaultの設定が適
用される
⇒大量の筋肉に対してまとめて設定を適用したい場
合に便利
個別に拘束を定義したい場合はこのような感じで
記載して定義するEMGのデータを加味して
設定したい場合等
(kp,kvは基本的にkp:100, kv:20)
注:名前のみの場合は末尾にスラッシュ入れるのを
忘れないようにする
※特定の時間域だけcontrolを0にする等
時系列での拘束条件設定も可能
CMC疑問集
Appendix CMC
107
CMC疑問集
<subtalarとmtpのlockに関して>
108
CMC(Computed Muscle Control)
Q.gait2392モデルで計算⇒指先が極端に折れ曲がってしまった
(むしろ反対方向に折れ曲がってほしいが・・・・)
But gait2354モデルではIKやRRAでのmtp, subtalarの設定によらず
うまく流れる why??
⇒A.おそらく、設定のミスではなく、生体力学モデルの限界によるものだと推定される
(massの小さい指の複雑な挙動は精度よくシミュレーションすることが難しい 以下ユーザーフォーラムURL参照)
対処方法:mtpやsubtalarはlockする
https://simtk.org/plugins/phpBB/viewtopicPhpbb.php?f=91&t=8
206&p=22278&start=0&view=
<関節のLockに関して:ユーザーフォーラムより>
Q. CMCでmtp, subtalarをlockしたら計算エラーとなった why?
CMCでは関節がlockできないのか?
⇒A. できる(200812計算流れること確認済み)。
<計算流れた方法(200812実施例)>
CMC_Taskでmtpとsubtalarを以下のように設定(.osimのmtp, subtalarはlock設定)
1.<on> false </on>
2.active設定を変更 ★
編集前<active>true false false</active>
⇒編集後<active>false false false</active>
https://simtk.org/plugins/phpBB/viewtopicPhpbb.php?f=91
&t=11181&p=30986&start=0&view=
Fin.
109

OpenSIM 筋骨格シミュレーション 基本の解析マニュアル(改訂1))