ペンで巻貝を描いた
物理エンジンで作るBio-likeness(2)
ようやくBulletでCSL”らしき"モーター制御の実装が出来ました。
”らしき”と書いたのは、一部推測および独自解釈しているためです。
Bulletでのモーター制御
いくつか方法がありますが、今回はヒンジ関節btHingeConstraintを用い、この関節を角速度を指定して回転させます。
enableAngularMotor(bool enableMotor,btScalar targetVelocity,btScalar maxMotorImpulse)
enableMotor :モーターの有効/無効
maxMotorImpluse:最大トルク
targetVelocity :目標角速度
CSLの式を目標角速度を得る形に変形する
前回紹介した参考論文に記載されているCSLの式のアウトプットはモーター電圧です。
そのため、上記関数へ適用するにはこの式を目標角速度を求める式に変形する必要があります。
u(t) = -gi*φ(t) + [gi*φ(t) + gf*u(t)]Z-1
φ:モーター角
u:モーターへの出力電圧
gi:入力ゲイン (> 0)
gf:フィードバックゲイン(> 1)
z-1:単位遅延演算子
式を変形する
u(t) = -gi*φ(t) + gi*φ(t-1) + gf*u(t-1)
u(t) = gi*Δφ(t) + gf*u(t-1)
ここで、使用するモーターを電圧に対しトルクは一定で回転速度は比例するものと仮定します。
測定結果としての角度変化量をΔφ1(t)、電圧u(t)により変化させる目標値としての角度変化量をΔφ0(t)とすると
u(t) = K*Δφ0(t)
※Kは比例定数
K*Δφ0(t) = -gi*Δφ1(t)+gf*K*Δφ0(t-1)
Δφ0(t) = -gi/K*Δφ1(t)+gf*Δφ0(t-1)
これで、入力:測定角速度Δφ1(t)と前回の目標角速度Δφ0(t-1)から、
出力:目標角速度Δφ0(t)を求める形に変形できました。
結果
回転軸からの距離は3、おもりの重さは1/3
動作はかなりゆっくりですが、重力に反して倒立することを確認出来ました。
これでやっとスタートライン。
今後、ロボットのパーツとなる剛体を作成し、組み立てながらパラメータを調整します。
物理エンジンで作るBio-likeness(1)
先日行った展示
Bio-likeness ー生命の片鱗ー
で展示されていたApostrophについてのツイートが@Yam_eye氏にリツイートいただき、さらに沢山の方からリツイートやファボをいただきました。
嬉しい反面、これは大変なことになったと思いつつ、早速作ってみましょう。
使う物理エンジンはBullet。iPad上で動作する3Dアプリを想定しています。
Apostrophは外力に対抗するモーターにより、押したり持ち上げたりすると自動的に安定した姿勢になるよう動作するのですが、当然Bulletに外力に対抗するモーターという便利な物はありません。これを調べる所から始めます。
外力に対抗するモーター
Bio-likeness展での説明から、使われているモーターはCSL(cognitive sensorimotor loop)という、Dr. Manfred-Hild氏により開発されたシステムが使用されている。
Google検索すると続々とヒット。
氏はロボット工学の世界で有名な方のようです。
その中で、この論文がCSLの仕組みを分かりやすく説明されています。
英語の論文ですが、7ページほどで図も多く非常に分かりやすい。
(*この論文から数式や図を引用させていただきました。)
日本語訳版はこちら
φが任意の時間でのモーター角でuがモーターへの出力電圧。
gi、gfがそれぞれ入力ゲイン/フィードバックゲインかな。
z-1はunit delay operator。gi(t)とgf(t)の合計を遅延して加える。
このgiとgfの値の範囲を変える事で、CSLは4パターンの挙動に変化します。
・Release(モーターへの電圧は徐々に解放される)
・Hold Current Position(現在の角度を保持)
・Contraction(直訳だと収縮。これが外力に対抗するモーター)
・Support Motion(動きをサポート。小さな力を増幅する動作)
モーターの角度の変化量を検知して電圧を変化させ、モーターのトルクが変化する。
Contractionでは、このトルクが対抗する方向に力が加わることになる。
センサーは力を検出しているわけでは無く、力による角度の変化を検出しているわけですね。
apostrophが安定点を一旦越えて行きつ戻りつしていたのは、そのためかな?
それらしく見せるためには、遅延時間やゲインのパラメータ調整が大変そう。
...この理解で合ってるのかな?
まずはbulletで実装して試してみよう。
無料版 Twidee 3D viewer for Twitter 公開
Twidee 3Dアップデート。ブラウザも3Dに
斬新なUIが話題のツイッターアプリ、Twidee 3D viewer for twitterがさらに進化しました。
今回の目玉は独自ブラウザ対応。
ツイート内のURLリンクをタップするとアプリ内ブラウザでページを表示します。
さらに、このページを閉じると画像としてツイートに張り付けることができます。
この機能、実は無数にある画像共有サービスに対応するための苦肉の策でした。
本アプリは投稿画像を空中に浮かべて表示出来る事が一つの売りで、そこを気に入って下さった方から「他の画像共有サービスにも対応して欲しい」と要望をいただくようになりました。
一つ一つのサービスに対応するのは難しくないのですが、本当に様々なサービスがあり、全てとなると切りがありません。
そこで、ユーザーに一手間かけてもらって、アプリ内ブラウザで表示した内容をテクスチャ化して貼り付けよう。という発想に至りました。
そうすると、当然ながら通常のページも画像として貼り付ける事が出来ます。
この、ページの内容を3D空間にクリップする機能が予想外に良い感じで、小さいながら近づけばちゃんと読めます。
どんな感じか気になる人は是非ダウンロードしてみてください。
【本日無料!】Twidee 3D viewer for Twitter【キャンペーン中】
Twidee3Dタイムラインが読み込めない場合
以下のことを確認して下さい。