WiiリモコンとMATLABの連携(WiiLABを使用)

PTBとは関係がありませんが、WiiリモコンをMATLABで扱う方法をご紹介します。

WiiLABというライブラリーが公開されています。今回はこのライブラリーを使って動作確認を行いました。ただしライブラリーの開発が停止しているようで、対応しているWiiリモコンやMATLABのバージョンに制約があるようです。またMacでは動作しません。

Wiiリモコンは初期の物でないと動作しないようです。Wiiリモコンプラス(Wii MotionPlus INSIDE)では動作しませんでした。

MATLAB 2007a 以降を使っている場合は、こちらで公開されているWiiLABを使用する必要があります。バランスボードを使用する場合も、こちらのWiiLABを使用します。

こちらの下のほうに、64ビットに対応したWiiLABも公開されていますが、おそらくMATLAB 2007a 以降では動作しません。基本的に32ビットのWindowsを使うほうがよいと思われます。(私が動作確認したのは、Windows 7 の32ビット版、MATLAB 2015b でした)

WiiLABのインストール方法(Windows 7 の32ビット版を前提とします)

  1. こちらより、WiiLab_2007aCompat.zip をダウンロード
  2. ZIPファイルを右クリック「プロパティ」を開く。「全般」タブの下の方に「セキュリティ」とあり、「ブロックの解除」ボタンがある場合はこれをクリック。OKボタンを押して閉じる。
  3. あらためてZIPファイルを右クリック、すべて展開。
  4. 展開したフォルダを、WiiLAB_2007aCompat -> WiiLAB_Matlab -> WiimoteFunctions -> @Wiimote とたどる。
  5. Wiimote.m を開き、310行目の buttons = の行からbooleanを削除。buttons = wiimote.wm.GetButtonState(); とする。(booleanのキーワードで検索すると便利)
  6. 同様に431行目の buttons = の行からbooleanを削除。buttons = wiimote.wm.GetNunchukButtonState(); とする。
  7. WiiLab_2007aCompatフォルダに移り、InstallWiiLabを右クリック「管理者として実行」。これによって、CドライブのProgram Files にWiiLABというフォルダができますが、この段階ではまだファイルがコピーされていません。
  8. C:¥Program Files¥WiiLABを開き、その中にある3つのフォルダ(WiiLAB、WiiLAB_Matlab、WiiLABTest)を手動で削除します。
  9. 展開したWiiLab_2007aCompatの中から、WiiLABとWiiLAB_Matlabの2つのフォルダを、C:¥Program Files¥WiiLABの中にコピーします。
  10. 再度、InstallWiiLabを右クリックして「管理者として実行」。背景が黒のウィンドウで「型は正常に登録が解除されました」というメッセージが出ていれば、インストールは成功です。

Visual Studio を利用できる場合には別のインストール方法があることを補足しておきます。私はこの方法は試していませんので割愛します。

WiiTestのダウンロード

WiiTestは必須ではありませんが、ダウンロードしておくと便利です。

こちらよりダウンロードできます。

MATLABとは独立して動作するアプリケーションで、PCとWiiリモコンが問題なく接続できているかを確認することができます。

PCとのBluetooth接続

PCとの接続方法は一般的なBluetoothと同じです。リモコン(またはバランスボード)本体の赤いSYNCボタンを押すとLEDが点滅しますので、その間にPC上でデバイスを検出します。完全に認識されるまでSYNCボタンを押し続けるのがポイントです。

SYNCボタン以外のボタンを押しているときもLEDが点滅しますが、PCから認識されないことがあるようです。

ペアリングのためのコードはありません(不要です)。

Wiiリモコンのためのデモプログラム

WiiLAB_2007aCompat -> WiiLAB_Matlab -> DemoPrograms にデモプログラムがあります。個人的には、HapticFeedback_move.m が面白かったです。黒い小さなドットを動かして赤い四角形に接触させBボタン(リモコン背面)を押します。すると四角形が緑色に変わりリモコンが振動します。Bボタンを押しながら緑の四角形を移動させることができます。

デモプログラムを起動すると、リモコンのLEDが1つ点灯します。もしこれが点滅している場合は、デモプログラムは動作しません(リモコンとPCの接続に失敗しています)。どうしてもうまくいかない場合は、前述のWiiTestを立ち上げるとうまくいく場合があります。

バランスボードを使用する場合

バランスボードとの接続方法については、こちらに記載があります。単純なデモは次の通りです。

% パス設定
addpath C:\'Program Files'\WiiLAB\WiiLAB_Matlab\WiimoteFunctions
addpath C:\'Program Files'\WiiLAB\WiiLAB_Matlab\EG111-H
global bb wm1;
% パターン1
bb = Wiimote();
bb.Connect();   % balance board
wm1 = Wiimote();
wm1.Connect(); % wiimote
% パターン2
% wm1 = Wiimote();
% wm1.Connect(); % wiimote
% bb = Wiimote();
% bb.Connect();   % balance board
if bb.isConnected() > 0
    tic
    while toc < 10
        tmp1 = bb.wm.GetBalanceBoardSensorState()   % returns values for the 4 sensors (kg)
        tmp2 = bb.wm.GetBalanceBoardCoGState()       % returns values for the center-of-pressure (x,y)
        wm1.wm.GetIRState()
        pause(0.5); % ここでの値は適当
    end;
end;
bb.Disconnect();  
wm1.Disconnect();  

このデモでは、リモコンとバランスボードの両方を使うことを前提としています。リモコンとバランスボードがPC上で認識されている順番によっては、パターン1をコメントアウトして、パターン2を有効にする必要がありますのでご注意ください。

リモコンを使用せずに、バランスボードのみを使用することも可能です。

tmp1とtmp2に代入された値が、0.5秒間隔でコマンドウィンドウに表示されます。

Wii Balance Board Project

Wii Balance Board Project というウェブサイトもありますので、あわせてご紹介しておきます。

WiiLABを使用したアプリケーション(bbrecord_1_4.m )が公開されています。これは MATLAB R2008a では動作しますが、R2015bでは動作しません。以下の変更を加えることで、R2015bでもおそらく問題なく動作します。

76行目と77行目をコメントアウト

% [Y,FS,NBITS] = auread('bloop.au');

% player = audioplayer(Y, FS);

398行目をコメントアウト

% play(player); % go "ding"

42行目あたり(プログラムの上部に)次を追加。

if ~exist('drivename','var')
    drivename = '';
end;

このアプリケーションではキャリブレーションを行うことで、正確な体重を測定することができます。