ホーム » 2010 » 9月 » 15

日別アーカイブ: 2010年9月15日

2010年9月
 1234
567891011
12131415161718
19202122232425
2627282930  

検索・リンク

Wiimote.pdeにIRセンサー取得を追加

ProcessingでWiiリモコンを使う方法で、WiiFlashを使って加速度などの基本値はとれるようになったけど、 「IRイメージセンサの座標が取れない」との質問。 仕方がないので、WiiFlashのソースコード"Window1.xaml.cs"をざら読み。 ネットワークに取得値を書き込んでいる所のコードを眺めて、 以下のような追加をすればいいことが分かった。

class Wiimote {
...略...
void update() {
boolean dataHasCome = false;
while (client.available() > 80) {
if (buffer == null) {
buffer = new int[80];
}
for (int i = 0; i < 80; i++) {
buffer[i] = client.read();
}
dataHasCome = true;
}
if (buffer == null || !dataHasCome) {
return;
}
bufferPos = 1;
batteryLevel = (float)readByte() / 0xC8;
updateButtons(readShort());
x = readFloat();
y = readFloat();
z = readFloat();
extensionType = readByte();
/** IRセンサー added by T-Saitoh **/
bufferPos += 21 ;
ir0  = readByte() ;    // 1つ目のIRセンサーが値をとれた
ir0x = readFloat() ;   // 1つ目のX,Y
ir0y = readFloat() ;   // (9/15)readShort()->readFloat()修正
ir1  = readByte() ;    // 2つ目のIRセンサーが値をとれた
ir1x = readFloat() ;   // 2つ目のX,Y
ir1y = readFloat() ;
}
...略...
/** 拡張タイプ */
int extensionType;
/** 各ボタン */
Button one = new Button();
: 略...
Button right = new Button();
/** バッテリーの残量 */
float batteryLevel;
/** 加速度 */
float x, y, z;
/** IRセンサー added by T-Saitoh **/
int   ir0 ;
float ir0x , ir0y ; // (9/15)int->float修正
int   ir1 ;
float ir1x , ir1y ;
...略...
}

# 初心者学生さんに、『WiiFlashのコード嫁!!』 とは言えんか…

cvWaitKey(1)がダメとな…

画像処理によるロボット制御のネタで、 学生さんのコードで、OpenCV使っているんだけど、 画像データは取得できているのに、cvShowImage() で画像が表示されない。 訳が解らず、ほとんどのコードをコメントアウトしたのに動かない。 カメラ画像もそれなりにリアルタイムに変化する値もとれている。 Webに載っている cvQueryFrame() + cvShowImage() のサンプルコードなら 簡単に動いた。見比べてみると、画像読み込みループの中の、cvWaitKey()の違いだけ。

cvWaitKey()の引数は、キー入力がタイムアウトするまでの時間[msec]で、 学生さんのコードでは1msecとなっていた。べつに支障が無いと思うのだが、 「ともかく動作検証。動作サンプルが5msecで動いたし」ということで、 cvWaitKey(5)に変更したら動いた…..うーむ….なぜだ….

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー