見出し画像

動かして学ぶバイオメカニクス #28 〜ヤコビ行列#2

前章まではヤコビ行列の数学的背景を中心に述べた.身体運動におけるヤコビ行列は,手先速度と関節速度間の関係を記述することで,速度レベルでの運動の(座標)変換を担う.これは冗長自由度を論じるベルンシュタイン問題にも関係する.一方,ヤコビ行列は速度のみならず力の伝達や変換の役割も担うことができ,実はベルンシュタイン問題は議論を運動学から力学に転換すれば解消する.これらの議論は,次章以降で述べるの手先力と関節に作用するトルク間の静力学関係へ発展し,議論されるが,本章では数理的な議論の展開を中心に述べるにとどまる.しかし,身体運動にとって地味に重要な内容が散りばめられているので,注意深く読んでいただけたらと思う.





はじめに

前章

で,ヤコビ行列の数学的意味と導出方法を述べた.ここでは,身体運動におけるヤコビ行列(Jacobian matrix)の意味を考える.ロボティクスの教科書と内容は同じであるのでそちらを参照するとよいだろう.ここでは,できるだけ丁寧に記述しているが,より数学的な議論は,文献1〜3などを参照するとよいだろう.特に文献1では,冗長自由度と行列のランク(rank)零空間(null space, または核:kernel )などとの関連が丁寧に述べられている.

冗長性などと関連して,これらの数学的な理解は重要であるのでどこかで述べたいが,ここではまずはヤコビ行列そのものの意味の理解を深めることを目的として,後回しにしたい.

身体構造とヤコビ行列

まずは簡単な平面2リンクモデルを考えよう.

2リンク平面モデル

図1:2リンクモデル

図1の平面2リンクモデルの手先位置と関節角度の角速度との関係を求めることを試みる.各リンクの長さをそれぞれ$${l_1, l_2}$$とし,関節の角度$${q_1, q_2}$$を図1のように定義すると,手先位置ベクトル$${\bm{x} = [x~ y]^T}$$と関節角度ベクトル$${\bm{q} = [q_1~ q_2]^T}$$との間の関係を

$$
\begin{aligned}
\bm{x} &= \bm{\Psi}(\bm{q})
\\
\begin{bmatrix}
x\\ y
\end{bmatrix}
& = \begin{bmatrix}
\Psi_1(q_1, q_2) \\
\Psi_2(q_1, q_2)
\end{bmatrix}
\\
&= \begin{bmatrix}
l_1 \cos q_1 + l_2 \cos(q_1 + q_2) \\
l_1 \sin q_1 + l_2 \sin(q_1 + q_2)
\end{bmatrix}
\end{aligned}
$$

と書くことができる.この時間微分を求めると前章の結果から

$$
\bm{J} = \frac{\partial \bm{\Psi}}{\partial \bm{q}} = 
\begin{bmatrix}
 \frac{\partial \Psi_1}{\partial q_1} & \frac{\partial \Psi_1}{\partial q_2} \\
\frac{\partial \Psi_2}{\partial q_2} &  \frac{\partial \Psi_2}{\partial q_2}
\end{bmatrix}
=
\begin{bmatrix}
-l_1 \sin q_1 - l_2 \sin(q_1 + q_2)  & -l_2 \sin(q_1 + q_2)\\
l_1 \cos q_1 + l_2 \cos(q_1 + q_2) &  l_2 \cos(q_1 + q_2)
\end{bmatrix}
$$

のようにヤコビ行列$${\bm{J}(\bm{q})}$$を導くことができる.これより.

$$
\begin{aligned}
\dot{\bm{x}} &= \bm{J}(\bm{q}) \dot{\bm{q}}
\\
\begin{bmatrix}
\dot{x} \\ \dot{y}
\end{bmatrix}
&=
\begin{bmatrix}
-l_1 \sin q_1 - l_2 \sin(q_1 + q_2)  & -l_2 \sin(q_1 + q_2)\\
l_1 \cos q_1 + l_2 \cos(q_1 + q_2) &  l_2 \cos(q_1 + q_2)
\end{bmatrix}
\begin{bmatrix} \dot{q}_1 \\ \dot{q}_2
\end{bmatrix}
\end{aligned}
$$

