2016年11月13日日曜日

WiimoteLibでWiiリモコンプラスを使う

WiimoteLibでWiiリモコンプラスを使う

PC上でWiiリモコンを扱うライブラリ
WiimoteLib
https://wiimotelib.codeplex.com/
公式板の最新バージョンWiimoteLib v1.8 Beta 1は外付けのWii MotionPlusに対応していますが、Wii MotionPlusを内蔵するリモコン(新しいほうのやつ)には対応していません。
デバイスIDが異なるため弾かれるようです。

公式サイトからWiimoteLib_1.8_srcをダウンロードします。

解凍したファイルからWiimote.slnをVisualStudioで開きます。
Solution ExplorerのWiimoteLib - Docs - DataType.csを開いて
a00405で検索
 MotionPlus = 0x0000a4200405,を
 MotionPlus = 0x0100a4200405,に書き換えます

BuildメニューのBuild WiimoteLibでビルドします。

\WiimoteLib_1.8\WiimoteLib\bin\Releaseか
\WiimoteLib_1.8\WiimoteLib\bin\Debugに
WiimoteLib.dllができます。

外付けのWii MotionPlusには対応できなくなります。

======dllの作成ここまで=======

使い方

        wm.Connect()
        wm.InitializeMotionPlus()
        wm.WiimoteState.ExtensionType = ExtensionType.MotionPlus

このへんは私には何が正解かよくわかりませんが、2回くらい起動すると動くので、間違っているけどなんとかなるくらいの状態だと思います。。
        wm.SetReportType(InputReport.ButtonsAccel, True)
        wm.SetReportType(InputReport.IRExtensionAccel, True)



各データはこんな感じで取れます。

        yaw0 = wm.WiimoteState.MotionPlusState.RawValues.X
        roll0 = wm.WiimoteState.MotionPlusState.RawValues.Y
        pitch0 = wm.WiimoteState.MotionPlusState.RawValues.Z

角度が出てくるわけではなく、14bitの生値が出てくるそうです。
早い動きを検出するモードと遅い動きを検出するモードがあるそうです。
しっかりデータの解析をしていないのでよくわかりません。


キャリブレーションコマンドがLib内にありますが、私には使い方がわかりませんでした。