2008-02-20[n年前へ]
■Wiiリモコンの加速度センサで姿勢検知
PC+加速度センサを使ったアプリケーションを作ろうとする場合、12インチでSXGA+程度の高解像度ディスプレイを備えたTabletPCを念頭に置いて作ることが多い。手に持つことができて、低解像度のデバイスでなく、姿勢検知センサを積んでいる…つまり、Lenovo(旧IBM) Thinkpad のX60Tか、ToshibaのPortegeという機種である。とはいえ、もちろん、その他のPCでも色々と位置・姿勢検知をして、それに応じた各種処理をして遊んでみたくなったりもする。
そこで、Wiiのリモコンを手に入れた(ありがたいことにハイヨとくれた人がいた)。加速度センサや赤外線センサを積んだWiiリモコン、つまりは、センサの塊であるWiiリモコンを使えば色んなことができる。…というわけで、下に貼り付けたのは、WiinRemote.exeによるWiiリモコンのセンサ取得例である。
こういったWiiリモコンを使った姿勢取得例のように、Wiiリモコンのセンサ取得APIを使うこともできる(もちろんThinkpadの加速度センサなどを使うことも出来る)汎用の加速度・姿勢検知用のクラスを作っておくことにしてみた。これで、Lenovo や Toshiba以外のPCでも使うことができるアプリケーションを汎用的に作る・使うことができるだろう。また、Thinkpadのような2軸加速度センサ搭載機よりも1軸多い3軸加速度(姿勢)を使うことで、色んな計算が楽になるかもしれない。
2008-02-21[n年前へ]
■Wiiリモコン接続のための四苦八苦
Thinkpad T60p付属のBluetoothインターフェース(を操作するドライバソフト)では、Wiiリモコンと接続することができなかった。Bluetooth接続の際のセキュリティをどう変えてみても、接続時にPINコードを要求されてしまったからである。ドライバを入れ替えれば良いのかもしれないが、内臓ハードのドライバはあまりいじりたくない。
そこで、USB-Bluetoothインタフェースを購入してみた。しかし、こちらの製品でも、セキュリティレベルに関わらず接続時にPINコードを要求されてしまう。そこで、今度はこの製品用のドライバを入れ替えてみたところ、ついにPINコード無しでも接続できるようになった。そういった紆余曲折があって、ようやく昨日の「Wiiリモコンの加速度センサで姿勢検知」に辿りついたのだった。
Thinkpad 内臓BluetoothインターフェースでWiiリモコンを使うことができない人がいたら、「少なくともUSB接続BluetoothアダプタBT-MicroEDR2を買って、最新ドライバを入れ直せば」Wiiリモコンを使うことができる可能性が高い、と思います。
2008-03-27[n年前へ]
■MacBookの加速度センサをMathematicaで使う
Ver.6 では、ノート型 Macintoshの傾斜センサ値を Manipulate 関数の入力として 使うことができる、という話。
下記を評価して,表示される出力セルをマウスで選択してから,MacBook を傾けるとリアルタイムで反応します。加速度センサの情報は、
pt = v = {0, 0};
rng = 10;
rad = 3;
k = 0.7;
ControllerManipulate[ v += -0.03 {Sin[px Pi/4], Sin[py Pi/4]};
pt += v;
{pt, v} = Transpose[MapThread[ If[#1 >= rng, {rng - k (#1 - rng), -k #2}, If[#1 <= -rng, {-rng + k (-rng - #1), -k #2}, {#1, #2}]] &, {pt, v}]]; Graphics[{Circle[{0, 0}, rad], If[Norm[pt] < rad, Hue[0.65], Hue[0]], PointSize[0.04], Point[pt]}, ImageSize -> 200, PlotRange -> rng], "X" -> {{px, 0}, -1, 1}, "Z" -> {{py, 0}, -1, 1}, ControllerMethod -> "Absolute", ControllerPath -> "Sudden Motion Sensor"]
ControllerInformation[]でわかるという。
2008-05-30[n年前へ]
■(加速度センサ対応)体感・実感バストシミュレータを作る
体感・実感バストシミュレータを作ってみました。アプリケーションのウィンドーを揺らしたり、(もしThinkpadユーザなら)PCを揺らしたりすると、その振動に応じた変形を計算・表示するというシミュレータです。下の動画はその(Windows上で動作する)アプリケーションを動かしている例になります。マウスでウィンドーを動かすと、その力(加速度)に応じた複雑な変形が生じたりすることが見て取れると思います。
また、Thinkpadを持ち上げ、傾けてみたり・揺らしてみたりすると、その動きに対応する変形が生じるので、まるでバーチャルリアリティのようにその変形の因果関係を体感できるかもしれません。端的に言ってしまえば、このアプリケーションを動かしつつ胸の前でThinkpadを持って体を動かすと、その動きに応じた変形シミュレーション計算結果を刻々表示(レンダリング)する、なんていう遊びもできるわけです。
不可思議に見える動きでも、案外こんな実験をしているうちに、その因果関係を実感・納得できるかもれいません。それが、「体感バストシミュレータ」だったりすると、ナニな感じは漂いますが、そんなクダらなさがこのサイトの一つの特徴でもあるので、(色々な視点から眺めた下の動画でも)適当に流し見しつつ・楽しんで頂けたら幸いです。
このアプリケーション(バイナリ実行ファイル)はここに置いてあります。計算部はC++で適当・速攻で作り、(皮膚からの表面張力を働く)弾性・塑性的な性質を持つPartcleクラスを多数保持するBodyクラスにより、変形状態が計算される、という具合です。書き飛ばした部分を整理し、C++ Bodyクラスのソースも近々置いてくことにしようと思っています。
2008-06-01[n年前へ]
■(加速度センサ対応)体感・実感バストシミュレータのC++クラスソース
「(加速度センサ対応)体感・実感バストシミュレータを作る」のC++クラス・ソース(及びバイナリ)を置いておきました。本当に行き当たりばったりに書いたので、とても乱雑で汚く・遅い代物です。なお、使い方はこんな具合になります。
Body body;中身は、粒子郡を拘束力で適当に包むと同時に外力を与えているというようになっていて、金子さんの水粒子プログラムの単純版です。
body.move();
float *mesh=body.fMesh;
for(int y=-40;y<=40;y++)
for(int x=-40;x<=40;x++,mesh++)
//SurfacePlot(x, *mesh, y);
// この*meshに高さが入っている