Hatena::ブログ(Diary)

オートマティスム的無甲斐性 RSSフィード Twitter

2012-03-31

WiiリモコンのデータをOSCurator経由でProcessingに送る方法

f:id:metya1013:20120331111536p:image:w360

WiiリモコンとOSCuratorをつなぐ

OSCuratorダウンロード

Wiimoteを押すと右にサイドバーがでてくるので、[Start Sync]押す。

同時にWiiリモコンの1,2ボタンを同時押しするとSyncが始まる。(Bluetoothを使うのでONにしておくこと)

適当にボタンを押していくと左の欄に押したボタンに対応したパスがでてきます。(Motion Plusは未確認)

OSCを使って送信先を指定する

Event Typeをすべて[OSC Routing]にし、Valueのところで[New]を選択。

Parameters画面が表示されるので#1に localhost:9000 と記述して送信先を指定する。(自分のMac内で通信するとき)

f:id:metya1013:20120331114413p:image:w360

前の画面に戻ってValueを[D]に設定すれば、左の箱の色が緑色になるはず。

ProcessingOSCライブラリを入れる

oscP5ダウンロード(.zip)して、解凍したフォルダを書類(Documents)にあるProcessingのlibraliesフォルダにいれる。(libraliesフォルダがない場合作る)

Processingを起動している場合は再起動すること。

通信するためにコードを書いていく

OSC通信を受信するために実際にProcessing上にコードを書いていく。

import oscP5.*;
import netP5.*;

OscP5 osc;

float pitch;
float roll;
float yaw;
float accel;

void setup() {
  size(400, 400);

  // 受信用 OSCuratorで設定した送信先の番号
  osc = new OscP5(this,9000);
  
  // osc.plug(this, "変数名", "パス")
  osc.plug(this,"pry","/wii/1/accel/pry");
  osc.plug(this,"pitch","/wii/1/accel/pry/0");
  osc.plug(this,"roll","/wii/1/accel/pry/1");
  osc.plug(this,"yaw","/wii/1/accel/pry/2");
  osc.plug(this,"accel","/wii/1/accel/pry/3");

  // 描画用
  background(255);
  smooth();
  noFill();
  stroke(0);
}

void pry(float _pitch, float _roll, float _yaw, float _accel) {
  pitch = -1 * (_pitch - 0.5);
  roll = _roll - 0.5;
  yaw = _yaw - 0.5;
  accel = _accel;

}

void draw(){
  background(255);
  ellipse(width/2 + width*roll, height/2 +  height*pitch, 20, 20);
  print("pitch: "+pitch);
  print(" roll: "+roll);
  print(" yaw: "+yaw);
  println(" accel: "+accel);
}

これを書いた上でRunして、Wiiをいろんな方向(3方向)に回転させてみると◯が対応した方向に移動するはずです。(pitchとrowのみ)

pitch,roll,yawはそれぞれの回転軸との傾きの値をとります。(範囲は0から1)

f:id:metya1013:20120401125719j:image:w360

Wiiリモコンそのものが大きいですが、うまく使えば回転方向を利用したデバイスを作れます。

accelはWiiリモコンの動く速さを取るので、降った時の速さを利用した指揮棒なんかもつくれそう。

最近ではトイレットペーパーの芯にWiiリモコンをつけて回転する速さを取ったりしてます。

その様子(facebook)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証