ソラマメブログ
About Me
Keimar
Keimar
フラフラ歩きまわっています。
黒板作ってます。
Contact Me
Access Counter

2008年02月29日

バランスWiiボードでSecondlife このエントリーを含むはてなブックマーク

以前の記事でバランスWiiボードでSL内での移動ができたらいいのにと書きましたが、ようやくバランスWiiボードを手に入れたので試してみました。

バランスWiiボードでSecondlife
ただいまWiiで爆走中

用意するもの
・Bluetooth アダプタ: 何でもよいと思います。僕はこれを使いました。
http://www.princeton.co.jp/product/mobile/ptmubt3s.html
小さいので邪魔になりません。青く点滅するのが気になりますが。 ちなみに東芝スタックというやつです。
・Wiiリモコン
一応つなげてありますが今回は特に使っていません。
・バランスWiiボード

(1)ソフトウェアのインストール
・GlovePIE
http://carl.kenner.googlepages.com/glovepie_download
・PPJoy
http://www.geocities.com/deonvdw/Docs/PPJoyMain.htm
仮想ジョイスティックソフトウェアです。
GlovePIEでジョイスティック入力をするときに使います。
Secondlifeの場合はジョイスティックでアバターの移動ができないのですが、一応入れました。
PPJoyのインストールはこちらを参考にしました。
http://chihara.naist.jp/people/STAFF/imura/computer/misc/virtual_joystick/disp_content


(2)WiiリモコンとバランスWiiボードの認識
WiiリモコンとバランスWiiボードの電池ケースのふたを開けて赤いSyncボタンを押してPCに認識させます。
Toshibaのbluetooth stackで認識させたところです。
バランスWiiボードでSecondlife

(3)バランスWiiボードの設置
バランスWiiボードに立って乗るとPCが使いにくいので座布団引いて座りました。ここは各自のスタイルで^^

(4)GlovePIEの設定
GlovePIEを起動するとこのようなスクリプトのエディタ画面になります。
バランスWiiボードでSecondlife
このエディタに独自のスクリプトとして設定を書いていきます。スクリプトが書ける人ならそんなに難しくはありません。
ひとまずバランスWiiボードの値を取得してみます。
Wiiリモコンをつないでいるので、Wiimote2がバランスWiiボードとなります。
データを取ってくるスクリプトは以下のような感じになります。
 //----------------------------------------
 var.FL = Wiimote2.BalanceBoard.RawFrontLeft
 var.FR = Wiimote2.BalanceBoard.RawFrontRight
 var.BL = Wiimote2.BalanceBoard.RawBackLeft
 var.BR = Wiimote2.BalanceBoard.RawBackRight
 debug = var.FL+ " : " + var.FR + " : " + var.BL + " : " + var.BR
//----------------------------------------

このスクリプトをGlovePIEのエディタに書いて、Runボタンを押すとボタンの横のdebug欄にバランスWiiボードの足の部分にある4のセンサの値が表示されます。

バランスWiiボードでSecondlife
体を傾けて重心を変化させると値が変わります。各値は結構ばらついてるみたいです。


この値を元に前後左右の入力を判別させてみます。 
色々やり方はありそうですが今回は各センサの値からセンサ側に体重がかかっているかを3段階に分けて判別させ、各センサの判別結果を元に前後左右の判定をさせました。

 //----------------------------------------
 var.FL = Wiimote2.BalanceBoard.RawFrontLeft
 if var.FL < 9900 then
  nbsp;var.FLFlag = 1
 else if var.FL > 10600 then
   var.FLFlag = -1
 else
   var.FLFlag = 0
 end if
 //----------------------------------------


左前のセンサの判別部分です先ほどの値を元に範囲を決めています。この辺の値は試行錯誤して決めました^^;

他のセンサも同様に判別して結果を元に前後左右の入力を決めます。

これは前後入力の部分です。

 //----------------------------------------
 if var.FLFlag = 1 and var.FRFlag = 1 and var.BLFlag = 1 and var.BRFlag = 1 then
   PPJoy1.Analog1 = -1
   Key.Up = true
   Key.Down = false
 else if var.FLFlag = -1 and var.FRFlag = -1 and var.BLFlag = 0 and var.BRFlag = -1 then
   PPJoy1.Analog1 = 1
   Key.Down = true
   Key.Up = false
 else
   PPJoy1.Analog1 = 0
   Key.Up = false
   Key.Down = false
 end if
 //----------------------------------------


 セカンドライフはジョイスティックでアバターを動かせないのでカーソル入力に変換します。いちおうジョイスティックも設定しました。
