SIXAXISについて

今回は、プログラミングから離れてハードについての調査結果を報告。
検出した値を評価するには絶対不可欠な情報ですのでちょっとまとめてみました。

仕様

まずは基本的な仕様を確認してみます。

品名 SIXAXIS/DUALSHOCK 3
接続 Bluetooth、USB
ボタン数 16ボタン+PSボタン
入力 6軸検出システム搭載
アナログスティック(10ビット)
STARTボタンとSELECTボタン以外のボタンは押下したときの圧力による256段階のアナログ判定。
振動機能 SIXAXIS:なし
DUALSHOCK 3:あり
メーカー ソニー・コンピュータエンタテインメント(SCE)
定価 SIXAXIS:5,000円
DUALSHOCK 3:5,500円

価格.comでも4000円台、中古でも4000円前後と高価。
Wiiリモコンが定価3,800 円なのに比べると随分高いですね。

Bluetooth、USBというところにどうせコンバータでるんだからやりやすい方で作るよ。といった姿勢が見える気がします。

各ボタンの圧力による256段階のアナログ判定はPS2のころから搭載されたおなじみのはずの知られざる機能です。 個人的には気に入っています。

いろいろありますが、今回の目玉は6軸検出システムですね。Bluetoothもその関連で搭載されたものと言ってもいいでしょう。
コントローラーを傾けるとそれを検出してくれるシステムです。
ゲームをしてるとボタンを押すよりも早くコントローラを振り回してしまう人も多いはず。 そんな不器用さんのための機能…となるはずだったんでしょうか。
このコンテンツではこの6軸検出システムを使ったPCゲームを作ることを目標としています。

解剖調査結果を検証してみた

6軸検出システム用のセンサーについて基盤のほうから少し検証してみたいと思います。
基盤に関する知識がない私には大変ありがたいことに、すでに解剖結果のレポートがいくつか上がっています。
今回はこちらの報告データを利用します。

Kako's Home page:http://www.kako.com/
PLAYSTATION3用SIXAXISと、Wii用コントローラーのモーションセンサーを調べてみる
PLAYSTATION3用Dual Shock3を調べてみる

このサイトのものが写真も大きく、センサーの調査もされており大変役に立ちました。

このサイトによると6軸検出システム関連で搭載されているセンサーは次のとおり。(引用)

SIXAXIS DUALSHOCK 3
3軸加速度センサ 北陸電気工業 HAAM325B Kionix KXPC4
1軸ジャイロセンサ 村田製作所 ENC-03R Epson-Toyocom XV3500CB

配置は次のようになっています。

センサー配置図

3軸加速度+1軸角速度という構成です。
これは6軸センサだと思い込んでいた私には衝撃的な結果で、6軸センサと言うには角速度の2軸が足りません。
しかし、よくよく考えてみると6軸検出システムなのですから、回転のロール、ピッチ、ヨーと 水平×2、垂直の移動(サージ、スェイ、ヒーブ?)が検出できればいいわけなので、重力下ならこれで十分のようです。

ところで、加速度センサがコントローラ中心からずれた左上についているのは、遠心力を検出するためでしょうか。

センサーの向き

センサーの向きについて検証してみます。
SIXAXISよりDUALSHOCK 3のほうが分かりやすいのでこちらを使いました。

3軸加速度センサ

まずは3方向加速度センサ(Kionix KXPC4)です。
マニュアルによると、センサーの向きと検出する軸の関係は図のようになっています。(図はクリックすると拡大できます。)
下方の写真の向きは上に描いたコントローラと同じ向きです。

座標系は右手系が使われています。

まとめるとこんな感じです。

+X 左右方向の左
+Y 前後方向の後
+Z 上下方向の上

センサーの検出範囲は -2~2 G となっています。
ちなみにWiiリモコンの3軸加速度センサ(ADXL330)は±3Gとなっています。

1軸角速度センサ 次は1軸ジャイロセンサ(Epson-Toyocom XV3500CB)です。
基盤平面に垂直に伸びた軸周りの回転、ヨーを検出します。
加速度センサの結果と合わせると、Z軸周りの回転と言うことになります。
+方向が左手系なのが気になりますが、出力までの間に±が入れ替えてあるのかな?

検出範囲は、
SIXAXIS:±300deg/s
DUALSHOCK 3:±100deg/s
となっています。
微妙に検出レンジが変わってますが、出力の仕様がもともと±100deg/sだったということでしょう。

これを実際のコントローラに当てはめるとこんな感じになります。
これはあくまでセンサーの方向なので、実際の出力と一致しないかもしれないと言うことはご理解ください。

センサーの基本

加速度の基本図
ここで少し加速度センサについて考えておきます。

図のピンクの矢印は加速度センサの座標系です。
加速度センサは静止状態では、重力加速度(=1G)を検出します。
重力加速度は下方向なので、センサの出力はZ方向に-1G(=-9.8m/s2)、X方向に0G(=0m/s2)となります。

移動をした場合はこのようになります。
例えば、図のように+X方向へ移動を開始したとき、加速度センサは加速した方向と反対方向に加速度を検出します。
この場合X方向にa m/s2(a < 0)と、Z方向に-1Gが検出されます。

この結果から水平垂直移動を検出することが出来ます。

また静止した状態では3軸加速度の合計は常に1Gです。
この1Gの3軸への配分を調べれば、センサーの傾きの状態を知ることが出来ます。
傾きが検出できればロール、ピッチが検出できます。
しかし、ヨー(上下方向軸周りの回転)だけは加速度センサーでの検出はできません。
遠心力を使ったとしても方向が分かりませんからね。
そこで1軸ジャイロ(角速度)センサが必要になるわけです。

はい。これで一応は6軸の検出が出来るようになりました。

速度と変位

検出される値は加速度です。
加速度から速度を計算するには1回積分すれば出てきます。
加速度から変位を計算するには2回積分すれば出すことが出来ます。
しかし積分を行うと計測誤差が蓄積していってしまいます。

分解結果の報告からも分かるとおり、SIXAXISにはWiiのセンサバーのような絶対座標を検出できる仕組みがないため誤差を修正することが出来ません。
積分を行うと誤差がどんどん蓄積していき、まともな数値を得ることが出来ません。

積分計算を使う場合は注意が必要です。

考証してみる

これらの結果を総合して考えるとSIXAXISとWiiリモコンの運用思想の違いを感じます。

Wiiリモコンは、立ち姿勢でぶんぶん振り回して使うように考えて作られています。
持ち方の制限もなくすためか形状も棒状です。あの単純な形状はそれゆえになんにでも化けることが出来ます。
フライパンからテニスラケット、釣竿、剣、麺棒、ハンドル、などなど。


これに対し、SIXAXISはリラックスして座った姿勢で、軽く手首を動かして使うように作られた印象です。
コントローラの形状は持ち方を制限することでボタン操作がしやすくなっている伝統の形状です。
センサーから言ってもあまり振り回して使うようには出来ていません。
これまでのコントローラの延長であり、あくまでゲームコントローラであると考えるべきでしょう。


SIXAXISとWiiリモコンは、同じ加速度センサーを搭載していますが、運用思想がまったく異なる別の種類のものであるようです。
ここが分かっていないとSIXAXISの性能を活用することは出来ないと思います。
つまりWiiみたいなゲームは作れないということです。たぶん。