立ち上がり獲得プロジェクト(作成中メモ)
2003.1.28
最終目的はロボットに意思を芽生えさせることなのだからモーション再生プログラムを作ってもしかたがない。生物はモーションを再生しているのではなく、ある目的のために動作をし、それが結果的にモーションとなる。例えば不幸にして足の長さが極端に違う人が居たとしたら、足の長さが同じ人と同じモーションでは歩かないだろう。もし人がモーション再生で動いているなら足の長さが違う人は歩けないことになってしまう。動作が洗練されるうちにモーション再生の様になったり最適化されたりすることはあるかもしれないがそれは結果である。ロボットに意思を認めるなら前提のないモーション再生は行ってはならないと思う。たとえ効率が悪いモーションであってもそれがそのロボットが生み出したモーションであればそれがそのロボットの意思の結果なのである。
「意思」と書いたが立ち上がり動作獲得と意思を直接結びつけるつもりは無い。また、言ってしまえば動作の獲得プロセスを研究するつもりも無い。ではなぜ、モーション再生を否定し前節のような書き出しとなったかと言うと、全ての動作に意味を持たせたいからである。コーディング上で全ての動作に意味を与える事ができるのであれば「獲得」プロジェクトは行う必要が無いと考えている。もっとも「発想」などの概念を考える上では「獲得」プロセスは重要であるが、今はまだ時期尚早と考えているからである。
動作に意味を持たせる事に固執する理由は、応用動作を可能にするためである。ロボットの動作を考える時、動作計画などに重きをおいた場合など、動作一つ一つの細かな部分は不確定ファクターとなるため出来るだけ排除したい。そのため、全方位移動が可能な運動機能を与えたり、不整地移動が可能なメカニズムを与えたり、または不確定な状態が無い箱庭での移動に限定するなどの処置を取る。アイボの場合、生まれながらの4足歩行ロボットであり、また生活環境は人間が生活する生活空間である。考えられない状況がいくらでも存在することが前提となっている。
その場合の対処方法として、あらゆる状況での対応策をあらかじめプログラムしておき、状況を判断してそのモーションなり動作を再生することが考えられる。しかし、これは既にロボットとは考えられない。オモチャか機械である。自律ロボットというからには新たな状況にも自らの判断で対処し、学習・自己進化する必要がある。動作の意味を知り、状況への影響を理解しておくことで不測の事態にも効果的な動作を試すことが出来、正しい対処をより早く正確に導き出すことができるようになる可能性が見出せるようになる。
アイボが座っている(伏せている)状態から立ち上がる時の動作を考える。伏せている状態は胴体部が地面に設置しており、四肢は投げ出されている格好になっている。他のポーズへの移行を考慮して四肢は前に伸ばしている状態となり、四肢のモーターへのゲインを落としても姿勢に影響がないようなリラックスした格好である。その状態から立ち姿になるということは四肢で胴体を支えて四肢を地面に対して伸ばした状態となる。例えば四肢を伏せ状態から立ち状態へ最短で移動したとする。その過程において、非常に不安定な格好を経由する。そのため、さまざまな条件によっては立ち上がることができずにひっくり返ってしまう。翻って人間で考えてみる。伏せ状態に相当するのは体育座りの状態。立ちの状態は気を付けの状態とすると、お尻が接地している状態から気をつけの状態にするには、まず、胴体の重量を足にかかるように体重移動をし、その後、足を伸ばしていって立ち上がる。つまり、重心を支持脚に移動させるプロセスがある。
これを分析すると、キーワードとしては「重心」と「安定」。この二つをパラメータ化し、フィードバック学習すれば徐々に無理の無いモーションが獲得出来るのでは無いかと考えられる。
動作の学習による習得はニューラルネットワークの利用が考えられるが、ニューラルネットワークのファジーな判断能力はいわば「小脳」的能力であるといえる。立ち上がりモーションもニューラルネットワークで習得できる可能性も有ると思うが、今回はニューラルネットワークは用いない。
ニューラルネットワークで獲得したモーションを理論的に分離抽出することが出来ないので他の用途に応用することができない。
ニューラルネットなどで適正解を見つけたあと、その解を分析分類し、理論付けることで他に応用するということが必要で、これは非常に高度で手のつけようがない。ここでは理論の表現法を考え、他に応用が効くことを前提として考えていきたい。
ポーズとフェーズ(相)
アイボが立ち上がっている状態、は(無限ではないが)非常にたくさんの形がある。だが、その全ては「立ち上がっている」条件をクリアしている以上立ち上がっているポーズの一つである。それら全てを合わせて立ち上がりフェーズと呼ぶ。
ここで、アイボがしゃがんでいる状態を考える。四肢を曲げ、胴体高さを低くして立っている状態である。この状態は立ち上がりフェーズに含まれるかどうかを考える。このしゃがんでいる状態から一般的な立ち上がり状態に移行する場合、どのような事が起こるかというと、足を順次伸ばしていく事で(逆運動学的に計算された関節角度移動ではあるが)移行が完了する。その間にアイボの安定性を脅かすものは無いといえる。たとえ移動速度を高めてもおそらく安定して移行を完了できるだろう。このような時、「同相内での移行が行われた」という。つまり、しゃがんでいる状態は立ち上がっている状態(立ち上がりフェーズ)ということができる。
次に座っている状態を考える。座っている状態と立ち上がっている状態は明らかに別のフェーズである。座っている状態を座っているフェーズと呼ぶとする。ここで、「明らかに」別のフェーズと書いたが、明らかなのは人間にとってであり、アイボからするとどうなのか。先ほどと同じように考えてみる。座っている状態からいわゆる立ち上がり状態に移行しようとした時、うまくいったり失敗したりする。移動速度が早いとうまくいく。移行先のポーズがしゃがみ状態に近ければうまくいく。など、ある条件下でだけうまく行くこととなる。
アイボにとっては立っているという意味も座っているという意味も今は理解できない。その中でアイボに動作を欲求させ、正しい動作をさせるためにここではいくつかの本能的な欲求を与えてみる。
境界相
周辺相
感覚マップ
感覚マップを充実しようとする。
座っている状態から立っている状態へ移行する手順には4種類が考えられる。
他にも考えられるが現実的ではないので省略する。
これらのいずれかを目的と動作の意味をかみ合わせながら効率的に獲得していくことを考えていきたい。
立ち上がり動作を獲得するためのプログラム構成として何が必要であるかを考えたい。このとき、一般化して考えると発散してしまい問題が難しくなってしまう恐れがある。上記に上げた4種類の場合に分けてそれぞれ具体的事例として帰納的に必要な要素を考えていく。可能であればその後に捨象的部分を取り除き、一般化して考えてみる。
以下メモ
簡単に考えると座っている状態から立った状態へ移行するには以下のプロセスが必要だと考える。
@座った状態(胴体が体重を支えている状態)
A四肢に体重がかかった状態へ移行
Bその状態を維持しつつ四肢を伸ばし、重心の高さを十分な高さまで上げる。
ここで@からAに移行する際に、アイボの関節では静的移行が無理だという問題がある。(全く無理ではない。後述)そのため、@からAに移行するには勢いをつけて行い、一気に重心移動を行う。その後、勢いを十分に殺して重心が安定した後にBの動作に入る必要がある。
これがもっともスマートと思える立ち上がり動作だが、その他にも前足から立ち上がる手順や後ろ足から立ち上がる手順・四肢を四方に伸ばし、徐々に狭めて行きながら重心高さを上げていく方法などが考えられる。(←これが唯一静的移行が可能な手段だと思う)
立ち上がり状態の判定
から立ち上がっている状態を知る。
重心
四肢に対する胴体の位置はできるだけ中心になろうとする。これはこけにくくするため・関節に対する力の最適化のための結果として導かれるものとすべきだが、ここでは条件としたい。
連続性の表現
1.経験
起こったことや行ったことがどのような結果を招くのかを学習する必要がある。これは単純な1対1ではなく、時間経過の中での関連性を発見しなければならない。この発見を行えるようなデータ形式と評価方法が必要。
2.動作
予測される立ち上がり動作は順序があるものである。例えば、座っている状態から足を動かして四肢で体重を支えるようになる。体重が四肢に移った後に足を伸ばして立ち上がる。これには順序や時間の概念が必要となる。動作の連続性とタイミングなど。
ランダムな動きから有効な動きを抽出する方法はとらない。
進化をモデリングする場合、ランダムな組み合わせや動きから有効なものを残していく方法が取られるが、これはやりたくない。
進化の果てに完成した肉体を持った生物がランダムな動きをしたりはしない。ある程度限られた動作(洗練された動作)の中からあるパラメータ(例えばタイミング)を学習するために試行錯誤に近い「訓練」を行い、最終的に効率的な動作を獲得するようにしたい。
アイボは立ち上がりたいと思っている。
アイボは立ち上がった状態を知っている。(足の状態・胴体の姿勢・肉球スイッチの状態)
アイボは座った状態を知っている。(足の状態・胴体の姿勢)
立ち上がるには座った状態の各条件を立ち上がった状態にすればいいわけだから、
@足の状態を立ち上がり状態に向けて移動
すれば良いと考える。
ところが、結果としては失敗する。
そして、考える。振り返ると、足を動かす過程で、非常に不安定な状態を経由したことを認識する。
そして、途中経過においても不安定な状態が起こらないようにしなければならないと思う。