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ビット版を前提とします)
- こちらより、WiiLab_2007aCompat.zip をダウンロード
- ZIPファイルを右クリック「プロパティ」を開く。「全般」タブの下の方に「セキュリティ」とあり、「ブロックの解除」ボタンがある場合はこれをクリック。OKボタンを押して閉じる。
- あらためてZIPファイルを右クリック、すべて展開。
- 展開したフォルダを、WiiLAB_2007aCompat -> WiiLAB_Matlab -> WiimoteFunctions -> @Wiimote とたどる。
- Wiimote.m を開き、310行目の buttons = の行からbooleanを削除。buttons = wiimote.wm.GetButtonState(); とする。(booleanのキーワードで検索すると便利)
- 同様に431行目の buttons = の行からbooleanを削除。buttons = wiimote.wm.GetNunchukButtonState(); とする。
- WiiLab_2007aCompatフォルダに移り、InstallWiiLabを右クリック「管理者として実行」。これによって、CドライブのProgram Files にWiiLABというフォルダができますが、この段階ではまだファイルがコピーされていません。
- C:¥Program Files¥WiiLABを開き、その中にある3つのフォルダ(WiiLAB、WiiLAB_Matlab、WiiLABTest)を手動で削除します。
- 展開したWiiLab_2007aCompatの中から、WiiLABとWiiLAB_Matlabの2つのフォルダを、C:¥Program Files¥WiiLABの中にコピーします。
- 再度、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;
このアプリケーションではキャリブレーションを行うことで、正確な体重を測定することができます。