のように手先速度の式を書くことができる.前章と同様に,ご自身で直接$${\bm{\Psi}(\bm{q})}$$を時間微分し,上記の計算結果と一致することを確かめていただきたい.

このように手先の自由度が2で,関節角度の自由度も2である場合,ヤコビ行列$${\bm{J}(\bm{q})}$$は2次の正方行列(square matrix)($${2 \times 2}$$の行列)となるので,逆行列$${\bm{J}^{-1}(\bm{q})}$$を計算することができる.

なお,ヤコビ行列は$${\bm{q}}$$の関数であるので,$${\bm{J}(\bm{q})}$$は姿勢に依存して変化する関数であることに注意されたい.

逆行列と特異点(特異姿勢)

逆行列の簡単な復習を行う.

ヤコビ行列$${\bm{J}}$$は$${\bm{q}}$$の関数で,ここで取り上げた例は特別で,正方行列(この例では,$${2\times2}$$の2次の正方行列)となっている.正方行列は行要素の数と列要素の数が同じ行列である.$${\bm{J}}$$が正方行列であれば,逆行列(Inverse matrix)$${\bm{J}^{-1}}$$を計算できる.

ここで逆行列とは,$${a}$$を定数とすると,$${aa^{-1} = a^{-1}a = 1}$$を満たす$${x}$$が逆数$${a^{-1}}$$であるように,$${\bm{A} \bm{A}^{-1} = \bm{A}^{-1} \bm{A} = \bm{E}}$$を満たす行列である.なお,$${\bm{E}}$$は単位行列(identity matrix)で2次の場合,

$$
\bm{E} = \begin{bmatrix} 1 & 0\\ 0 & 1 \end{bmatrix}
$$

のように対角要素が1,非対角要素が0となる行列であり,$${\bm{A} \bm{E} = \bm{E} \bm{A} = \bm{A}}$$を満たす,何にかけても,もとの$${\bm{A}}$$となる(恒等となる)性質を持つ行列である.

さて,ヤコビ行列$${\bm{J}}$$の逆行列$${\bm{J}^{-1}}$$が計算できるときは,手先速度$${\dot{\bm{x}}}$$を与えれば,

$$
\dot{\bm{q}} = \bm{J}^{-1} (\bm{q}) ~\dot{\bm{x}}
$$

から一意に関節速度$${\dot{\bm{q}}}$$を決められることを意味する.

しかし,$${\bm{q}}$$によってはヤコビ行列$${\bm{J}}$$が正則行列(regular matrix, non-singular matrix)にならない場合がある.つまり逆行列を持たない場合がある.

逆行列を持たないということは,

$$
\dot{\bm{q}} = \bm{J}^{-1} (\bm{q}) ~\dot{\bm{x}}
$$

を計算できないことを意味するが,これは手先の速度$${\dot{\bm{x}}=[\dot{x}~\dot{y}]^T}$$の速度ベクトルを決めても,それに「対応する関節の速度ベクトル$${\dot{\bm{q}}=[\dot{q}_1~\dot{q}_2]^T}$$を計算できない姿勢$${\bm{q}}$$が存在する」ことを意味する.

このことを逆行列の定義から考えていくと,たとえば,2次の正方行列$${\bm{A}}$$が

$$
\bm{A}
=
\begin{bmatrix}
a & b \\ c & d
\end{bmatrix}
$$

である場合,その逆行列$${\bm{A}^{-1}}$$は

$$
\bm{A}^{-1}
=
\frac{
\begin{bmatrix}
d & -b \\ -c & a
\end{bmatrix}}
{\det \bm{A}}
=
\frac{
\begin{bmatrix}
d & -b \\ -c & a
\end{bmatrix}}
{ | \bm{A} |}
=
\frac{
\begin{bmatrix}
d & -b \\ -c & a
\end{bmatrix}}
{ad - bc}
$$

となることから,分母の$${\det \bm{A} = ad -bc }$$が0となる場合は,0で割り算ができないので逆行列が計算できない.ここで$${\det \bm{A}}$$を行列式(determinant)と呼ぶ.$${| \bm{A} |}$$と書くこともある.またこの記号から,これは行列の大きさを表すことを意味することがわかる.

