![見出し画像](https://assets.st-note.com/production/uploads/images/164924239/rectangle_large_type_2_6e28c9a3a8c86dca5801a9b3f5ad9b51.png?width=1200)
OpenSimで始める筋骨格解析:環境構築からチュートリアルまで
こんにちは!東北大学 博士学生の青木吾郎(通称: ごろべぇ)です。私は、人間支援を目的としたロボティクスやAR/VR技術の研究開発に取り組んでいます。
本稿では、筋骨格解析について解説します。筋骨格解析とは、「人体の骨や筋肉の構造と機能を数値的にモデル化し、動作や力学的負荷をシミュレーションすることで、生体運動の理解や応用を目的とする解析手法」のことです。
![](https://assets.st-note.com/img/1733615971-eTVwgm0t54kdU1yxSD89oWNc.png?width=1200)
…….
この説明のみでは、想像しづらいように思います。すみません。私が初めて筋骨格解析に触れたときは、「解析の可能性は広がりそうやけど、習得はかなり難しそうやな……」という印象でした。
そこで、本記事では、オープンソースソフトウェア「OpenSim」を使って筋骨格解析を行う方法をご紹介しながら、基礎的な内容をわかりやすくお伝えできればと思います。その一環として、OpenSimが提供するチュートリアルの一つである立ち上がり動作「SquatToStand」を取り上げて解説します。
OpenSimはMATLAB、Python、およびC++と連携可能です。それぞれの言語でOpenSim APIを利用することで、カスタムスクリプトを作成してシミュレーションの制御やデータ解析を行うことができます。
本記事が、皆様の筋骨格解析への関心と理解を深める一助となれば幸いです!どうぞよろしくお願いいたします!
この記事は、Iwaken Lab. Advent Calendar 2024 の8日目の記事としてお届けします!
開発環境に関する注釈
本稿では、MATLABを使用して解析を行います。ただし、今回取り扱うチュートリアル「SquatToStand」では、MATLABのサンプルコードだけでなく、Pythonのサンプルコードも提供されています。そのため、おそらくPythonでも同様の解析が可能と考えられます。詳細については、サンプルコードを紹介しているウェブサイトをご参照ください。
なお、本稿ではWindows 11を使用して環境構築を行っています。
筋骨格解析
筋骨格解析は、「人体の骨や筋肉の構造と機能を数値的にモデル化し、動作や力学的負荷をシミュレーションすることで、生体運動の理解や応用を目的とする解析手法」です。この解析には、「筋骨格モデル」と呼ばれる仮想的な人体モデルが使用されます。
![](https://assets.st-note.com/img/1733626164-e369jkHcM0NoUp4tv7TV82El.png?width=1200)
筋骨格モデルの要素
モデルに含まれる要素は以下の通りです。
筋肉の力発生モデル(Hillモデルなど)
筋肉がどのように力を発生し、それがどのように関節モーメントとして作用するかを記述します。骨と関節の構造(運動学モデル)
骨を剛体としてモデル化し、関節の運動自由度や相互の動きを記述します。
順動力学解析と逆動力学解析
筋骨格解析では、運動や力を解析するために、「順動力学解析」と「逆動力学解析」という2つの主要なアプローチが用いられます。
1. 順動力学解析
概要:
順動力学解析は、筋肉が発生させる力や関節が生み出す回転力(トルク)を入力として、それがどのような身体の動き(関節の位置、速度、加速度)を引き起こすかを予測する手法です。与えられた力の結果として、身体がどのように動くかを解析します。
用途:
リハビリテーション:患者の筋力不足を補うために、義肢や補助具を適切に設計するための動作予測に使用。
例:膝関節のサポートデバイスが歩行時に及ぼす影響を解析。
スポーツトレーニング:アスリートのフォームを改善するために、筋肉の出力が特定の動作に与える影響をシミュレーション。
例:ランニング時の筋力トレーニング効果を事前に検証。
2. 逆動力学解析
概要:
逆動力学解析は、観測された身体の動作データ(関節の位置、速度、加速度)を基に、動きを引き起こした力やトルクを逆算する手法です。観測された動きの背後にある力やトルクを推定することで、運動の仕組みを解析します。
用途:
介護ロボットの設計:ロボットが高齢者の立ち上がり動作を補助する際、どの程度の力が必要かを推定。
例:座位から立位への移動時に、ロボットのアームがどの程度のトルクを生成する必要があるかを評価。
スポーツ科学:運動時の負荷を評価し、怪我を防ぐトレーニングプログラムを設計。
例:バスケットボールのシュート動作中に、肩や肘の関節にかかる力を分析。
主に使用されるソフトウェア
筋骨格解析に用いられる主なソフトウェアには、以下のものがあります:
OpenSim
AnyBody Modeling System
LifeMOD
SIMM
Biomechanics of Bodies
これらの中で、OpenSimを除くほとんどのソフトウェアは有料です。そのため、無料または低コストで筋骨格解析を行いたい場合には、OpenSimの利用をおすすめします。
環境構築|OpenSimとMATLABの連携
OpenSim APIとMATLABを用いて、解析を行うための環境構築について紹介します。MATLABは既にインストール済みであることを前提としています。以下の例では、Windows 11で実行しました。
OpenSimのインストール
下記ページから、最新版のインストーラーをダウンロードし、インストールします。 (この記事では、OpenSim 4.5を使用しました)
MATLABとの連携
以下のサイトを基に、MATLABのスクリプト環境を設定します。
以下は、サイトに記載されているセットアップ手順を和訳したものです。
MATLAB を起動します。
現在のフォルダーを OpenSim Matlab Scripts ディレクトリに変更します。Windows の場合、デフォルトでは ”C:/Users/<username>/Documents/OpenSim/4.x/Code/Matlab”です。
現在のフォルダーから"configureOpenSim.m"ファイルを実行します 。スクリプトは、OpenSim インストール ディレクトリ (これを "OPENSIM_INSTALL_DIR" と呼びます) を選択するように要求します。Windows では、デフォルトでは "C:/OpenSim 4.x"です。
スクリプトが終了すると、スクリプトが成功したかどうかを通知するダイアログ ボックスが表示されます。スクリプトが成功しなかった場合は、コマンド ウィンドウの出力で詳細を確認してください。
Windows ユーザー: "OPENSIM_INSTALL_DIR/bin" ディレクトリ (例: "C:/OpenSim 4.x/bin") がシステムの PATH 環境変数に表示ることを確認してください。
MATLAB を再起動します。再起動しないと OpenSim ライブラリは認識されません。
すべてが正しく構成されていることをテストします。コマンド ウィンドウで、次のコマンドを実行します。
>>> org.opensim.modeling.opensimCommon.GetVersion() % This should print the version of OpenSim that you've configured with MATLAB
OpenSim Mocoの設定について
OpenSim Mocoは、筋骨格モデルを用いて、順動力学解析や逆動力学解析の原理を基に最適化問題を解くためのツールです。
OpenSim 4.5には、Mocoパッケージが標準で含まれています。デフォルトのインストールでは、Moco関連のコードは "C:/Users/<username>/Documents/OpenSim/4.5/Code/Matlab/Moco" に配置されているはずです。リリース情報に関する詳細は、OpenSimのダウンロード用のページを参照してください。
また、この記事で紹介しているチュートリアル「SquatToStand」を動作させるためのコードは、"C:/Users/<username>/Documents/OpenSim/4.5/Code/Matlab/Moco/exampleSquatToStand/exampleSquatToStand_answers.m" に配置されているはずです。
チュートリアル「SquatToStand」
チュートリアルの公式ドキュメントページは、以下のURLからアクセスできます。こちらのサイトでは、MocoのMATLABコードに関する使用方法を確認できます。
このチュートリアルでは、9つの筋肉を含む、以下の図ような筋骨格モデルを用います。
![](https://assets.st-note.com/img/1733633555-a0DQhCA3BUP2TvIlos6tqcSR.png)
チュートリアルは、Part 1~Part 6に分かれています。それぞれの操作について、簡単に説明します。
Part 1: 順動力学解析を用いた動作生成
順動力学解析では、関節に作用するトルクや力を制御変数として設定し、目標とする動作を生成します。このパートでは、立ち上がり動作を生成するために、初期・終端条件や制約を設定し、最適化を通じて動作を計算しています。
Part 2: 順動力学解析で得られた動作データを用いた状態追跡解析
この解析は、Part 1で得られた順動力学解析の結果(予測データ)を目標として設定し、その動作を再現するように追跡(tracking)を行うものです。これにより、トルク制御が目標動作をどれだけ正確に再現できるかを検証できます。
Part 3: 順動力学解析での予測結果と状態追跡解析の結果の比較を行うためのグラフ化
このパートでは、Part 1(予測解析)とPart 2(追跡解析)の動作結果を比較し、グラフとして可視化しています。グラフを通じて、トルク制御が生成した動作の精度や再現性を評価できます。
Part 4: 筋駆動モデルを用いた逆動力学解析による筋力推定
筋駆動モデルを用いることで、関節の動きを再現するために必要な筋力や筋活性化レベルを推定します。このパートでは、筋駆動モデルが持つ筋特性を活用し、動作中の筋活動を詳細に解析しています。
Part 5: 補助装置を追加した筋駆動モデルによる逆動力学解析
補助装置(ばね力)を追加することで、補助が筋力に与える影響を逆動力学解析で評価します。これにより、補助装置が筋活動や力発揮に与える軽減効果を具体的に測定できます。
Part 6: 筋駆動モデルにおける補助装置の有無による筋力推定結果の比較を行うためのグラフ化
補助装置を追加した場合と追加しない場合の筋駆動解析結果を比較し、その違いをグラフで示します。この比較により、補助装置の効果を視覚的に確認し、筋力軽減への有効性を評価できます。
最後に
本稿では、筋骨格解析の基本概念から具体的な解析手法、そしてオープンソースソフトウェア「OpenSim」を用いた実践例までを紹介しました。筋骨格解析は、人体の動作や力学を深く理解するための重要な技術であり、リハビリや介護ロボット、スポーツ科学といった多岐にわたる分野で応用されています。本記事が、筋骨格解析に興味を持つ方々にとって、理解を深める一助となれば幸いです。内容について気づいた点や改善点がありましたら、ぜひご指摘いただけると嬉しいです。
Iwaken Lab. Advent Calendar 2024 9日目は、Hamachanさんです!お楽しみに!