PPJoy1.Analog1 = -1 でジョイスティックの上入力となります。
Key.Up = trueは上カーソルの入力、Key.Down = falseは下カーソルを離すことになります。

同様な感じで左右の判定を行います。PPJoy1.Analog0でジョイスティックの下入力となります。
作成したスクリプトは以下のようになりました。if文ばっかりです。
使われてる数値は僕の場合なので、これを使っててみる場合は、数値を調整する必要があります。
この辺のキャリブレーションができるかどうかは今後の課題です。

 //----------------------------------------
 // input
 
 var.FL = Wiimote2.BalanceBoard.RawFrontLeft
 var.FR = Wiimote2.BalanceBoard.RawFrontRight
 var.BL = Wiimote2.BalanceBoard.RawBackLeft
 var.BR = Wiimote2.BalanceBoard.RawBackRight

 if var.FL < 9900 then
    var.FLFlag = 1
 else if var.FL > 10600 then
    var.FLFlag = -1
 else
    var.FLFlag = 0
 end if

 if var.FR > 4700 then
    var.FRFlag = 1
 else if var.FR < 3800 then
    var.FRFlag = -1
 else
    var.FRFlag = 0
 end if

 if var.BL < 4700 then
    var.BLFlag = 1
 else if var.BL < 5300 then
    var.BLFlag = -1
 else
    var.BLFlag = 0
 end if

 if var.BR > 3300 then
    var.BRFlag = 1
 else if var.BR < 2500 then
    var.BRFlag = -1
 else
    var.BRFlag = 0
 end if

 if var.FLFlag = 1 and var.FRFlag = 1 and var.BLFlag = 1 and var.BRFlag = 1 then
    PPJoy1.Analog1 = -1
    Key.Up = true
    Key.Down = false
 else if var.FLFlag = -1 and var.FRFlag = -1 and var.BLFlag = 0 and var.BRFlag = -1 then
    PPJoy1.Analog1 = 1
    Key.Down = true
    Key.Up = false
 else
    PPJoy1.Analog1 = 0
    Key.Up = false
    Key.Down = false
 end if

 if var.FLFlag = -1 and var.BLFlag = 1 and var.BRFlag = 0 then
    PPJoy1.Analog0 = 1
    Key.Right = true
    Key.Left = false
 else if var.FLFlag = 1 and var.FRFlag = 0 and var.BLFlag = 0 and var.BRFlag = 1 then
    PPJoy1.Analog0 = -1
    Key.Left = true
    Key.Right= false
 else
    PPJoy1.Analog0 = 0
    Key.Right= false
    Key.Left = false

 end if

 debug =var.FLFlag + " : " + var.FRFlag + " : " + var.BLFlag + " : " + var.BRFlag
 //----------------------------------------


いちおうこんな感じで動かしてみました。
座ったまま体を傾けるとアバターが前後に動きます。左右に傾けるとアバターの向きが変わります。
ジョイスティックで動かせるといいんですけどね~
あとは重心移動でうまく動くためにはスクリプトの調整か、WiiFitでのトレーニングが必要なところです。

バランスWiiボードでSecondlife
ちょっと設定を変えてFurry JapanのNemoさんによる水陸両用のGroundSurfboardに乗ってみました。
バランスWiiボードの体重移動とGroundSurfboardの動きが一致してなかなか面白いです。

う〜ん、文字ばっかりの記事でつらい…
本来ならここでボードに乗りながらSLをしているところを動画にするべきなのでしょうが機材が無いので省略させていただきます。
機材が無いので。えへへ

Posted by Keimar at 19:40│Comments(3)Wiiリモコン
この記事へのコメント
カコイイ~!
Posted by Nock Forager at 2008年03月01日 00:10
かっちょいいぃ〜2

「えへへ」 <--気になります w

SL内で、やってるとこ再現してください w
Posted by taro_bosatsutaro_bosatsu at 2008年03月04日 05:28
あはは。ムービーで作れたらいいと思うのですが、機材も無いですし自分を晒すのが。。。w
直接デモをお見せできないのがちょっと残念^^
Posted by Keimar at 2008年03月10日 01:47
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。