したがって,ヤコビ行列の逆行列が計算できない場合は,$${\det \bm{J}(\bm{q}) = 0}$$を満たす時になる.一般にこのような逆行列が計算できない(行列式=0となる)点を特異点(singular point)と呼び,ロボティクスでこのような姿勢$${\bm{q}}$$を特異姿勢(singular configuration)と呼ぶ(補足1)

2リンクモデルのヤコビ行列の逆行列と行列式

先程の2リンクモデルの例でヤコビ行列の逆行列が計算できない場合,すなわち特異点となる場合を調べる.2リンクモデルのヤコビ行列は

$$
\bm{J} 
=
\begin{bmatrix}
-l_1 \sin q_1 - l_2 \sin(q_1 + q_2)  & -l_2 \sin(q_1 + q_2)\\
l_1 \cos q_1 + l_2 \cos(q_1 + q_2) &  l_2 \cos(q_1 + q_2)
\end{bmatrix}
$$

であったので,行列式$${\det \bm{J}(\bm{q})}$$を計算すると

$$
\begin{aligned}
\det \bm{J}(\bm{q}) = (-l_1 \sin q_1 - l_2 \sin(q_1 + q_2)) \times ( l_2 \cos(q_1 + q_2)) -\\ \hspace{2cm}
( -l_2 \sin(q_1 + q_2)) \times (l_1 \cos q_1 + l_2 \cos(q_1 + q_2))
\end{aligned}
$$

となる.この計算は少し面倒だが,打ち消し合う成分に注意すれば,

$$
\begin{aligned}
\det \bm{J}(\bm{q}) &= -l_1 \sin q_1 \times l_2 \cos(q_1 + q_2) + l_2 \sin(q_1 + q_2) \times l_1 \cos q_1
\\
&= l_1 l_2 \left\{-\sin q_1 \cos(q_1 + q_2) + \cos q_1 \sin(q_1 + q_2) \right\}
\\
&= l_1 l_2 \left\{\cos q_1 \sin(q_1 + q_2) -\sin q_1 \cos(q_1 + q_2) \right\}
\\
&= l_1 l_2 \left\{\sin(q_1 + q_2) \cos q_1 - \cos(q_1 + q_2) \sin q_1 \right\}
\end{aligned}
$$

となることに気がつくだろう.さらに,三角関数の加法定理

$$
\begin{aligned}
\sin (\alpha - \beta) = \sin \alpha \cos \beta - \cos \alpha \sin \beta
\end{aligned}
$$

を利用すれば,

$$
\begin{aligned}
\det \bm{J}(\bm{q}) &=
l_1 l_2 \left\{\sin(q_1 + q_2) \cos q_1 - \cos(q_1 + q_2) \sin q_1 \right\}
\\
&=l_1 l_2 \sin \left\{(q_1 + q_2) - q_1 \right\}
\\
&= l_1 l_2 \sin  q_2
\end{aligned}
$$

を得る.

これより2リンクモデルのヤコビ行列の逆行列$${\bm{J}^{-1}(\bm{q})}$$が計算できない場合は,

$$
\sin q_2 = 0
$$

の場合となり,図1を思い出すとリンク1とリンク2が一直線に並ぶ場合で,$${q_2 = 0 ^\circ}$$または,関節が折れ曲がった$${q_2 = 180 ^\circ}$$となる.

この姿勢では,リンク(セグメント,部位)に垂直な方向にしか手先速度$${\dot{\bm{x}}}$$を与えられず,任意の$${\dot{\bm{x}}}$$を与えて$${\dot{\bm{q}} = \bm{J}^{-1} \dot{\bm{x}}}$$を使って,$${\dot{\bm{q}}}$$を計算できないことを意味する.つまり,このような姿勢では,リンク(セグメント)の軸方向に手先を運動させようとすることができない.

なお,2リンクモデルのヤコビ行列の逆行列は

$$
\begin{aligned}
&\bm{J}^{-1}(\bm{q})
\\
&~~~= \frac{1} {l_1 l_2 \sin  q_2} 
\begin{bmatrix}
l_2 \cos(q_1 + q_2) & l_2 \sin(q_1 + q_2)\\
-l_1 \cos q_1 - l_2 \cos(q_1 + q_2) & -l_1 \sin q_1 - l_2 \sin(q_1 + q_2)
\end{bmatrix}
\end{aligned}
$$

となる.

また,このような姿勢の近傍では,$${\sin q_2}$$が0に近いので,$${\bm{J}^{-1}}$$の分母が大きくなり,このような姿勢の近傍で「任意の」手先速度を計算させようとすると,関節速度$${\dot{\bm{q}}}$$が大きくなり,ロボットでは暴走の危険があるため回避する必要がある.したがってヒトの運動でもシミュレーションなどでは注意が必要だが,ヒトの運動の解析ではそもそも,そのように動かすことができないので,あまり気にする必要はないが,直立姿勢や上腕と前腕を真っすぐにするような姿勢でヤコビ行列を計算するときなどには注意をされたい.

このような姿勢の近傍では,リンク(セグメント)の軸方向に手先を運動させようとすることは計算上できず,特異姿勢(singular configuration)となる.

ロボットでは特異姿勢を避けるように制御を行う必要があり,シミュレーションや制御する立場ではヤコビ行列は悪者になりがちであるが,身体運動ではむしろこの姿勢を活用することが多い.具体例は後ほど取り上げるが,たとえば立位姿勢がそもそもそのような姿勢であることからも,むしろ姿勢は特異であるほうが身体の力学にとっては都合が良いと認識しておくのが良いだろう.

3リンク平面モデル

図2:平面3リンクモデル

図2の平面の3リンクモデルのヤコビ行列を考える.これは,手先の自由度が2であるのに対して,関節角度の自由度は3と,手先と関節の自由度が一致していない例である.

各リンクの長さをそれぞれ$${l_1, l_2, l_3}$$とし,関節の角度$${q_1, q_2, q_3}$$を図2のように定義すると,手先位置ベクトル$${\bm{x} = [x~ y]^T}$$と関節角度ベクトル$${\bm{q}_3 = [q_1~ q_2~q_3]^T}$$との間の関係は

$$
\begin{aligned}
\bm{x} &= \bm{\Psi}_3(\bm{q}_3)
\\
\begin{bmatrix}
x\\ y
\end{bmatrix}
& = \begin{bmatrix}
\Psi_{31}(q_1, q_2, q_3) \\
\Psi_{32}(q_1, q_2, q_3)
\end{bmatrix}
\\
&= \begin{bmatrix}
l_1 \cos q_1 + l_2 \cos(q_1 + q_2) + l_3 \cos(q_1 + q_2 + q_3) \\
l_1 \sin q_1 + l_2 \sin(q_1 + q_2)+ l_3 \sin(q_1 + q_2 + q_3)
\end{bmatrix}
\end{aligned}
$$

と書くことができる.この時間微分を求めると前章の結果から

$$
\begin{aligned}
\bm{J}_3 &= \frac{\partial \bm{\Psi}_{3}}{\partial \bm{q}_3} \\
&= 
\begin{bmatrix}
 \frac{\partial \Psi_{31}}{\partial q_1} & \frac{\partial \Psi_{31}}{\partial q_2} & \frac{\partial \Psi_{31}}{\partial q_3} \\
\frac{\partial \Psi_{32}}{\partial q_{1}} &  \frac{\partial \Psi_{32}}{\partial q_2} &  \frac{\partial \Psi_{32}}{\partial q_3}
\end{bmatrix}
\\
&=
\begin{bmatrix}
-l_1 \sin q_1 - l_2 \sin(q_1 + q_2) - l_3 \sin(q_1 + q_2 + q_3)  & -l_2 \sin(q_1 + q_2) - l_3 \sin (q_1 + q_2 + q_3) & - l_3 \sin(q_1 + q_2 + q_3)\\
l_1 \cos q_1 + l_2 \cos(q_1 + q_2) + l_3 \cos(q_1 + q_2 + q_3) &  l_2 \cos(q_1 + q_2) + l_3 \cos (q_1 + q_2 + q_3)& l_3 \cos(q_1 + q_2 + q_3)
\end{bmatrix}
\end{aligned}
$$

のように$${2 \times 3}$$(2行3列)のヤコビ行列$${\bm{J}_3(\bm{q})}$$を導くことができる.

ここで,式が長いので,

