afjkの技術メモ

主に技術系備忘録

ペンで巻貝を描いた

久しぶりにペンで絵を描きました。
分かりにくいですが巻貝です。
f:id:afjk:20140901212557j:plain
画用紙裏面にGペン
 
実物の写真
f:id:afjk:20140901212810j:plain
構造を捉えて描く練習のため、あえてあまり無い下から覗いた構図を取りました。
この角度、主観に引っ張られないように描くのがものすごく難しい。
f:id:afjk:20140901213105j:plain
鉛筆で当たりをとりつつ下書き。
f:id:afjk:20140901213253j:plain
ペン入れ、、、ひたすらゴリゴリ描く。
f:id:afjk:20140901222148j:plain
完成。ここまで約5時間。
貝の内側と外側の質感の違いが描けたかな?
本当は一つ前の軽やかな感じで完成まで持って行きたかったのですが、そこは修正の効かない画材。手直しのたびに黒くなってしまいました。
うまくいかないものですね。
まあ、おかげで妙な存在感が出たと思うので良しとしましょう。
 
この描き方で劇画調のゴジラなど描いたら面白いかもしれません。
 

物理エンジンで作る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)を求める形に変形できました。

BulletでCSL制御を実装

100msec(6Step)ごとに計測を行い、測定した角度の変化量が(外力が働かなければ)目標角速度の1/10になると想定して実装しました。


変形CSL関数

結果


 回転軸からの距離は3、おもりの重さは1/3

動作はかなりゆっくりですが、重力に反して倒立することを確認出来ました。

これでやっとスタートライン。
今後、ロボットのパーツとなる剛体を作成し、組み立てながらパラメータを調整します。

物理エンジンで作る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で実装して試してみよう。

Twidee 3Dアップデート。ブラウザも3Dに

斬新なUIが話題のツイッターアプリ、Twidee 3D viewer for twitterがさらに進化しました。

今回の目玉は独自ブラウザ対応。
ツイート内のURLリンクをタップするとアプリ内ブラウザでページを表示します。
さらに、このページを閉じると画像としてツイートに張り付けることができます。

この機能、実は無数にある画像共有サービスに対応するための苦肉の策でした。
本アプリは投稿画像を空中に浮かべて表示出来る事が一つの売りで、そこを気に入って下さった方から「他の画像共有サービスにも対応して欲しい」と要望をいただくようになりました。
一つ一つのサービスに対応するのは難しくないのですが、本当に様々なサービスがあり、全てとなると切りがありません。
そこで、ユーザーに一手間かけてもらって、アプリ内ブラウザで表示した内容をテクスチャ化して貼り付けよう。という発想に至りました。
そうすると、当然ながら通常のページも画像として貼り付ける事が出来ます。

この、ページの内容を3D空間にクリップする機能が予想外に良い感じで、小さいながら近づけばちゃんと読めます。

どんな感じか気になる人は是非ダウンロードしてみてください。

【本日無料!】Twidee 3D viewer for Twitter【キャンペーン中】

(2014/3/17 追記 無料キャンペーンは終了しました。たくさんのダウンロードありがとうございました)
3Dでタイムライン表示するTwitterクライアント「Twidee 3D viewer for Twitter」が本日無料です。
この機会にダウンロードしてみてください。
※購入ボタンが[無料]になっていることをご確認の上、ダウンロードしてください。

https://itunes.apple.com/jp/app/3d-twitter/id796308310?mt=8
f:id:afjk:20140306081931j:plain

Twidee3Dタイムラインが読み込めない場合

以下のことを確認して下さい。

  • ご使用のiPhone/iPad/iPod touchツイッターアカウントが設定されているか。
  • 公式ツイッターアプリでタイムラインが読み込めるか。
  • 公式ツイッターアプリでツイートし、この後Twideeを再起動。更新ボタンを押し、先ほどのツイートが読み込めるか。
  • 複数アカウントを使用している場合、Twideeでのアカウントがツイートしたアカウントと一致しているか。※右上のアイコンをタッチして切り替え可能です。
  • 検索機能での任意文字での検索。
上記確認を行っても改善しない場合、メールまたはツイッターでご連絡ください。
 
※本アプリは既に複数のユーザーにご利用頂いているものですが、稀にタイムラインが読み込めない場合がございます。
現在原因調査中ですが、個人開発のため全てのデバイス、ネットワーク環境の組み合わせを試すことは難しく、行き届かない点があるかと思います。
近日中に無料版(広告あり)を公開しますので、不安な方はそちらをお待ち下さい。