事後的に書いているので、足りないところがあるかも。
用意するもの
Ubuntuの入ったパソコン(バージョンは9.04を使っています)
Wiiリモコン
センサーバー(自作してもいいけど)
インストール
まずは何はなくとも関連するライブラリのインストール。
cwiidというモジュールと、それのpythonバインドを使います。今回Pythonは2.6でやりました。3.0で出来るかは未調査です。
apt-get install python-cwiid
これで基本的なところは入るはず。
WiiリモコンとUbuntuの疎通確認にはwmguiが便利。
apt-get install wmgui
これについては説明を省きます。
基本のコード
import cwiid
import time
#Wiimoteクラスをインスタンス化する
#press 1 + 2 button
wiimote = cwiid.Wiimote()
#レポートモードを設定
wiimote.rpt_mode = cwiid.RPT_ACC
#こういう指定もできる
#wiimote.rpt_mode = cwiid.RPT_BTN | cwiid.RPT_ACC
#レポートモード一覧
#cwiid.RPT_ACC
#cwiid.RPT_CLASSIC
#cwiid.RPT_IR
#cwiid.RPT_STATUS
#cwiid.RPT_BTN
#cwiid.RPT_EXT
#cwiid.RPT_NUNCHUK
#そして状態取得
while True:
print wiimote.state
time.sleep(1)
基本のコード解説
importは見ての通り。timeはウェイトを仕込むためなので必須ではないです。念のため。
注意すべきは
wiimote = cwiid.Wiimote()
のところ。このWiimoteのインスタンス化のタイミングで、Wiiリモコンの1ボタンと2ボタンを同時押ししないと、インスタンス化してくれず、RuntimeErrorが投げられてしまう。これではちょっと不便なので回避方法が無いかは調べているところ。
無事インスタンス化されたら、次は状態取得。wiimoteインスタンスのrpt_modeというフィールドに、
WiiMote.RPT_
で始まるフラグを入れると、それに応じた値がwiimote.stateに入るようになります。このフラグは論理和で複数取得が可能なので、ボタン状態と傾きの2つが知りたかったら、wiimote.rpt_mode = cwiid.RPT_BTN | cwiid.RPT_ACC
とやればOK。どこを指しているかを知るにはRPT_IRを使います。この時、センサーバーかその代わりが無いと、何の値も取得できません。
ここから先は、Cwiidのサイトとかを参考にして下さい。とはいえ、Cwiidのサイトは分かり辛いのですが。
今回最も、役に立ったのは、このページ(リンク切れ中 2009/10/27時点)です。言葉は分からないけど、画像とサンプルコードのおかげで、どうすればいいのか非常に分かりやすいです。
というか、上に書いたことのほとんどは、このページの前部分の要約みたいなものだったりします。
後ろの方には、キャリブレーションのやり方も出ているので参考にどうぞ。
(cwiidのサイトにもキャリブレーションのやり方は書いてあります)
雑談
昨日、本屋に行ったら、WiiRemoteプログラミングという本が出ていたのだけど、
内容はWindowsでの開発だったので、残念ながら私の役には立ちそうになかった。センサーバーの自作とかも載っていたけど、そのために1冊買うのはちょっとなあ。将来買うかもしれないけど、少なくとも今はそういう本があることだけ覚えておくことにしよう。
0 件のコメント:
コメントを投稿