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)