afjkの技術メモ

主に技術系備忘録

物理エンジンで作るBio-likeness(1)

先日行った展示
Bio-likeness ー生命の片鱗ー
で展示されていたApostrophについてのツイートが@Yam_eye氏にリツイートいただき、さらに沢山の方からリツイートやファボをいただきました。
f:id:afjk:20140609003359p:plain:h400
嬉しい反面、これは大変なことになったと思いつつ、早速作ってみましょう。
使う物理エンジンはBullet。iPad上で動作する3Dアプリを想定しています。

Apostrophは外力に対抗するモーターにより、押したり持ち上げたりすると自動的に安定した姿勢になるよう動作するのですが、当然Bulletに外力に対抗するモーターという便利な物はありません。これを調べる所から始めます。

外力に対抗するモーター

Bio-likeness展での説明から、使われているモーターはCSL(cognitive sensorimotor loop)という、Dr. Manfred-Hild氏により開発されたシステムが使用されている。
Google検索すると続々とヒット。
氏はロボット工学の世界で有名な方のようです。

その中で、この論文がCSLの仕組みを分かりやすく説明されています。
英語の論文ですが、7ページほどで図も多く非常に分かりやすい。
(*この論文から数式や図を引用させていただきました。)
日本語訳版はこちら

f:id:afjk:20140609000830p:plain
f:id:afjk:20140609000853p:plain

φが任意の時間でのモーター角でuがモーターへの出力電圧。
gi、gfがそれぞれ入力ゲイン/フィードバックゲインかな。
z-1はunit delay operator。gi(t)とgf(t)の合計を遅延して加える。

f:id:afjk:20140609001616p:plain
このgiとgfの値の範囲を変える事で、CSLは4パターンの挙動に変化します。
・Release(モーターへの電圧は徐々に解放される)
・Hold Current Position(現在の角度を保持)
・Contraction(直訳だと収縮。これが外力に対抗するモーター)
・Support Motion(動きをサポート。小さな力を増幅する動作)

モーターの角度の変化量を検知して電圧を変化させ、モーターのトルクが変化する。
Contractionでは、このトルクが対抗する方向に力が加わることになる。
センサーは力を検出しているわけでは無く、力による角度の変化を検出しているわけですね。
apostrophが安定点を一旦越えて行きつ戻りつしていたのは、そのためかな?

それらしく見せるためには、遅延時間やゲインのパラメータ調整が大変そう。
...この理解で合ってるのかな?

まずはbulletで実装して試してみよう。