スポーツバイオメカニクス MatlabとOpenSIM

スポーツバイオメカニクスの分析によく用いられるMatlabとOpenSIMの使用に関する備忘録

モデルのダウンロード

今回はモデルの作成方法について解説していきたいと思います。

まずは、サンプルモデルをダウンロードしましょう。

SimTK: OpenSim: Downloads


f:id:simulate:20150523190027p:plain

Models.zipをダウンロードすると、基本的なモデルがほとんどそろっています。

まずは、歩行分析などに用いられるモデルを開いてみましょう。

f:id:simulate:20150523190555p:plain

Fileから「Open Model」を選択します。
そして、先ほどダウンロードした、Models.zipの中の「Gait2354_Simbody」フォルダを開き、「gait2354_simbody.osim」を開きます。

f:id:simulate:20150523190857p:plain

そうすると、このような腕のないヒトのモデルが開きます。

f:id:simulate:20150523190952p:plain


ここにモーションキャプチャで測定したデータを読み込むためのマーカーセットを作成する必要があります。
そのためにデフォルトのマーカーセットをまずは確認しましょう。

f:id:simulate:20150523191146p:plain

f:id:simulate:20150523191227p:plain


同じフォルダ内に「gait2354_Scale_MarkerSet.xlm」というファイルがありますので、これを開きます。
そうすると、このようにマーカーが表示されると思います。

f:id:simulate:20150523191354p:plain

ここから、このマーカーを自分の実験データに合わせて動かしていくわけですが、それは次回にしたいと思います。

OpenSim

OpenSimとは、無料で筋骨格モデルを使ってバイオメカニクス的分析を行えるソフトのことです。

無料であるのは大変ありがたいことですが、残念なことにマニュアルのほとんどが英語で書かれており、使い方を覚えることが困難です。

そこで、ここではその使い方を解説しようと思います。

相関関係の検討

Matlabには標準で簡単な統計を行える関数が備わっています.

最も代表的なものは相関分析でしょう.

corrcoef関数を使うことでPearsonの積率相関係数が算出できます.

その他にもstatistics toolboxを購入することで,t検定などの分析もできるようになります.

statistics toolboxに興味がある方がググってもらうとして,相関分析の方法を説明します.

 

[r,p]=corrcoef(変数)

と書いて使用します.

rは相関係数,pは有意確率です.

変数には,系列を行に入れていきます.例えば,1行目に疾走速度,2行目に腿上げ角度,という具合に.

あとは実行してやると相関行列と有意確率の行列が出てきます.

 

ちなみに,変数は何系列あっても大丈夫です.

私が試した限りでは,30系列くらいは問題なく実行されました.

おそらく,使用しているマシンパワーに依存していると思われるので,相当な数でも分析してくれると考えられます.

Matlab 起動時のフォルダを設定

こんにちは.

今日は起動時に開かれるフォルダの設定方法を紹介したいと思います.

Matlab起動時のフォルダは,Windowsではインストール時に作成されるMydocument内のMATLABフォルダ,Macではユーザーフォルダに設定されていると思います.

これを別のフォルダに設定したい場合,いくつか方法があります.

1.userpath関数

まず紹介するのは,userpathという関数を使う方法です.

例えば,Machogeというユーザーのフォルダの中の「analysis」フォルダにmatlabのデータを置いて使うことを想定した場合には


userpath('/Users/hoge/analysis/') ;

となります.

これをコマンドウインドウに入力して実行した後にMatlabaを再起動してみてください.

 

2.startup.m

Matlabの初期設定の起動フォルダに「startup.m」を作成する方法です.
startup.mというファイルに


cd('/Users/hoge/analysis/') ;

と書いて保存しておくだけです.

この方法では.startup.mに書いておくだけでMatlabのあらゆる初期設定ができます.

 

他にも方法はあるのかもしれませんが,私が知っているのはこの2つだけです.
ぜひ試してみてください.
今後も役立つMatlabの使い方や設定方法などを紹介していきたいと思います.

Matlabが起動しない?OS X Yosemiteに更新する前に確認を。

アップルユーザーの皆さん,こんにちは.
OS X Yosemiteがリリースされましたね.
私もさっそくアップデートしました.
そして,今回のテーマである,Matlabが起動しないという問題にぶち当たりました(笑)
起動しようとすると,こんなエラーメッセージが表示されます.
Matlab error
ちなみに,アイコンはこんな感じになっています.
Matlab icon
結論から言うと,現段階では2013以前のバージョンを起動するようにする方法はわかりません.
素直に2014にバージョンアップするのが賢明です.
ただし,2014バージョンにも2014aと2014bがあります.
公式にサポートが表明されているのは2014bのみです.
したがって,2014bを購入しなければなりません.
しかし,ここでひとつの問題が浮上します.
それは・・・
2014bにstudentが存在しないということです.
通常の個人用を買うとおよそ15000円です.
15000円にして,toolboxはついていません.
一方のstudentは,およそ10000円にしてtoolboxがいくつか付属しています.
さらに,toolboxを必要としない人であれば,5000円足らずで購入できます.
toolboxも同時購入なら,1つ1000円ほどで購入できますので,必要とするtoolboxが少ないのなら,この方法で買った方がお得です.
2014bを買える人は概ね問題なく使用でき,2014aなら学生も購入できます.
解決したかのように見えますが,実はもうひとつ問題が潜んでいます.
なんと...2014aはインストールしただけでは使えないのです.
まず,パッチを適用しないといけません.
patch
ダウンロードしたら,指示に従ってインストールすればOKです.
次に,2014aを起動する際には一工夫が必要で,ターミナルから起動しないといけないのです.
パッケージの中にあるStartMATLABでも起動できます.