$$
\text{S}_{12} \equiv \sin (q_1+q_2)
\\
\text{C}_{123} \equiv \cos (q_1+q_2+q_3)
$$

のように定義すれば

$$
\begin{aligned}
\dot{\bm{x}} &= \bm{J}_3(\bm{q}_3) \dot{\bm{q}_3}
\\
\begin{bmatrix}
\dot{x} \\ \dot{y}
\end{bmatrix}
&=
\begin{bmatrix}
-l_1 \text{S}_1 - l_2 \text{S}_{12}  -l_3 \text{S}_{123} & - l_2 \text{S}_{12} - l_3 \text{S}_{123} & - l_3 \text{S}_{123}\\
l_1 \text{C}_1 + l_2 \text{C}_{12} + l_3 \text{C}_{123} &  l_2 \text{C}_{12} + l_3 \text{C}_{123} &  l_3 \text{C}_{123}
\end{bmatrix}
\begin{bmatrix} \dot{q}_1 \\ \dot{q}_2 \\ \dot{q}_3
\end{bmatrix}
\end{aligned}
$$

と書きなおした.これまでの議論のように関節速度$${\dot{\bm{q}}}$$を与えれば,手先速度$${\dot{\bm{x}}}$$が決まる.ここで,$${ \bm{J}_3}$$は$${2 \times 3}$$の行列で,正方行列でないため正則行列でもない.つまり逆行列を持たない.したがって,手先速度を決めても,関節速度を一意に定めることができない.

図2を見ても,手先の位置を定めても関節を動かすことができ,関節角度は一意に決められないことは容易に想像できるだろう.

冗長性と逆運動学

ヒトの腕の自由度の定義は難しいが,肩3自由度,肘1自由度,前腕内外旋1自由度,手2自由度とすると,関節の可動育の制限はあるが合計7自由度とみなすことができる.これに対して手先は位置3自由度,回転3自由度の合計6自由度で,腕は冗長自由度をもつ.実際に手を抑えて,肩の位置を固定すると,決して可動域はそれほど広くないが,関節を動かすことができることが自分でもわかるだろう.

このような状態を自由度に冗長性(redanduncy)があると呼ぶ.「冗長自由度を持つ」などともいう.

一般に手先の自由度$${m}$$に対して,関節の自由度が$${n}$$で

$$
m < n
$$

の場合は,関節の自由度が冗長になる.ロボットでは冗長性をもつとき,極端に述べると単に最適化などで一意に定めることができれば良いという方針で逆行列を定める方法が用いられる.このように手先位置を定めたときに関節角度を定める問題を逆運動学(inverse kinematics)とよぶ.ロボットでは何らかの方法で適切に定まれば良い(だけ?)が,ヒトがどのような基準で逆運動学の逆問題(inverse problem)を解いているかの議論は中途半端で,ヒトにとっての適切さは,筋張力最小でもトルク変化最小でも定まらないだろう.まだ解決された問題ではないはずだ.

motor control(運動制御)の分野などでは,これはベルンシュタイン問題と呼ばれる.そして自由度を削減して制御したいmotor controlの研究者は,その自由度の組み合わせの選択というシナジー(synergy)という考え方に帰着する.しかし,自由度を削減することが身体運動の制御の本質かどうかは大いに疑問がある.パターン化された運動からは,シナジー,すなわち,なんらかの物理量の固有ベクトルは見つかるだろう.いつも見つかるとは限らないが,むしろ見つかって当然だろう.しかし,研究を行っただけ異なるシナジーが見つかり,シナジーに冗長性が発生するという皮肉な事態が起きている.これらについては,またどこかで議論する.

ロボットを制御する立場では冗長自由度は邪魔以外の何物でもない.したがって自由度を削減して制御する立場は自然な流れだ.しかし身体運動の解析(制御戦略)を考えるとき,運動学的自由度削減に固執する必要は全くない.ヒトは自由度問題を解決することで身体運動を制御しているのではなく,たとえば,なにかを最小するように運動をしていたら,たまたま自由度が削減されたようにみえるだけではないだろうか?

