2008年04月26日
RC ViewerでバランスWiiボード

正式リリース前のバージョンのRelease Candidate viewerというのがあるのですがRC1.20からViewerがJoystick対応になりました。 主に3DマウスのSpace Mouse向けっぽいのですが他のジョイスティックでもOKのようなのでバランスWiiボードを繋げてみました。
準備するもの:基本的に前回のエントリと同じです。
・Bluetooth アダプタ
・バランスWiiボード
ソフトウェア:あらかじめインストールしておきます
・GlovePIE
http://carl.kenner.googlepages.com/glovepie_download
・PPJoy
http://www.geocities.com/deonvdw/Docs/PPJoyMain.htm
・RC版Viewer
ViewerはSecond Life 1.20.4(RC)を使いました。なおRC版は正式リリース前に不具合が無いかをチェックするためのバージョンであるため、起動しないなどの重大な問題がある場合がありますので注意してお使いください。
トラブルに遭遇した場合はサポートに連絡しても意味無いのでJiraに報告した方がいいと思います。
PPJoyの認識
RC ViewerではJoystickの設定は、Edit - Preferences - Input & Camera - Joystick Setupで行なえますがPPJoyをインストールしてバランスWiiボードをBluetoothデバイスとして認識させた状態だと以下のスクリーンショットの左上の部分のようにBluetooth HID PortがJoystickとして認識されてしまいます。

バランスWiiボード自体は直接ジョイスティックとして使えないのでPPJoyを認識させてほしいですが調べてみたところJoystickを複数接続された場合は優先順位というのがあるようで、最近のソフトウェアではどれを認識するかはソフトウェア任せっぽいようです。
単純に複数のパッドを使っている状態なら引っこ抜いてもいいのですが今回はそうもできないので次のような手段でPPJoyを認識させます。
1.Bluetooth設定からバランスWiiボードをいったん削除。

いったん消します。
2.RC版Viewerを起動
既にPPJoyをインストールしてあるので、Joystick Setupを見るとPPJoyがJoystickとして認識されています。

バランスWiiボードの認識
バランスWiiボードへの接続を追加
Bluetooth設定へバランスWiiボードを追加します。

GlovePIEのスクリプトを実行
バランスWiiボードからデータを取得してPPJoyへの入力に変換するスクリプトを実行します。
今回はこのようなスクリプトを作ってみました。途中の数値は体重にあわせて調整する必要があると思います。
//----------------------------------------
// WiiBalanceBoard to PPJoy by Keimar Kuhn
var.mode = 0
var.ButtonFreezeTime = 250ms
var.PointerBump = KeepDown(Pressed(wiimote.A),var.ButtonFreezeTime) or KeepDown(Pressed(wiimote.B),var.ButtonFreezeTime)
Wiimote.Led1 = true
// input
var.FL = Wiimote.BalanceBoard.RawFrontLeft
var.FR = Wiimote.BalanceBoard.RawFrontRight
var.BL = Wiimote.BalanceBoard.RawBackLeft
var.BR = Wiimote.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
// output
if var.FRFlag = 1 and var.BRFlag = 1 then
if var.mode = 0 then
PPJoy.Analog1 = -512
else if var.mode = 1 then
Key.Up = true
Key.Down = false
else
Key.Right = true
Key.Left = false
end if
if var.FLFlag = -1 and var.BLFlag = 0 then
if var.mode = 0 then
PPJoy.Analog1 = 512
else if var.mode = 1 then
Key.Down = true
Key.Up = false
else
Key.Left = true
Key.Right= false
end if
else
if var.mode = 0 then
PPJoy.Analog1 = 0
else if var.mode = 1 then
Key.Up = false
Key.Down = false
else
Key.Right= false
Key.Left = false
end if
end if
if var.BLFlag = 1 and var.BRFlag = -1 then
if var.mode = 0 then
PPJoy.Analog0 = 512
else if var.mode = 1 then
Key.Right = true
Key.Left = false
else
Key.Down = true
Key.Up = false
end if
else if var.FLFlag = 1 and var.FRFlag = -1 then
if var.mode = 0 then
PPJoy.Analog0 = -512
else if var.mode = 1 then
Key.Left = true
Key.Right= false
else
Key.Up = true
Key.Down = false
end if
else
if var.mode = 0 then
PPJoy.Analog0 = 0
else if var.mode = 1 then
Key.Right= false
Key.Left = false
else
Key.Up = false
Key.Down = false
end if
end if
debug =var.FLFlag + " : " + var.FRFlag + " : " + var.BLFlag + " : " + var.BRFlag
//----------------------------------------
これでJoystcik setupのEnable Joystickをチェックするとバランスwiiボードで移動できます。
GrundSurfBoardなどに乗って使うと楽しいです。前回のキー入力に変換する方法との違いとして歩きながらしゃべることができます。そんな状況はあまり無いかもしれませんが

GlovePIEのスクリプトについては色々試しているところですがひとまずこんな感じで。
Posted by Keimar at 17:13│Comments(2)
この記事へのコメント
歩きながらしゃべる!ありますよ!プレゼンするときなどは動きでボードを示しながら話をすると格段に飽きません :)
ボイスじゃないとできないなぁと思ってたんですが、joystickを使うことでチャットでもできるわけですね。おもしろそうです。
ボイスじゃないとできないなぁと思ってたんですが、joystickを使うことでチャットでもできるわけですね。おもしろそうです。
Posted by Nock Forager at 2008年04月26日 17:52
>Nockさん
観光ガイドの時に使えるかなとは考えていましたがプレゼンですか。なるほど~
プレゼンで使う場合、足捌きになれないと落ち着かない人になりそうw
観光ガイドの時に使えるかなとは考えていましたがプレゼンですか。なるほど~
プレゼンで使う場合、足捌きになれないと落ち着かない人になりそうw
Posted by Keimar at 2008年04月26日 23:57