3次元空間の運動を表現する変数は6次元ベクトルになる.すなわち,x軸方向・y軸方向・z軸方向の並進,x軸まわり・y軸まわり・z軸まわりの回転である.したがって,関節自由度が6であれば冗長自由度はなくなり,ヤコビアンは正方行列になる.
ところが,人間の上肢の関節自由度は7自由度あり,そのため手先の位置と方向を決めても自由に腕を動かすことができる.このとき実に様々な姿勢をとることができるが,冗長自由度のおかげで作業空間における手先運動の要求を満たしつつ,障害物回避や特異点回避などの姿勢をとることができるのである.
冗長でなければ与えられた関節トルクτとつり合う手先力Fは常に存在するが,冗長な場合は関節トルク空間を覆うことができないので必ずしも存在するとは限らない.
たとえば,τを7×1の関節トルクベクトル
τ=(t1,t2,t3,t4,t5,t6,t7)’
とすると,冗長でなければtiは
timin≦ti≦timax
なる直方体領域をわたるが,冗長な場合は関節トルク空間に制限がかかるので,この直方体領域すべてをカバーすることはできず有界な多面体(polytope)となるのである.
今回のコラムでは,冗長度を考慮に入れてこの多面体のすべての頂点を求めてみることにした.すなわち,以下に掲げる多面体の頂点検索方法は本シリーズの解決篇ということになる.
===================================
【1】問題点の整理
τ=J’F
という関係式を考えます.ここで,Fは6×1の手先力ベクトル
F=(f1,f2,f3,f4,f5,f6)’=(F1,F2)’
で,F1=(f1,f2,f3)’が手先力,F2=(f4,f5,f6)’がモーメント.また,τは7×1の関節トルクベクトル
τ=(t1,t2,t3,t4,t5,t6,t7)’
であって,tiは
timin≦ti≦timax
なる直方体領域をわたります.Jは6×7のヤコビ行列です.
冗長でなければJの逆行列が一意に定まるため,
τ=J’F
F=(J’)^(-1)τ
が成り立ちます.
冗長な場合は,左からJをかけると
Jτ=JJ’F
JJ’は正方行列ですから,逆行列(JJ’)^(-1)が定義できて
F=(JJ’)^(-1)Jτ
したがって,(JJ’)^(-1)JがJ’の逆行列の役割をすることがわかります.そこで,J’のムーア・ペンローズ行列(疑似逆行列)を(J’)~と書くことにすると
(J’)~=(JJ’)^(-1)J
すなわち
F=(J’)~τ・・・・・・・(2)
となります.Jは6×7のヤコビ行列であって,(J’)~はその転置行列のムーア・ペンローズ行列を表します.これより(J’)~も6×7行列となります.
ところが,ムーア・ペンローズ行列には次のような欠点があります.F→τ→Fと写像する場合,
(JJ’)^(-1)JJ’=(J’)~J’=I(単位行列)
となって元のFの値にに戻るのですが,τ→F→τと写像する場合には,
J’(JJ’)^(-1)J=J’(J’)~≠I(単位行列)
となって元に戻るとは限らないのです.元に戻らない場合があるので「疑似逆行列」と呼ばれているのですが,逆行列の標準的な定義は,行列が正方行列ではない場合あるいは特異行列の場合には成り立たないのです.
(その3)までは疑似逆行列解
F=(J’)~τ (J’)~=(JJ’)^(-1)J
を求めてみたのですが,この解は目的関数の2乗和を最小にする解ではあっても,一意でなく任意性
F=(J’)~τ+(I−(J’)~J’)η
ηは任意の7次元ベクトル
があることが欠点です.このことは,左からJ’をかけると
J’F=J’(J’)~τ+(J’−J’(J’)~J’)η=τ
となり,
F=(J’)~τ+(I−(J’)~J’)η
が一般解となっていることが確かめられます.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
冗長の場合でもFからτは一意に定まりますが,Jの逆行列が一意に定まらないため,τからFは一意に定まりません.しかし,冗長な場合でも1対1の対応であるため,元の値と何らかの関係(幾何学的な関係)はあるはずです.
元には戻るためには
J’(JJ’)^(-1)J=J’(J’)~=I
となることが必要ですが,そこでJの階数(ランク)をrとしてJを特異値分解(SVD)してみることにします.
J=UΣV’
U=[U1,U2]=[u1,・・・,ur|ur+1,・・・,u6],uiは6次元ベクトル
V=[V1,V2]=[v1,・・・,vr|vr+1,・・・,v7],viは7次元ベクトル
Σ=[D|0]
[−+−]
[0|0]
D=diag(σ1,・・・,σr),diagは対角行列の意
U,Vは直交行列ですから
J’=VΣ’U’,U’U=UU’=I,V’V=VV’=I
より
JJ’=Udiag(σ1^2,・・・,σr^2)U’
と固有値分解され,
(JJ’)^(-1)=U’diag(1/σ1^2,・・・,1/σr^2)U
J’(JJ’)^(-1)J=VV’=I
となり,特異値分解を用いると元に戻ることがわかります.
また,この結果より,ヤコビアンが特異値分解
J=UΣV’
されている場合は,疑似逆行列を
J~=VΣ~U’
と定義されたものとして扱うことが可能であることが理解されます.
J~J=VΣ~U’UΣV’=VV’=I
以上のことより
VV’=I
なるVを定める問題に帰着されたというわけです.
[補]特異値分解を用いると元に戻るのは,非正方行列の取り扱いに馴れていない小生にとっては摩訶不思議なことであり,まるでトリックでも見せられている感じがします.量子物理学において特異点を打ち消し無限大になるのを抑えながら計算する非常に巧みな方法がありますが,それに類似していると感じられるのです.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
そこで,特異値分解の求め方を示しますが,実質的にはU1,V1,Dだけが関与し
J=U1DV1’,U1’U1=I,V1’V1=I
ですから
J’JV1=D^2V1
が成立します.
この形はA=J’Jに対する固有値問題(Ax=λx)と等価であって,ヤコビアンの特異値分解により容易にr本の直交する7次元基底ベクトルを得ることができます.すなわち,冗長性を考慮すると7次元の関節トルク空間が本質にr本の直交する7次元基底ベクトルで張られる部分空間に退化することになります.そしてとりもなおさずこの部分空間がわれわれの求める有界な多面体(polytope)というわけです.
また,これまでみてきたように,この多面体は
τ=J’F・・・・・・・(1)
F=(J’)~τ・・・・・・・(2)
(1),(2)式どちらをも満足しますから,(1),(2)式で解の一意性が成り立つような(τからFが一意に定まる)関節トルク空間となっています.そこで(1),(2)どちらをも満足するτ空間の頂点をはじめに探索し,その結果を(2)に代入してF空間の頂点を求めて最終的に凸包することにします.
階数は正射影の場合r=6ですが,F2=(f4,f5,f6)’=0なる切り口を求める場合にはr=3となるだけで,考え方自体は正射影の場合とまったく同じになります.
[補]老婆心ながら申し添えておきますが,コラム「ロボットアームと6次元楕円体」で紹介した楕円体の描写では,
‖τ‖≦1→τ’τ≦1(7次元楕円)→F’JJ’F≦1(6次元楕円)
JJ’は6×6行列ですから,
JJ’=Udiag(σ1^2,・・・,σr^2)U’
と固有値分解され,これにより6次元楕円F’JJ’F≦1の楕円半径や配向が定まります.
その際,6次元楕円の正射影を求める問題と切り口を求める問題では考え方が表裏の関係にあると感じられたかもしれません.しかし,6次元楕円の正射影を求める=6次元楕円の6次元切り口を求めてから2次元平面へ正射影する,6次元楕円の切り口を求める=6次元楕円の3次元切り口を求めてから2次元平面へ正射影する,・・・,階数rの場合は6次元楕円のr次元切り口を求めてから2次元平面へ正射影すると考えることができるのであって,正射影も切り口もまったく同じ図式,同じ論法になっていることが理解されます.
また,冗長な場合の楕円体の場合には,J~J=Iがついて
τ’J~Jτ≦1(7次元楕円)
と表されるのですが,これは
F’JJ~JJ’F≦1 → F’JJ’F≦1
となって冗長でない場合と一致します.直観的にいえば,6次元楕円F’JJ’F≦1は関節トルク空間の7次元楕円τ’J~Jτ≦1の6次元切り口を手先力空間へ射影したものと考えられるというわけです.
===================================
【2】多面体のすべての頂点を求めること
ここまで到達できれば,あとはプログラム作りだけの問題となります.この多面体の頂点の座標をすべて漏れなく求めることにしましょう.そのためには7本の基底ベクトルで張られる直方体領域とr本の基底ベクトルで張られる空間の交点を求めることになるのですが,多面体は連立1次不等式
Σaijxj≦bi
を満たす点の集合ですから,シンプレックス法を用いて頂点を探索する必要があるのではないかと考えられました.
そうなれば評価関数をどのように設定したら求めたい領域を得ることができるのか,そのための評価関数の設定が難しく,特に高次元の場合,領域を漏れなく探索するのはかなりの難問だと思われました.しかし,結論を先にいうと冗長な場合は(式の数)>(変数の数)なのでシンプレックス法は不要となり,この領域を漏れなくかつ短時間で求めるプログラムを作成することができました.
7次元の場合をイメージするのは難しいので,3次元の場合について説明することにしますが,
(1)r=2では,3次元の直方体領域と2本の基底ベクトルで張られる平面の交点を求めることになる.この2次元平面は3次元直方体の辺(1次元)と交わるが,辺は2つの面の共通集合であって,最大値・最小値をとるパラメータ数は2である.
(2)r=1では,3次元の直方体領域と1本の基底ベクトルで張られる直線の交点を求めることになる.この1次元直線は3次元直方体の面(2次元)と交わるが,面では最大値・最小値をとるパラメータ数は1である.
このことから演繹すると,7次元の場合
(3)7次元の直方体領域とr本の基底ベクトルで張られる空間の交点を求めることになる.この空間は7次元直方体の(7−r)次元面と交わるが,そこでは最大値・最小値をとるパラメータ数はrである.
V1(7×r行列)で張られる関節トルク空間は
τ=a1v1+a2v2+・・・+arvr
と書けますから,以上のことより
τ=V1a
V1 =[V11]
[−−]
[V12]
V11(r×r行列),V12((7−r)×r行列)
τ=(τ1,・・・,τr|τr+1,・・・,τ7)’=(T1,T2)’
のうち,T1に最大値timax・最小値timinの組,たとえば,
Tr=(t1max,t2min,・・・,tr-1max,trmin)
を割り当て
V11a=Tr
から交点aを求め,他の交点
V12a
が7次元直方体の領域内で交わるかどうかを判定すればよいことになります.
その際,7個の式からr個の式を選び出す組合せ数は7Cr通り,r個の式への最大値・最小値の割り振りは2^r通り,これらをすべて組み合わせて交点かどうかを判定すれば多面体のすべての頂点が求まることになります.
最終的には,こうして求められたτから
F=(J’)~τ
によって手先力空間Fが得られることになります.前述したように,一度
τ=J’F
用いてτを求めてしまえば,冗長であろうとなかろうと
F=(J’)~τ
式の解は一意に定まるのです.
以上のようにすると,冗長の場合でもτからFが一意に定まる関節トルク空間のすべての頂点が探索されたことになります.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[補]7次元直方体の(7−r)次元面の数は
2^r7Cr
で与えられます.交点の数はつねにこれより少ないというわけです.この値は多面体の頂点の個数に対する評価としては大きすぎると感じられるかもしれません.しかし,実際には7Crを選び出す計算は非常に短時間で済みますし,2^rを選び出す方法は2^(r-1)に改善することができます.
一般に,fkをn次元多面体のk次元面の数とし,
(f0,f1,・・・,fn-2,fn-1)
を構成要素とするn次元正多胞体では,組み合わせ的方法によって,k次元胞数fkが求められます.たとえば,正単体では
fk=(n+1,k+1)
なのですが,k=n−1のときfk=n+1であって,胞数はn+1と計算されます.同様に,双対立方体では
fk=2^k+1(n,k+1),k=n−1のとき,fk=2^n
立方体では
fk=2^n-k(n,k),k=n−1のとき,fk=2n
となります.
もちろん,
正単体:fk=(n+1,k+1)
双対立方体:fk=2^k+1(n,k+1)
立方体:fk=2^n-k(n,k)
はオイラー・ポアンカレの定理:
f0−f1+f2−・・・+(−1)^(n-1)fn-1=1−(−1)^n
すなわち,nが奇数なら2,偶数なら0を満たします.この定理は正多胞体に限らず,n次元凸多胞体について常に成立します.
===================================
【3】実行例
プログラムを実行すると,最初に正射影,次に切り口が描写されます.それぞれ多面体と楕円体が描かれますが,両者を比較しやすいよう配慮したものです.
多面体は
τ=J’F
の係数をfor〜nextループで小刻みに変えること(マッピング)によっても得られます.それにはもちろん莫大な計算時間がかかりますが,・・・.ここで描いた正射影も切り口もマッピング計算で得られる値と一致しました.また,この方法で求められる領域は(1),(2)式も同時に満たされるため,疑似逆行列解
F=(J’)~τ
よりも小さな領域となっていることも確認されています.
===================================
【4】雑感
シンプレックス法を用いると検索漏れを防ぐことが難しいのではと思われましたので,別の方法を考え出しました.私の考えた方法は至極簡単なもので,多面体の頂点だけマッピングするという単純な発想です.
(n,m)=(3,2)の場合を見ていてシンプレックス法が不要であることに気づき,前述の方法で解けるのではというアイディアが浮かびました.それを(3,1)にしたり,(7,6)にしたり・・・.多分,大丈夫だろうとは思っておりましたが,実際に解けるかどうかはやってみなければわからない.プログラムを作る際には疑心暗鬼になったりもしましたが,見事に計算できることがわかりました.
いわれてみれば誰でもわかるコロンブスの卵のようなものですが,何でこんな簡単な方法が思いつかなかったのか,いま思うと不思議です.これでやっと擬似逆行列解でない解が得られたので私もほっとしています.
今回作成したプログラムの新規なる点を挙げろといわれれば,まず,高速計算可能ということです.最近のマシンならば三面図であっても1分以内に描けるでしょうから,これでデータを取りながらほぼリアルタイムでの多面体解析が可能になるものと思われます.
もう一点,新規性についてアピールしておくと,冗長な場合でも多面体の頂点探索と正射影・切断面の取り扱いが可能となったのですが,楕円体では冗長であってもなくても正射影と切り口は変わりませんから,これで冗長な場合の
(多面体,楕円体)×(正射影,切り口)
のすべての組み合わせの描写法が揃ったことになります.比較しやすいようにとの配慮から,前掲の実行例ではこれらすべてを描いています.
最後に,楕円体と多面体の性能比較をしておくと
楕円体 多面体
計算速度 高 低
計算精度 低 高
となります.すなわち,楕円体はあくまでも多面体の近似と考えられるわけですが,多面体よりも指向性を把握しやすいというメリットもあります.
楕円体 多面体
冗長性 無関係 関係
指向性 見やすい 見にくい
また,楕円体は生体向き,多面体はロボット向きともいえますが,先日,楕円体が手術用ロボットに応用されるようになったという話を聞き及び,このHPで紹介した楕円体や多面体の描写法が使われるようになるのはうれしいことと感じています.コラム
「ロボットアームと6次元楕円体」
「ロボットアームと6次元直方体」
「高次元の正多胞体」
も併せて読まれることをお勧めします.
===================================