Top/Devel/OculusRift/DroidGlove

DroidGlove の変更点はてなブックマーク


#ref(droidglove_xxhdpi.png,right,around,nolink,nothumb)
#ref(mikujalus.jpg,right,around,33.33%)
This page is also available in English. Please visit [[here>../DroidGlove_en]].~
~

DroidGloveはあなたのAndroidスマホをバーチャルリアリティ用の入力デバイスにして、
Oculus Riftなどの仮想空間内で手をコントロールするためのアプリです。

[[改造PAXパワーグローブ>Devel/電子工作/Arduino/PaxPowerGlove]]をアプリにしたものです。

拙作の[[Mikujalus>../Mikujalus]]や[[BobbingBots>../BobbingBots]]、アキヒロさん作の[[ユニティちゃんと追いかけっこ>http://akihiro0105.web.fc2.com/Downloads-Oculus.html]]などのVRアプリで利用できます。

~

#nicovideo(sm25125617)
#clear

*アプリ

[[Google Playからダウンロード>https://play.google.com/store/apps/details?id=com.cubic9.android.droidglove]]してください。

*アプリの使い方
#ref(preference.png,right,around,15%)
#ref(main.png,right,around,15%)

スマホでWiFiが使用できること、スマホからPCにネットワーク接続できる環境になっていることが必要です。

~

外出中など、アクセスポイントが利用できない場合や、スマホもPCもWiFi接続できるものの両者の通信が制限されている場合は[[こちら>#softap]]をご覧ください。


**下準備
まず、DroidGlove側の準備です。

~

+スマホに[[DroidGlove>https://play.google.com/store/apps/details?id=com.cubic9.android.droidglove]]をインストールする。
+スマホのWiFiをオンにします。
+スマホでDroidGloveを起動する。
+スマホの設定画面でPCのIPアドレスを入力する。~
(Win+Rで出てきたウィンドウに「cmd」と入力し、Enter後、「ipconfig」と入力し、Enterで表示されます。)
+スマホのてっぺんをPCのモニターに向け、Resetボタンを押す。
#clear

~

次に、専用PCアプリがファイアウォールを通過できるように設定する必要があります。次のようにして通信を許可してください。(下記はWindows7での手順です)

~

#ref(firewall01.png,right,around,50%)
+[コントロールパネル] > [Windows ファイアウォール]を開く。
#clear
#ref(firewall02.png,right,around,50%)
+[Windows ファイアウォールを介したプログラムまたは機能を許可する]をクリックする。
#clear
#ref(firewall03.png,right,around,50%)
+[設定の変更]ボタンをクリックする。
#clear
#ref(firewall04.png,right,around,50%)
+[別のプログラムの許可]ボタンをクリックする。
#clear
#ref(firewall05.png,right,around,50%)
+[参照]ボタンをクリックする。
#clear
#ref(firewall06.png,right,around,50%)
+[[Mikujalus>Devel/OculusRift/Mikujalus]]などの専用アプリのexeファイルを指定して、[開く]ボタンをクリックする。
#clear
#ref(firewall07.png,right,around,50%)
+[追加]ボタンをクリックする。
#clear

**遊び方
+スマホでDroidGloveを起動する。
+[[Mikujalus>Devel/OculusRift/Mikujalus]]などの専用アプリを起動する。
+スマホを回転させると、PC側の手が回転する。~
また、スマホの画面を下方向にスワイプすると、手を握る。

**WiFi環境に問題がある場合(PCをアクセスポイントにしてスマホをWiFi接続する手順) [#softap]
外出中など、WiFiアクセスポイントが利用できない場合や、~
スマホもPCもWiFi接続できるものの両者の通信が制限されている場合は、~
PCをSoftAP(ソフトウェアアクセスポイント)にしてスマホをWiFi接続してみてください。

なお、PCの無線LANアダプタがVirtual Wi-Fiに対応している必要があります。

~

手順は次の通り。

~

#ref(softap.png,right,around,50%)
+下記をダウンロードし、解凍します。
#ref(start_softap_20150516.zip)
+start_softap.batを右クリックし、コンテキストメニューの"管理者として実行"をクリックします。
+"ユーザーアカウント制御"ダイアログで"はい"をクリックします。
+"このPCをアクセスポイントにする設定を新たにしますか(Y/N)"と聞かれるので、"Y"と入力し、エンターキーを押します。~
("N"と入力すると、前回の設定内容でアクセスポイントを有効化します。)
+作成するアクセスポイントのSSIDを入力します。
+作成するアクセスポイントのパスフレーズ(パスワード)を入力します。

~

以上で、アクセスポイントが作成され、アクセスポイントが有効になります。

~

作成したアクセスポイントが有効になったら、アクセスポイントにスマホで接続します。~
その際のSSID、パスフレーズは上の手順で自分で決めたものを入力してください。

~

これでPC⇔スマホのWiFi接続が完了しましたので、あとは前述の手順に従って、ファイアウォールの設定とDroidGloveの設定を行ってください。



*DroidGlove + Bobbing-Walking用Unityサンプルプロジェクト [#sample]
DroidGloveを使用するためのスクリプトの他に、~
[[Bobbing-Walking(Oculus Riftを装着してその場でジョギングするように連続的に飛び上がると、前進し、上を見上げながら同様に飛び上がると、後退するスクリプト)>../Bobbing-Walking]]も入っています。

-PC用(Oculus Rift用)サンプル
#ref(droidglove_unity_sample_20160601.zip)

-Android用(Google Cardboard用)サンプル
#ref(droidglove_cardboard_unity_sample_20151129.zip)


*上記サンプルプロジェクトのFPSをGoogle Cardboard対応Androidアプリにしてみたもの [#apk]
Google Cardboradに対応したサンプルプロジェクトの配布はまだできないのですが、~
ひとまずサンプルプロジェクトをビルドしてできたAndroidアプリを配布してみます。

#ref(droidglovesample.apk)




*注意
Bobbing-Walkingについて、1人でやるときは、転倒しないように下記をお願いします。
-予め周囲を確認し、家具などの物体から2m以上離れてください。
-足元にテープで枠を作りその中から出ないようにしてください。
-あまり激しく動かないようにしてください。

~

第三者に体験していただく際は、上記の説明に加え、体験者から目を離さないようにお願いします。




*連絡先
何か質問がございましたら、[[Twitter>https://twitter.com/cubic9com]]までご連絡ください。

英語での質問は[[Oculus VR Forumsのトピック>https://forums.oculus.com/viewtopic.php?f=26&t=18441]]にてお願いいたします。

*ソースコード [#source]
ソースコードはGitHubで公開しています。

最新版(1.0.0)のソースコードはコードの整理がつくまで見送ります。

下記で公開されているのは旧版です。

データ形式が異なる(旧版はオイラー角、最新版はQuaternion)ため、ご注意ください。

[[https://github.com/cubic9com/DroidGlove/>https://github.com/cubic9com/DroidGlove/]]

**ソースコードのフォルダ階層

|フォルダ|内容|h
|src/|Javaソース|
|res/|画像などのリソース|


**ソースコードの使い方

DroidGlove にはC. Ramakrishnan, [[Illposed Software>http://www.illposed.com/]]によって開発された
[[JavaOSC>http://www.illposed.com/software/javaosc.html]](Open Sound Controlライブラリ)が必要です。

+次のURLからJavaOSCを入手する。 ~
[[https://github.com/hoijui/JavaOSC/tree/e2a1667cb198675958012d91a374f9e9705195be>https://github.com/hoijui/JavaOSC/tree/e2a1667cb198675958012d91a374f9e9705195be]]
+JavaOSC内の"modules/core/src/main/java/com"フォルダを"src/"フォルダにコピーする。
+[[ADTバンドル版Eclipse>http://developer.android.com/sdk/index.html]]などにインポートする。
+アプリ(.apk)をエクスポートする。

**ソースコードのライセンス
Copyright (C) 2014, cubic9com All rights reserved.

DroidGloveのソースコードは、修正BSDライセンス(三条項BSDライセンス)とします。

詳細はリポジトリのLICENSEファイルをご覧ください。

*技術解説
+[[改造パワーグローブ>Devel/電子工作/Arduino/PaxPowerGlove]]でやっていたようなことが、スマホでもできるかという実験のために作成しました。
+スマホ・PC間の通信には[[OSC(Open Sound Control)プロトコル>http://ja.wikipedia.org/wiki/OpenSound_Control]] over UDPを使用しています。~
Androidスマホ側は[[JavaOSC>https://github.com/hoijui/JavaOSC]]((Copyright (c) 2002-2006, C. Ramakrishnan / Illposed Software))というライブラリ、PC側のUnityは[[UnityOSC>https://github.com/jorgegarcia/UnityOSC]]((Copyright (c) Jorge Garcia))というライブラリのおかげでだいぶ楽に実装できました。

*DroidGloveのOSCプロトコル・パケット仕様(対応ソフトはご自由にお作りください)
+使用ポート番号は、スマホ側、PC側ともに57110。
+DroidGloveのスマホ→PCのパケットは以下の仕様です。対応ソフトウェアの実装はご自由にどうぞ。
++アドレスは、"/droidglove_to_pc"です。
++データは、float x, float y, float z, float w, int gripの順。
++最初の4値については、Quaternionです。
++最後の1値については、手の握り具合を示します。値の範囲は、0 <= grip <= 100。
++今後、十字キーや、ABボタンを追加する予定です。
+DroidGloveのPC→スマホのパケットは以下の仕様です。対応ソフトウェアの実装はご自由にどうぞ。
++アドレスは、"/droidglove_to_phone"です。
++データは、int vibrationTimeのみ。
++値はバイブレーションの継続時間を示しています。単位はミリ秒。~
0とした場合は、スマホ側で設定されている継続時間を使用します。~
ユーザーに調整させたい場合は0としてください。

*謝辞
JavaOSCの開発者であるMr.Ramakrishnan([[Illposed Software>http://www.illposed.com/]])に感謝いたします。

Sensor fusion demo for Androidの開発者である[[Alexander Pacha>http://my-it.at]]([[the Human Interface Technology Laboratory New Zealand>http://www.hitlabnz.org]])に感謝いたします。

DroidGloveは[[Little Witch Pie Delivery>http://littlewitchpiedelivery.com/]]の箒の操作に刺激を受けて作りました。[[Haramakoto>https://twitter.com/xxxxMakoto]]さんに感謝いたします。


*Amazon
#amazon(B0199DNJHO,left)
#amazon(B01LXP26V0,left)
#amazon(B00WMCTJW4,left)
#amazon(4798137464,left)
#amazon(B012VRQX4G,left)
#amazon(B015IDHRH2,left)
#amazon(B0058QFZYC,left)
#amazon(4091848184,left)
差分 一覧