なお、これは通常のWiiRemoteの仕様です。(Wiiリモコンプラスの仕様はサイズとかが若干変わる)
サイズ | 縦148mm、横36.2mm、厚さ30.8mm(突起部分を除く) |
---|---|
質量 | 約87グラム(専用ストラップ・Wiiリモコンジャケット・乾電池含まず) |
通信機能 | Bluetooth(短距離無線通信)による無線接続(BluetoothコントローラはBroadcom BCM2042) |
最大接続台数 | 4台 |
プレイ可能距離 | テレビから5m |
ポインタ | 画面を指し示すポインティング機能 |
モーションセンサー | 傾きや動きの変化を検出(3軸)(ADXL330という3軸加速度センサを使っている) |
ボタン | デジタル11入力(1, 2, A, B, -, +, Home, 十字) |
振動機能 | バイブレータ1個 |
スピーカー | モノラルスピーカー1個 |
プレイヤーインジケータ | 青色LED4個 |
拡張ユニット接続可能 | モーションプラス、ヌンチャク、クラシックコントローラなど |
さて、少し突っ込んで見ていきましょう。 気になる部分は「モーションセンサー」と「ポインター」と「拡張ユニット」が挙げられます。
モーションセンサー
端的に言えば「10%感度の±3[g]レンジ各8ビット分解能3軸方向加速度センサ」が入っています。 工学系の人など知っている人なら「なるほど。」で終わりますが、多分物理の勉強とある程度のコンピュータ知識がないとさっぱりだと思います。 ちょっと詳しく説明します。
「3軸方向」について
3軸とはX、Y、Z軸のことです。要するに「3次元的に計測ができますよ」ということを言っています。
「10%感度の±3[g]レンジ各8ビット分解能」について
これは送られてくる加速度のデータのことです。 ±3[g]とありますが、この単位はグラムではなく、重力加速度[g](1[g]=9.8m/sec2)です。
センサなどの計測機器を扱っていると嫌でも”精度”や”分解能”という問題が付きまとってくるのですが、これはなぜかについて簡単に説明します。
分解能
頭の中に”定規”を思い浮かべてください。
普通30cm定規とかだと1mm単位で目盛がついてますよね。
例えば、15cmだとか3mmだとかの値を測るならこれでも大丈夫だと思います。
ですが、「じゃぁこれで15.32mmを測ってよ」と言われたら測れないですよね。
目算というのもあるっちゃありますが、これは非常に適当なものなので工学的にはアウトです。
これと同じです。
“加速度”というアナログの値を数値で表さないといけないので、細かく測ろうと思えばいくらでも細かくできるのです。 ですが、そんなに細かいものは必要がないので、「このくらいの細かさで測れますよ」というのを表しているのが”分解能”です。
「分解能って何?」と言いますと、簡単に言えば測れる細かさです。 上記の例でいくと、定規の目盛の間隔の大小の程度です。 “1mm単位で目盛が付いている”というのが分解能にあたります。
8ビットというのを説明するのが少し難しいので、定規と加速度センサを対応付けて考えていきます。
“定規の測れる最大幅30cm”に当たるのが”±3[g]レンジ”になります。 つまり、この加速度センサは±3[g]までしか測れません。
その”測れる最大幅”の間に定規なら”1mm間隔=300個の目盛”が付いています。
この”300個の目盛”に当たるのが、”8ビット=2の8乗=256階調”になります。 つまり、分解能でいえば、±3[g]を6[g]の幅があると考えて、
6÷256=約0.0234375[g]
の細かさで測れることがわかります。 「各」とついているのは、「これが3軸(X、Y、Z)方向に測れるよ」というのを表しています。
10%感度
次に「10%感度」についてですが、これは「加速度の変化という入力現象に対して出力に10%の影響が与えられる」ということです。 温度変化など色々な原因がありますが、要するに10%くらい誤差が生じると思っておけばいいと思います。
これは”精度”の問題です。 センサというのは、必ず正しい値を取ってくれるわけではなく、周りの環境に左右されます。 要するに”得られた値がどのくらい正しいか”ということです。
WiiRemoteは測定機として見れば良い精度とは言い難いかもしれませんが、ゲームとしてなら十分な精度が得られます。
10%感度の±3[g]レンジ各8ビット分解能
一応図にまとめてみました。
加速度センサ
そのまんまですが、加速度が測れるセンサです。
加速度は高校の物理あたりでやったかもしれませんが、”単位時間あたりの速度の変化率”です。 色々なサイトで詳しく説明されていたので、ここでは割愛します。
参考サイト
さらに詳しく知りたい方は物理の勉強やコンピュータの勉強をするか、色々なサイトを参考にしてみてください。
ポインター
赤外線を利用した2次元センサーによって構成されています。
名前からしてセンサーバーでWiiRemoteが発する赤外線をキャッチしているように見えますが、実はこれ逆なんです。
センサーバーの両端に赤外線を発するものが付いており、それをWiiRemoteでキャッチしています。 センサーバーなのにセンサー入ってないんです。
なので、赤外線を発していれば何にでも反応します。 ロウソクとかライターとかTVのリモコンとかでも反応します。 なので、センサーバーは割と簡単に自作できます。
自作する方はこのページを参考にしてみるといいかもしれません。
カメラのように画像を使っていないので、非常に高速な処理が可能になっています。 2次元PSD(Position Sensing Device)呼ばれる半導体センサーで、200fps以上で座標が取れるみたいです。 センサーバーの仕様を考えると2ヶ所の赤外線しか取れないように見えますが、プログラミングによっては最大4ヶ所まで同時検出できます。
拡張ユニット
色々ありますが、ここではヌンチャク、モーションプラスについて見ていきたいと思います。
ヌンチャク
ヌンチャクにはアナログスティック、ボタンの他に3軸加速度センサが付いています。 この加速度センサはWiiRemote本体の加速度センサよりも高分解能で、10ビット(1024階調)のデータが取れます。
モーションプラス
WiiRemoteの動きをより正確に取るために開発されたものです。 WiiRemoteに内蔵されている3軸加速度センサだけでは取れない、傾きや複雑な動きを取ることができるようになりました。
モーションプラスにはジャイロセンサが2つ入っており(InvenSense社製の2軸ジャイロセンサIDG-600(pitchとroll)とEPSONトヨコム社製のジャイロセンサX3500W(yaw))、この2つの部品を組み合わせることで3軸のジャイロセンサと同じような動作をしています。これによって、WiiRemoteの角度や角速度を取得することができます。
ジャイロセンサの3軸は加速度のようにX,Y,Zではなく、ヨー(Yaw)、ピッチ(Pitch)、ロー(Roll)という回転の3軸になります。
Yaw → 水平角(水平回転) 船首が左右に振れる
Pitch → 垂直角(仰俯角) 前後方向の縦揺れ
Roll → 回転角(レンズ回転) 船首に向かって左右の揺れ
元々船舶や航空機などの分野で揺れを表すのに使われていた用語で、3次元的な回転を表す時によく使われます。 加速度センサの軸も合わせると、WiiRemoteの座標系はこんな感じです。
加速度センサよりも精度が高く、3軸各14bitの値が取れ、モードチェンジ(ダイナミックレンジ)により、1秒で300°のレンジ(低速モード)と1秒で1600°(約4回転半)のレンジ(高速モード)を切り替えることができます。
ただし、ジャイロセンサは温度ドリフト(温度で値が狂うこと)などの問題により、オフセット(基準点(この場合はゼロ点)からの差)が乗りやすく、バイアス(静止時のゼロ点)を調整しなければなりません。 具体的にどんなことが起こるかというと、WiiRemote自身は動かしてないから値は0のはずなのに、オフセットが乗っているせいで得られる値が1とか2とかになってしまうことがあります。 簡単に言えば、触ってないのに動いている状態になってしまうということです。
任天堂さんはこの問題をソフトウェアで解決してるみたいです。
キャリブレーション(計測機器の狂いを基準量によって正すこと)をすれば、幾分か良くなりますが、それでも完全に取り去ることはできません。 Wiiのモーションプラス対応ソフトで、途中に「なんか動作がおかしかったら、置いて数秒待って下さい」みたいなのが出てくるのは、このキャリブレーションをやっているんだと思います。 また、実際にゲームを始める前にポインタで「画面のボタンを押してください」みたいなのが出てくるのは、バイアス設定を行っているんだと思います。
何にしろ扱うのがちょっと難しそうな機器です。
まとめ
少し詳しく書きましたが、これはライブラリがセンサの値は取ってきてくれるけど、そのあとの使い方についてはあんまりサポートいないからです。 センサを使ったプログラミングは中々難しいので苦戦を強いられますが、その分普通のボタン入力やアナログスティックではできない新しい可能性を持っています。 是非興味のある方はチャレンジしてみてください。
最後に、このページを書くにあたって参考にしたサイトをまとめて書いておきます。