身体運動でも末端である手先や足先の動かし方が運動を強く拘束する.しかし,エンドエフェクタである手先や足先を拘束するのは姿勢と同時に力も拘束する.力学における自由度の問題は,運動学における自由度の関係と反対(双対, duality)の関係になる.つまり力学では手先力と関節に作用するトルク間の自由度の問題は発生しない.運動学で自由度や冗長性を考えると確かに姿勢を一意に定められない不定問題となるが,静力学では手先力を定めれば一意にトルクの分配が定まる.反対に関節に作用する各トルクが定まっても手先力が定まらない.力学で考えればそもそもベルンシュタイン問題など考える必要がない.このことは次章以降で説明する.

おわりに

ここでは,平面2リンクや平面3リンクの手先速度と関節速度間のヤコビ行列を具体的に求めて,その逆行列や行列式の意味を,冗長性の問題と関係して述べた.次章

では,このような運動学関係ではなく,手先・足先に作用する力と関節に作用するトルク間の静力学関係について述べる.このことによって,床反力と関節トルク間の静力学関係をヤコビ行列で記述することができそうということに気がつくだろう.また,この章では平面運動しか述べてこなかったが,次章以降で3次元空間での身体運動のヤコビ行列について一般化していく.


補足

補足1:特異性

数学では,特異姿勢とは,逆元が0となることを特異点(singular value)と呼ぶことに由来する.なお英語で,特異性(singularity)と正則性(regular)は対の用語で,「正常に」振る舞うことを「正則な」振る舞い,その反対の正常でない振る舞いを「特異な」振る舞いと呼ぶ.したがって,non-singular = regularであり,non-regular = singularである.0での割り算は特異なふるまいとなる.

ジャイロセンサで計測した角速度の積分で,特異点近傍では角度を計算出来ないことと数学的には同じ理由である.

補足2:行列式

ここで,行列$${\bm{A}}$$の行列式$${\det \bm{A}}$$は,行列の大きさを意味し,記号で$${| \bm{A} |}$$のようにも書く.

図3:2次の行列式の幾何学的意味(平行四辺形)

2次の正方行列の大きさは,行列を構成する2つのベクトル$${\bm{a}=[a_1~a_2]^T, \bm{b}=[b_1~b_2]^T}$$を考えれば,その2つのベクトルが構成する(「$${\bm{a}}$$と$${\bm{b}}$$で張られた」という言い方をする)平行四辺形の大きさとなる.

このとき

$$
\bm{A} = \begin{bmatrix} \bm{a} & \bm{b} \end{bmatrix} =
\begin{bmatrix} a_1 & b_1 \\ a_2 & b_2  \end{bmatrix}
$$

ならば,

$$
\det \bm{A}_2 = a_1 b_2 -a_2 b_1 = |\bm{a}||\bm{b}| \cos \theta
$$

となる.ここで,$${\theta}$$は2つのベクトル$${\bm{a}, \bm{b}}$$のなす角である.証明は教科書などにゆずるが,これは$${\bm{a}}$$と$${\bm{b}}$$で張られた平行四辺形の面積$${S}$$に相当する.

これは,すでに外積

の説明でも示した.外積の大きさは2つのベクトルが構成する平行四辺形の大きさと述べた.つまり外積の大きさは

$$
|\bm{a} \times \bm{b}| = \det \bm{A}_2
$$

となる.2次元空間の行列式は2つのベクトルの張る平行四辺形の面積$${S}$$で,それが行列の大きさを意味する.

図4:3次の行列式の幾何学的意味(平行六面体)

3次の正方行列の場合は,行列を構成する3つのベクトルの平行六面体の大きさを考えればよい.

この場合も同様に,行列を構成する3つのベクトル$${\bm{a}, \bm{b}, \bm{c}}$$を考え,それを並べた行列

$$
\bm{A}_3 = \begin{bmatrix} \bm{a} & \bm{b} & \bm{c} \end{bmatrix}
$$

を考えると,この行列$${\bm{A}_3}$$の行列式$${\det \bm{A}_3}$$は,その3つのベクトル$${\bm{a}, \bm{b}, \bm{c}}$$で張られた平行六面体の大きさ

$$
\det \bm{A}_3 = | \bm{a}~\bm{b}~\bm{c} |
$$

となり,それはその体積$${V}$$となる.行列$${\bm{A}_3}$$を