f:id:simulate:20170131195830p:plain

f:id:simulate:20170131195851p:plain

f:id:simulate:20170131195924p:plain

最小二乗法

今回は最小二乗法による回帰式の求め方を紹介します。

最小二乗法は一般的には、疑似逆行列を用いる方法ではなく、偏微分を用いる方が多いですが、Matlabの処理では疑似逆行列を用いた方が簡単に行えます。

Matlabは行列計算ソフトなので、当然と言えば当然です。

 

y=ax+b

という形の回帰式を求めたい場合、aとbが求まれば回帰式が作れるわけです。

なので、最小二乗法でaとbを求めます。

そのためには下のような行列式を作ります。

f:id:simulate:20170131200300p:plain

この式のxとyにそれぞれの値を代入していきます。

行列式は次のように置き換えて考えることができます。

f:id:simulate:20170131200322p:plain

 

行列式で表記すると複雑な気がしますが、AX=Bとおくと、とても簡単な式に見えます。

これをx=の形にしてやると、答えが出てきます。

なので、

f:id:simulate:20170131200338p:plain

と言うように解いてしまいたいのですが、Aは正則行列ではないので逆行列を作ることができません。

そこで、疑似逆行列を作ります。

Matlabには疑似逆行列を計算する関数がありますので

pinv(A);

とすれば良いだけです。

なので、疑似逆行列をA+として

f:id:simulate:20170131200232p:plain

 

という計算ができます。

これはMatlabでの表記は、さきほどの疑似逆行列の部分と合わせて書くと

ans=pinv(A)*B;

となります。

すると、出てきた答えは2行1列の行列になっているはずです。

念のために説明しておくと、1行目がa、2行目がbの値になっています。

同様の方法で最小二乗法でいろいろなものを求めることができます。

 

疑似逆行列を用いた最小二乗法の説明はあまり見かけないので、簡単に説明してみました。

私の理解も不十分でわかりにくい点もあったかもしれませんが、参考にしてみてください。

角度の算出 —atan2—

前回はacosを使った余弦定理を用いた角度算出方法を紹介しました。

今回はatan2を使った正接の角度算出方法を紹介します。

前回は2つのベクトルのなす角の求め方でしたが、今回は1つのベクトルのある平面内のひとつの軸に対する角度を求めます。例えば、XY平面の中でX軸となす角度などです。

f:id:simulate:20170131200514p:plain

関数atan2の使い方は上の図の通りです。

では、これをどのように使うとベクトルの角度の算出方法になるのか説明していきます。

f:id:simulate:20170131200556p:plain

仮に、上の図のように斜辺がベクトルaだとすると、そのx成分とy成分を使ってその角度を求めることができます。

ベクトルaの成分がx,yの順番で引数に入っているとすると、上の図のような書き方で角度を求めることができます。
なお、これで算出される角度はradianですので、degreeに変換する場合は
「*180/pi」
と最後に付け足してやる必要があります。

この図では「θ」と記号を使っていますが、Matlabの引数に記号は使えないので「theta」などとすればそのまま使用可能です。

これを使うと、セグメント角度の算出が可能になります。

例えば、大腿セグメントの角度を算出する場合、まずは大腿セグメントベクトルを作らなければなりません。
近位から遠位に向かうベクトルとして、大腿セグメントベクトルを作る場合は、膝関節の座標値から股関節の座標値を引きます。

ベクトルの引き算は高校の数学Bの範囲ですので、わからない方は調べてみてください。
これはそんなに難しい概念ではありません。


次に、さきほど引き算で作成したベクトルの角度を算出します。
さっき説明したように、大腿セグメントベクトルのx成分とy成分をatan2関数に入れてやるだけです。

ちなみに、atan2では-180度から180度の間で角度が求められます。
したがって、atan2(y,x)とそのまま入れた場合は

f:id:simulate:20170131200622p:plain

というような角度の求め方になります。

x成分とy成分の順番を入れ替えたり、-を付けたりすることでどこを基準に角度を求めるかが変わります。
求めたい角度が概ね何度くらいかわかるものから試してみて、どこで求めるのが望ましいか考えなら行うことが良いと思います。