jump to navigation

WiiFitバランスボードとGlovePIEで足だけブラウジング

2009-10-20 22:33 Posted by
nase
in : プログラミング
surfing.jpg

先日の体重計に引き続き、今度はGlovePIEを使ってバランスボードから一般的なデスクトップの操作ができるようにしてみました。

今回試してみたのは重心移動による上下スクロールとバランスボード前面ボタンによるCtrl+Wです。

これにより、例えばブラウザのタブで読みたいページを開いておけば、足だけで順に閉じながら読んでいくことができるようになります。

GlovePIEでWii Balance Boardの操作

GlovePIEはWiiRemoteの他、データグローブやジョイスティックなどの挙動をコントロールすることができるスクリプティング環境。ver0.30でBalance Boardに対応しました。

以下のような機能が使用できます。(ひとつのWiiリモコンとバランスボードを接続した際、WiiリモコンがWiimote1、バランスボードがWiimote2.BalanceBoardとして認識されます)

rawデータの取得(FrontLeftとBackRightの値が実際と逆):
    Wiimote2.BalanceBoard.RawFrontLeft
    Wiimote2.BalanceBoard.RawFrontRight
    Wiimote2.BalanceBoard.RawBackLeft
    Wiimote2.BalanceBoard.RawBackRight

LEDの点灯:
    Wiimote2.BalanceBoard.LED = true

ボタンの取得:
    Wiimote2.BalanceBoard.A

実はこの他にもKgの取得やJoyPad値の取得なども用意されているのですが、バグにより正しく使用できないようです。

なお、GlovePIEにおけるWiiRemoteの利用方法については「WiiRemoteプログラミング」で詳しく紹介されています。

とりあえずの実装例

スクリプトでは、最初に各センサーの初期値を揃えておく必要があります。やり方はBodySurfのコードを参考にさせてもらいました。

以下をGlovePIE.exeから実行し、ボードに乗らない状態でWiiコントローラのAボタンを押せば、バランスボードによる操作が可能になります。

if not var.init
  Keyboard.RepeatFakeKeys = false
  var.minForce = 500
  var.calibrated = false
  var.init = true
endif

//オフセット値を除いたセンサの値
var.FL = Wiimote2.BalanceBoard.RawBackRight - var.BRCompensate
var.FR = Wiimote2.BalanceBoard.RawFrontRight - var.FRCompensate
var.BL = Wiimote2.BalanceBoard.RawBackLeft - var.BLCompensate
var.BR = Wiimote2.BalanceBoard.RawFrontLeft - var.FLCompensate
//debugprint("FL=" + var.FL + ", FR=" + var.FR + ", BL=" + var.BL + ", BR=" + var.BR)

//Aボタンでセンサのオフセット値を取得
if key.c = true or Wiimote1.A = true
  var.FLCompensate = Wiimote2.BalanceBoard.RawFrontLeft
  var.FRCompensate = Wiimote2.BalanceBoard.RawFrontRight
  var.BLCompensate = Wiimote2.BalanceBoard.RawBackLeft
  var.BRCompensate = Wiimote2.BalanceBoard.RawBackRight
  var.calibrated = true
endif

//上下左右に換算
var.F = var.FL + var.FR
var.B = var.BL + var.BR
var.L = var.FL + var.BL
var.R = var.FR + var.BR
//debugprint("F=" + var.F +", B=" + var.B + "L=" + var.L + ", R=" + var.R)

if var.calibrated
  if (var.F - var.B) > var.minForce
    Mouse.WheelUp = true
    wait 30 ms
    Mouse.WheelUp = false
  endif
  if (var.B - var.F) > var.minForce
    Mouse.WheelDown = true
    wait 30 ms
    Mouse.WheelDown = false
  endif

  Key.Ctrl+W = Wiimote2.A
endif

ブラウザのスクロール特性を変更できるプラグインがあると読みやすくなります。

できれば今後、タブの切り替えや力のかけ具合による処理の分岐なども試してみたいところです。

参考情報

以下、バランスボードの解析に関連する記事とかツールとか。

ホイール欲しい ハンドル欲しい ≫ バランスWiiボードのメモ
ホイール欲しい ハンドル欲しい ≫ バランスWiiボードの解析メモ 2
ホイール欲しい ハンドル欲しい ≫ バランスWiiボードの解析メモ 3
ホイール欲しい ハンドル欲しい ≫ バランスWiiボードの解析メモ 4
WindowsPC (Win32/Win64) フルパワー全開
小ネタ - Kako Homepage
BalanceWiiBoard to PC

参考書籍

WiiRemoteプログラミング WiiRemoteプログラミング

今回もお世話になりました。


Wiiフィット プラス(バランスWiiボードセット) Wiiフィット プラス(バランスWiiボードセット)

ボードのみの販売はないので、ソフトと一緒に買いましょう。


Comments»

no comments yet


*Comments and trackbacks will appear after it is approved by the administrator.