動かして学ぶバイオメカニクス #27 〜ヤコビ行列#1
おそらくロボティクスの講義ではヤコビ行列について学ぶ機会があるだろう.ロボットにおいて,これは足先や手先と各関節間の運動学的・静力学的関係を記述する関数行列を意味する.一方,バイオメカニクスを専攻してもヤコビ行列を学ぶことはないかもしれない.しかし,身体運動の意味を考える上で実は必須の概念で,ヤコビ行列は身体運動(ロボットでも)において,全身の姿勢の意味を抽象的に議論する上では欠かせない数理的な道具だ.身体運動においてそこには多くの意味があるが,その中でも最も重要な意味をあえて取り上げるならば,それは身体全体のてこ比(モーメントアームの外積)をまとめて行列に記述していることだろう.ヤコビ行列を数理的に理解するためには,線形代数(行列,外積)と微分のごく基礎が理解できていれば難しくないので,ここでぜひ理解を深めていただきたい.物理的意味を理解しただけでも,面倒な計測や計算を行わずにヒトの運動を観察しただけで姿勢の良し悪しが判断できるなど,バイオメカニクスだけでなく,トレーニングや理学療法に携わる方にはメリットは多分にあるだろう.何回かにかけて丁寧に話を進める.
はじめに
第14章
では関節に作用するトルクの意味を考えた.つまり,静力学的な関係が成り立つように,つまり,体幹や下肢などでは特に,速度があまりおおきくならないように動くことがエネルギー伝達では重要だ.エネルギー伝達の観点から述べると,ヒトの筋肉にとって最適な筋収縮速度というものがあり,それは意外とその速度は高くないだろう.「動かさずに動かす」というなんとも怪しい古武術の格言みたいに聞こえてくるが,あえて述べるならば,そのようにいうこともできる.
動くことは筋肉の粘性の性質から,エネルギーの消費につながる.だからといって,安易に弾性的な性質が重要だとは考えないほうが良い.このことは,
や
でも述べた.
すこし遠回りして,中途半端な話題を持ち出してしまったが,この全身の静力学的関係をわかりやすく簡便に記述するときなどに役立つのがヤコビ行列(Jacobian matrix)である.
数学におけるヤコビ行列の意味
まず純粋にヤコビ行列の数学的意味について述べる.
変数$${x_1, x_2}$$で記述された関数$${f(x_1, x_2)}$$を$${x_1}$$で微分することを
$$
\frac{\partial f(x_1, x_2)}{\partial x_1}
$$
と書く.このような関数の微分を,行列の要素にも当てはめたものを関数行列(ヤコビ行列,Jacobian matrix)と呼ぶ.たとえば,変数$${x_1~x_2}$$をまとめたベクトルを$${\bm{x} = [x_1~x_2]^T}$$としたとき($${[]^T}$$の右肩の$${T}$$はベクトルの転置を意味する.この場合は横ベクトルを転置しているので,縦ベクトル$${\begin{bmatrix} x \\ y \end{bmatrix}}$$となる.紙面の関係で縦ベクトルを転置を使って記述する目的で使用している),各要素が2個の変数で記述された$${2 \times 1}$$の多変数関数$${\bm{f}(\bm{x})}$$を
$$
\bm{f}(\bm{x}) = \bm{f}(x_1, x_2)=
\begin{bmatrix}
f_{1}(x_1, x_2) \\
f_{2}(x_1, x_2)
\end{bmatrix}
$$
と定義しよう.このベクトルで記述された関数$${\bm{f}(\bm{x})}$$を各変数$${x_1,~x_2}$$で偏微分(補足1)することを考える.すなわち
$$
\bm{J}(\bm{x}) =
\frac{\partial \bm{f}}{\partial \bm{x}}
=
\begin{bmatrix}
\frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} \\
\frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2}
\end{bmatrix}
$$
のように書くことができ,これを$${\bm{y}}$$の$${\bm{x}}$$に関するヤコビ行列と呼ぶ.多変数関数$${\bm{f}}$$を複数の変数で微分したものをまとめた行列といえる.
なお,ヤコビ行列の英語名Jacobian matrixを簡便に単にヤコビアンと呼ぶことがあるが,ヤコビ行列の行列式を英語でJacobianと呼ぶので,混同しないように短称せずにヤコビ行列と呼ぶ方が賢明だ.
次に,もう少しだけ一般化する.
多次元のヤコビ行列
$${m}$$次元ベクトル$${\bm{x} = [x_1,~x_2, \cdots, x_m]^T}$$と,$${n}$$次元ベクトル$${\bm{y} = [y_1,~y_2, \cdots, y_n]^T}$$の間に
$$
\bm{y} = \bm{f}(\bm{x})
$$
という関係が成り立っているとすると,この微分を考えると
$$
\dot{\bm{y}} = \frac{\partial \bm{f}}{\partial \bm{x}} \dot{\bm{x}}
$$
が成り立つ.ここで,
$$
\frac{\partial \bm{f}}{\partial \bm{x}}
=
\begin{bmatrix}
\frac{\partial f_1}{\partial x_1} & \cdots & \frac{\partial f_1}{\partial x_m}
\\ \vdots & \cdots & \vdots \\
\frac{\partial f_n}{\partial x_1} & \cdots & \frac{\partial f_n}{\partial x_m}
\end{bmatrix}
$$
である.このとき$${n \times m}$$行列
$$
\bm{J} = \frac{\partial \bm{f}}{\partial \bm{x}}
$$
をヤコビ行列と呼び,
$$
\dot{\bm{y}} = \bm{J}(\bm{x}) \dot{\bm{x}}
$$
と書くことができる.このヤコビ行列の要素$${n,m}$$は,各$${f_n}$$の$${x_m}$$に対する勾配(変化の仕方)を表している.$${f}$$が位置の関数で,$${x}$$が座標であれば,速度の関係を示す式だと理解して良い.
位置では$${x_m}$$に対して非線形であったが,微分して速度を計算すると,行列$${\bm{J}(\bm{x})}$$と$${\dot{\bm{x}}}$$の積で記述することができる.つまり線形な表現が可能となる.線形だと何が嬉しいかは次章以降で述べることになるが,この違いは大きい.
次の具体例で,ヤコビ行列の意味を説明する.
例題:平面運動
極座標で表現した平面運動
具体例からヤコビ行列の幾何学的(運動学的)な意味を考えていく.
点Pの位置ベクトル$${\bm{x}=[x, y]^T}$$を極座標$${\bm{r}=[r, \theta]^T}$$で記述すると
$$
\begin{aligned}
\bm{x} &= \bm{\Psi} (\bm{r})\\
\begin{bmatrix} x \\ y \end{bmatrix} &=
\begin{bmatrix} r \cos \theta \\ r \sin \theta \end{bmatrix}
\end{aligned}
$$
と書くことができる.図1は紛らわしいが,この時点では,点Pは2次元座標のどの位置にあってもよく,円に拘束されていない.このとき$${\bm{x}}$$の$${\bm{r}}$$に関するヤコビ行列は,定義にしたがって計算すると,
$$
\bm{J}(\bm{r})
= \frac{\partial \bm{\Psi}}{\partial \bm{r}} =
\begin{bmatrix}
\frac{\partial (r \cos \theta)}{\partial r} & \frac{\partial (r \cos \theta)}{\partial \theta} \\
\frac{\partial (r \sin \theta)}{\partial r} & \frac{\partial (r \sin \theta)}{\partial \theta}
\end{bmatrix}
=
\begin{bmatrix}
\cos \theta & - r \sin \theta \\
\sin \theta & r \cos \theta
\end{bmatrix}
$$
となる.簡単な計算なので,実際に計算して確認していただきたい.これより,前に示したヤコビ行列の導出から
$$
\begin{aligned}
\dot{\bm{x}} &= \bm{J}(\bm{r}) \dot{\bm{r}}\\
\\
\begin{bmatrix} \dot{x} \\ \dot{y} \end{bmatrix} &= \begin{bmatrix}
\cos \theta & - r\sin \theta \\
\sin \theta & r \cos \theta
\end{bmatrix}
\begin{bmatrix}
\dot{r} \\
\dot{\theta}
\end{bmatrix}\\
&=
\begin{bmatrix}
\dot{r} \cos \theta - r \dot{\theta} \sin \theta \\
\dot{r} \sin \theta + r \dot{\theta} \cos \theta
\end{bmatrix}
\end{aligned}
$$
を得る.これは点Pの速度ベクトルを記述した式である.次に,$${\dot{\bm{x}} = \dot{\bm{\Psi}}(\bm{r})}$$を直接微分し計算しても
$$
\dot{\bm{x}} =
\dot{\bm{\Psi}}(\bm{r})
=
\begin{bmatrix}
\dot{r} \cos \theta - r \dot{\theta} \sin \theta \\
\dot{r} \sin \theta + r \dot{\theta} \cos \theta
\end{bmatrix}
$$
となり,先程の式と一致することも確認できる.
$$
\dot{\bm{x}} = \bm{J}(\bm{r}) \dot{\bm{r}}\\
$$
のように,点Pの速度$${\dot{x}, \dot{y}}$$と,極座標の速度$${\dot{r}, \dot{\theta}}$$間の関係をヤコビ行列で記述できることがこの例からもわかる.
後ほどの理解のために予め述べておくと,点Pは手先・足先で,$${r, \theta}$$は関節運動を記述する座標系と理解すると良い.すると,ヤコビ行列は手先や足先の速度と関節の速度(角速度)を,行列で記述する関数(関数行列)であることを予感させてくれる.
円運動の例
ここで,角速度$${\dot{\theta}}$$で回転している円運動におけるヤコビ行列の幾何学的意味を考えてみよう(図2).つまり,$${r}$$を変化させず($${\dot{r} =0}$$),$${\theta}$$だけを変化させる特別な運動を考える.そこで,先程の式に手先速度は$${\dot{r} =0}$$を代入すると,
$$
\begin{aligned}
\begin{bmatrix}\dot{x} \\ \dot{y} \end{bmatrix} &=
\begin{bmatrix}
\cos \theta & -r \sin \theta \\
\sin \theta & r \cos \theta
\end{bmatrix}
\begin{bmatrix}
0 \\
\dot{\theta}
\end{bmatrix}
\\
&= \dot{\theta}
\begin{bmatrix}
- r \sin \theta \\
r \cos \theta
\end{bmatrix}
\\
&= r\dot{\theta}
\begin{bmatrix}
- \sin \theta \\
\cos \theta
\end{bmatrix}
\end{aligned}
$$
となり,円運動を行っているときの$${x, y}$$方向の速度が計算される.また,図2の半径$${r}$$の円の速度ベクトルの矢印は円の接線方向
$$
\bm{J}_{\theta} =\frac{\partial \bm{\Psi}}{\partial \theta} =
\begin{bmatrix}
\frac{\partial (r \cos \theta)}{\partial \theta} \\
\frac{\partial (r \sin \theta)}{\partial \theta}
\end{bmatrix}=
\begin{bmatrix}
- r \sin \theta \\
~r \cos \theta
\end{bmatrix}
$$
を向き,これはヤコビ行列の右半分に相当している.これは,図2の半径$${r}$$を一定にした円上の接線を意味する黒色の矢印に相当し,点Pの速度方向を示している.ただし,この方向を示すベクトルの大きさは$${r}$$であることに注意されたい.そして,図2は$${\theta}$$に対するそのグラフを示している.
そして,このベクトルと$${\dot{\theta}}$$の積を計算すれば点Pの接線方向の速度となる.
法線方向の運動
次に,角度変化をさせずに($${\dot{\theta}=0}$$),点Pを運動させることを考えよう(図3).このときの点Pの運動は法線方向を向き,その速度の大きさは$${\dot{r}}$$となる.つまり速度は$${\dot{r}}$$に比例し,法線方向$${[\cos \theta, ~\sin \theta]^T}$$に飛び出しり,中心に戻ってくる運動を行う.そのときの速度ベクトルは
$$
\begin{bmatrix}\dot{x} \\ \dot{y} \end{bmatrix} =
\dot{r}
\begin{bmatrix}
\cos \theta\\
\sin \theta
\end{bmatrix}
$$
となり,次のように定義し直したベクトル部分
$$
\bm{J}_{r} =\frac{\partial \bm{\Psi}}{\partial r} =
\begin{bmatrix}
\frac{\partial (r \cos \theta)}{\partial r} \\
\frac{\partial (r \sin \theta)}{\partial r}
\end{bmatrix}=
\begin{bmatrix}
\cos \theta \\
\sin \theta
\end{bmatrix}
$$
はヤコビ行列$${\bm{J}}$$の左半分を示し,図3のベクトルの矢印に相当する.
$${\bm{J}_r}$$は,法線方向のベクトルを意味し,先程の円運動と同様に,$${\dot{r}}$$とこの法線方向のベクトルとの積で速度が計算される.
ヤコビ行列の幾何学的意味
つまり,極座標で記述した際の,点Pのヤコビ行列は$${\theta}$$または$${r}$$を一定にしたときの速度方向のベクトル$${\bm{J}_r, \bm{J}_{\theta}}$$を並べる
$$
\bm{J} = \begin{bmatrix}
\bm{J}_r & \vdots & \bm{J}_{\theta}
\end{bmatrix}
=
\begin{bmatrix}
\cos \theta & \vdots & -r \sin \theta \\
\sin \theta & \vdots & r \cos \theta
\end{bmatrix}
$$
ことで,点Pの速度方向を示している.つまり,円運動と法線方向の運動の速度方向を並べた行列である.図2,3においては黒色の矢印がそれに相当する.
そして,点Pの速度は,それらの線形和で記述できる.位置の関数$${ \bm{\Psi} (\bm{r})}$$では
$$
\begin{aligned}
\bm{x} &= \bm{\Psi} (\bm{r})\\
\begin{bmatrix} x \\ y \end{bmatrix} &=
\begin{bmatrix} r \cos \theta \\ r \sin \theta \end{bmatrix}
\end{aligned}
$$
$${r, \theta}$$に関する非線形関数のままであった.しかし,これを微分した速度の式$${\dot{\bm{x}}}$$では,
$$
\begin{aligned}
\dot{\bm{x}} &= \bm{J}(\bm{r}) \dot{\bm{r}}\\
&= \dot{r} \bm{J}_r + \dot{\theta} \bm{J}_{\theta}
\end{aligned}
$$
のように行列で記述され,$${\dot{r}, \dot{\theta}}$$に関して線形の関数となる.このことは,速度レベルではヤコビ行列$${\bm{J}}$$を使った計算が可能となるなど,以降の計算で多くの利点をもたらす.具体的に線形であると何が嬉しいかは,以降の章で示される.
つまり全身の姿勢変化をヤコビ行列で一括して記述することに繋がり,全身運動の姿勢の意味を$${\bm{J}}$$で語ることができる.この意味も以降の章で説明する予定だ.
おわりに
これまでの議論だけは,ヤコビ行列の身体運動における物理的意味は見えてこないだろう.次章
から,その物理的な意味を考えていく.
補足
補足1:全微分と偏微分
関数に対する偏微分の計算方法は数学の教科書で学んでいただきたいが,例えば
$$
f(x, y) = x^2 - y^2
$$
という関数$${f(x,y)}$$の$${x}$$に関する偏微分は,$${y}$$を定数とみなして,$${f}$$を微分するば良いので,
$$
\frac{\partial f(x,y)}{\partial x} = 2 x,~ \frac{\partial f(x,y)}{\partial y} = -2 y
$$
となる.
図4左の青線は曲面(関数$${z = f(x, y) = \frac{x^2}{10} - \frac{y^2}{10}}$$)を表し,点Q($${x=1, y=-1}$$)に接する平面を赤色の平面で描いた.図4右はその接平面を点Qから$${x, y}$$の正の方向に拡大した図を示した.ここで平面の$${x}$$方向への傾き(勾配)は$${\frac{\partial f}{\partial x}}$$,$${y}$$方向への傾きは$${\frac{\partial f}{\partial y}}$$となり,全微分は
$$
\Delta z = \Delta f = \frac{\partial f}{\partial x} \Delta x + \frac{\partial f}{\partial y} \Delta y
$$
と書き表される.
ここで,$${\Delta x, \Delta y, \Delta z}$$は点Qからの各$${x, y, z}$$方向への微小変位を示している.
このように,$${f}$$の$${x, y}$$に対する偏微分$${\frac{\partial f}{\partial x}, \frac{\partial f}{\partial x}}$$は,それぞれ$${y}$$と$${x}$$を固定し,すなわち$${x}$$と$${y}$$方向の傾き(1次の勾配)を示している.
参考文献
1)伊藤,身体知システム論(ヒューマンロボティクスによる運動の学習と制御),共立出版,2005
【著作権・転載・免責について】
権利の帰属
本ホームページで提示しているソフトウェアならびにプログラムリストは,スポーツセンシング社の著作物であり,スポーツセンシング社に知的所有権がありますが,自由にご利用いただいて構いません.
本ページに掲載されている記事,ソフトウェア,プログラムなどに関する著作権および工業所有権については,株式会社スポーツセンシングに帰属するものです.非営利目的で行う研究用途に限り,無償での使用を許可します.
転載
本ページの内容の転載については非営利目的に限り,本ページの引用であることを明記したうえで,自由に行えるものとします.
免責
本ページで掲載されている内容は,特定の条件下についての内容である場合があります. ソフトウェアやプログラム等,本ページの内容を参照して研究などを行う場合には,その点を十分に踏まえた上で,自己責任でご利用ください.また,本ページの掲載内容によって生じた一切の損害については,株式会社スポーツセンシングおよび著者はその責を負わないものとします.
【解析・受託開発について】
スポーツセンシングでは,豊富な知見を持つ,研究者や各種エンジニアが研究・開発のお手伝いをしております.研究・開発でお困りの方は,ぜひスポーツセンシングにご相談ください.
【例】
・データ解析の代行
・受託開発
(ハードウェア、組込みソフトウェア、PC/モバイルアプリ)
・測定システム構築に関するコンサルティング など
その他,幅広い分野をカバーしておりますので,まずはお気軽にお問い合わせください.
【データの計測について】
スポーツセンシング社のスタジオで,フォースプレートやモーションキャプチャを利用した計測も行えます.出力されるデータと,ここで示したプログラム(入力データの取り込み関数を少々改変する必要があるが)で,同様な解析を行えますので,まずはお気軽にお問い合わせください.