VR、ゲーム制作、プログラミング。Unity とか Oculus Rift とか。

2015年1月2日金曜日

PlayStationMoveをPCかつネットワーク経由で使えるPSMoveServer

PlayStation Move を PC で、かつネットワーク越しで使える PSMoveServer というものを作りました。

概要

PlayStation Move というモーションコントローラーをある PC と接続してサーバーを起動し、同一 PC または他の PC 上の別のアプリケーション(クライアント)から利用できるソフトを作りました。

これを使うと、PlayStation Move を接続するのが困難な Windows 8 や Android(未確認ですが) でも簡単に利用することができます。

また、クライアント側で面倒な実装をしなくても、サーバー側でコントローラーの設定変更、状態の監視などを行えて便利です。

クライアントはとりあえず Unity 用のみ用意しています。

PS Move について


PlayStation Move (以下 PS Move) は PS3 用のモーションコントローラーで、加速度、ジャイロ、磁気による姿勢の取得といくつかのボタン操作、バイブレーションが可能です。あと光ります。

また、PlayStation Eye (以下 PS Eye) をはじめとするカメラと組み合わせることで、コントローラーの位置トラッキングも行うことができます。

PlayStation®Move(PS Move) | プレイステーション® オフィシャルサイト



有志の API を使えば PC にも Bluetooth で接続して利用することができます。

PC でモーションコントローラーとして利用可能なデバイスはいくつかありますが、位置トラッキングまで行えるものは限られています。

Leap Motion のツールトラッキングを使う、何らかのモーションコントローラーと Kinect を組み合わせるといった選択肢があり、それぞれに異なる利点がありますが、PS Move + PS Eye の利点は合わせて 6000 円程度と安価なことと比較的安定した姿勢取得、バイブレーションなどが挙げられます。

おそらく最大の弱点は明るい部屋で位置トラッキングの精度が出ないことです。ただ、ここの検証はまだあまりできていません。

PS Move 単体を 3000 円強で無線で姿勢を取得できるデバイスと見てもお得感があります。

Move.me について

PS Move をネットワーク越しで使う、というのは公式で Move.me というサービスがあり、PS3 本体と北米(?)アカウントがあれば使えるみたいです。こちらはあまり調べていません。

PS Move API と PC での利用について

PS Move と PS Eye を PC で使うには PS Move API を使う方法があります。

ペアリングから利用まで、はじめは英語だったり情報があまりまとまっていなかったり環境が限られたりで苦労するかもしれません。

非常にざっくりと書いておくと、Windows 7 (64bit) なら
  1. USB で繋いで API 付属の psmovepair.exe を実行(落ちたらまたやる)
  2. iPi Recorder で Bluetooth ペアリングできるようにする
  3. magnetometer_calibration.exe で磁気キャリブレーションする(気長に。あまりに進まなければ Ctrl + C でやり直し。ドリフト回避のため重要)
  4. PS Move API が使える
です。

Windows 8 以降でのペアリングは OS 標準の Bluetooth ドライバではかなり厳しく、MotionInJoy というドライバ(ちょっとおすすめし辛い)を入れても相性が良くないと厳しい、といった感じです。

位置トラッキング用のカメラは一応 PS Eye 必須ではありませんが、PS Eye を使うなら CL Eye Driver ($2.99) を入れると良いようです。

Mac は試していませんがこちらの記事が参考になるかもしれません。Ocufes で早くから PS Move を使ったコンテンツを複数展示されている @WheetTweet さんの記事です。


ペアリングの際お世話になったページを貼っておきます。



PS Move API の Unity ラッパー。ちょっとおかしなところがありましたがかなり参考にさせて頂きました。



(なお、API 自体にもリモート PC 上のデバイスをローカルデバイスのように扱う機能が含まれているのですが、試したところ動きませんでした。github の最新版も確認しましたが、Winsock 初期化も行われていないなど少なくとも Windows 版はメンテされていない印象を受けました。ちなみに初期化をしただけではダメでした。これを直すとプロジェクトに貢献できそうな気がしたのですが、今回はサーバー側 GUI も欲しかったので独自に作ることにしました。)

PSMoveServer について

力尽きたし時間も尽きたので雑です…

ダウンロード : PSMoveServer_0.1.1.zip (アルファ版)

PS Move API を同梱していないので、別途ダウンロードして Plugins に libpsmoveapi.dll を入れてください。位置トラッキングも行うなら libpsmoveapi_tracker.dll も入れてください。

ライセンスは将来的に修正 BSD か MIT になるはずです。

動作環境 :
サーバーは Windows 7 (64bit) で確認
クライアントは Windows で確認(他でも使えると思いますが、ビッグエンディアンな Mac はサボっているのでダメです…じきに直します。Android もビッグかも)


PSMoveServer.exe を起動


Bluetooth ペアリングまでは別途済ませておいてください。

位置トラッキングするなら UseTracker をオン、カメラが複数あるなら ID を指定(0 ベース)。PS Move のスフィアをカメラに向けておきます。

Initialize を押します。PC 初回はよく PS Move API が落ちるようです。何度か起動し直してください。

Fusion の Position も異常な値や NaN になることがあります。何度か Uninitialize / Initialize を繰り返すと直るようです。

PS Move が勝手に動くのが落ち着いたら、ボタンを手前、スフィアを上に向けて ResetOrientation を押します。

クライアント側プロジェクトに unitypackage をインポート、Scenes/ClientDemo を見る。PSMoveClient.cs がサーバー、PSMoveClientObject.cs が同期して動くオブジェクトです。


今後の ToDo:
通信周りをほんとうにサボっているのでなんとかします…

Mac 版のサーバーが欲しいひとは僕に Macbook Air をおくろう!!1
(bootcamp したほうが安いですね)

カメラから取得した画像も出したいです。

ツナとタイカレー缶について

PSMoveServer は無料でご利用いただけますが、作者にツナとタイカレー缶を送ることもできます。


または、利用した作品や開発に役立つ情報を公開していただけると大変喜びます。