KOSAKA LABORATORY->Tips

 このBlogの一部が書籍になりました。
書籍:「WiiRemoteプログラミング」
著者:白井暁彦・小坂崇之・木村秀敬・くるくる研究室
表紙:タナカユカリ
発売:2009年7月25日 好評発売中
詳細:こちらから

内容:WiiRemoteを利用したインタラクティブ技術のプログラミング学習書

 話題の家庭用ゲーム機「Wii」の特徴的なコントローラーである「WiiRemote」をPCで使うプログラミングが注目されている。高性能な加速度センサーや赤外線センサーを持ち、Bluetooth接続が可能で、プログラミング可能なデバイスを、個人レベルで自作したり入手したりすることはできなかった。WiiRemoteの登場とともにそれが安価で手軽に入手可能になり、多くの人々が興味を持っている。

 本書は、WiiRemoteの応用に興味があるプログラミング初学者向けに、WiiRemoteをPCから扱うためのプログラミングを解説する。ハードウェア寄りのゲームプログラミング入門書として、ステップバイステップでソースコードを解説する。具体的なサンプルを開発しながら、インタラクション技術を独習できる。言語はC/C++、C#およびActionScript 3、Processingなどをサポート。

Wiiリモコン 加速度センサを使う その1

 次にWiiリモコンの加速度センサを使ったプログラミングを行っていきます。WiiリモコンにはX軸、Y軸、Z軸に対応した3軸の加速度センサが内蔵されています。



 ここでは、Wiiリモコンの加速度を取得するプログラムを作成します。

1.ラベルの作成
1.フォームにラベルを3つ貼り付けてください。
2.WiimoteLibの宣言と加速度センサ取得プログラム
Form1.csに以下の部分を追加する。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WiimoteLib;    //WimoteLib

namespace WiimoteLib_Sample {
   public partial class Form1 : Form {

      Wiimote wm = new Wiimote();                               //Wiimoteの宣言

      public Form1() {

         InitializeComponent();

         wm.WiimoteChanged += wm_WiimoteChanged;                //イベント関数の登録
         wm.SetReportType(InputReport.IRExtensionAccel, true); //レポートタイプの設定
         wm.Connect();                                         //Wiimoteの接続
      }


      //Wiiリモコンの値が変化したときに呼ばれる関数
      void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args){
         WiimoteState ws = args.WiimoteState;    //WiimoteStateの値を取得

         try {
            if (this.IsHandleCreated) {
               this.Invoke((MethodInvoker)delegate() {
                  this.DrawForms(ws);            //フォーム描写関数へ
               });
            }
         } catch { }
      }


      //フォーム描写関数
      public void DrawForms(WiimoteState ws) {
          this.label1.Text = "X軸:" + (ws.AccelState.Values.X); //加速度 X
          this.label2.Text = "Y軸:" + (ws.AccelState.Values.Y); //加速度 Y
          this.label3.Text = "Z軸:" + (ws.AccelState.Values.Z); //加速度 Z
      }

    }
}

実行

1.WiiRemoteを接続してください。

2.F5キーを押して実行してください。
  ※もしエラーが発生する場合はWiiRemoteが正しく接続されているか確認してください。

3.Wiiリモコンを振りまわしてください。
 ※飛んでいくと危険なので必ずストラップをしてください。



解説

Wiiリモコンの三軸の加速度センサの値を表示します。

         wm.SetReportType(InputReport.IRExtensionAccel, true); //レポートタイプの設定
Wiiリモコンのレポートタイプを設定します。

 

       ws.AccelState.Values.X

WiiリモコンのX軸の値を取得します。
実際にどれだけの値が出力されるか実測してみると、-5.04 ~ 5.16 の値が計測されました。

 

       ws.AccelState.Values.Y

WiiリモコンのY軸の値を取得します。
実際にどれだけの値が出力されるか実測してみると、-4.95 ~ 5.25 の値が計測されました。

 

       ws.AccelState.Values.Z

WiiリモコンのZ軸の値を取得します。
実際にどれだけの値が出力されるか実測してみると、-4.8 ~ 4.96 の値が計測されました。