$$
\bm{A}_3 = \begin{bmatrix} a_1  & b_1 & c_1 \\ a_2  & b_2 & c_2 \\ a_3  & b_3 & c_3 \end{bmatrix}
$$

とすると,それは,以下に示すたすき掛けの計算で計算することができ,

$$
\begin{aligned}
\det \bm{A}
&= a_1 b_2 c_3 +b_1 c_2 a_3 + c_1 a_2 b_3 - c_1 b_2 a_3 - a_1 c_2 b_3 - b_1 a_2 c_3
\\
&= a_1 b_2 c_3 + a_3 b_1 c_2 + a_2 b_3 c_1 - a_3 b_2 c_1 - a_1 b_3 c_2 - a_2 b_1 c_3
\end{aligned}
$$

となる.

3次正方行列の行列式の計算方法は線形代数の教科書を参照していただきたいが,解析的に解く必要がないなら,Pythonのnumpy.linalg.det()などで

import numpy as np

arr = np.array([[0, 1, 2], [-1, 2, 2], [1, -2, -1]])  # 行列
det = print(np.linalg.det(arr))  # arr の行列式
print(det)

>>> 1.0

のように解いてしまう方がはやいだろう.高次元の逆行列や行列式などの数値的な計算は,PythonやMatlabなどを利用しよう.

なお,3次以上の場合も,行列式での割り算を含むため,逆行列が計算できない場合は,行列式が0となる場合である.また,正方行列ではないと行列式を計算できないが,高次の場合も行列式は行列の大きさを意味する.

4次以上はもはや行列式,つまり行列の大きさををイメージすることはできないが,高次の行列式でもそれは行列の大きさを意味することに変わりない.ただし,行列の大きさが0ということは,多次元でもこれまで述べてきた議論から,行列を構成するベクトルが同じ方向を向くと大きさが0となることを意味するは容易に想像できる.姿勢で言えば直立状態である.そのとき,特異姿勢となり,ヒトにとっては,関節が発揮する力が0となり,最も効率の良い姿勢といえる.このこともヤコビ行列から議論ができる.

参考文献

1)伊藤,身体知システム論(ヒューマンロボティクスによる運動の学習と制御),共立出版,2005

2)細田,実践ロボット制御(基礎から動力学まで),オーム社,2019

3)梶田編著,ヒューマノイドロボット(改訂2版),オーム社,2020






スポーツセンシング 公式note
スポーツセンシング 運動習慣獲得支援サービス「FitClip」
スポーツセンシング アスリートサポート事業


【著作権・転載・免責について】

権利の帰属
本ホームページで提示しているソフトウェアならびにプログラムリストは,スポーツセンシング社の著作物であり,スポーツセンシング社に知的所有権がありますが,自由にご利用いただいて構いません.

本ページに掲載されている記事,ソフトウェア,プログラムなどに関する著作権および工業所有権については,株式会社スポーツセンシングに帰属するものです.非営利目的で行う研究用途に限り,無償での使用を許可します.

転載
本ページの内容の転載については非営利目的に限り,本ページの引用であることを明記したうえで,自由に行えるものとします.

免責
本ページで掲載されている内容は,特定の条件下についての内容である場合があります. ソフトウェアやプログラム等,本ページの内容を参照して研究などを行う場合には,その点を十分に踏まえた上で,自己責任でご利用ください.また,本ページの掲載内容によって生じた一切の損害については,株式会社スポーツセンシングおよび著者はその責を負わないものとします.


【解析・受託開発について】

スポーツセンシングでは,豊富な知見を持つ,研究者や各種エンジニアが研究・開発のお手伝いをしております.研究・開発でお困りの方は,ぜひスポーツセンシングにご相談ください.
【例】
 ・データ解析の代行
 ・受託開発
  (ハードウェア、組込みソフトウェア、PC/モバイルアプリ)
 ・測定システム構築に関するコンサルティング など
その他,幅広い分野をカバーしておりますので,まずはお気軽にお問い合わせください.

【データの計測について】

スポーツセンシング社のスタジオで,フォースプレートやモーションキャプチャを利用した計測も行えます.出力されるデータと,ここで示したプログラム(入力データの取り込み関数を少々改変する必要があるが)で,同様な解析を行えますので,まずはお気軽にお問い合わせください.