こんにちは~ ( ̄ー ̄)
今回はUnlimitedHandというデバイスを使う機会があったので、その解説をしたいと思います。
-
UnlimitedHandとは何?
UnlimitedHandは腕に巻いて使用するデバイスで、デバイスの入力にはフォトリフレクタという位置を計測するセンサーと加速度ジャイロセンサを使用しており、出力としては振動と電気刺激を行います。
噛み砕いて説明すると、腕の動きを値として利用したり、振動や電気刺激で触覚を提示することができるというものです。
-
接続の手順について
途中で接続ができなくなったり、先駆者があまりいなくて情報が少なかったりなどいろいろ手間取りました…。なので、トラブルが起きた人や初めて使用する人用に手順を紹介したいと思います。
手順の説明については公式の情報を参考にしています。
目的:Unityで動作確認
必要な物
- Arduino
Download the Arduino IDEの辺りからPCに合ったものをダウンロードする。
www.arduino.cc/en/Main/Software
- Arduinoのライブラリ
Library for Arduinoの最新版をダウンロードする。
dev.unlimitedhand.com/download.html
- Unity
最新版のものをダウンロードする。
unity3d.com/jp/get-unity/update
- Unityのプロジェクトファイル
「Simple Project Project –Graph–」をダウンロードする。
日本語版のページからではダウンロードできません、英語版のページから行う必要があります。
dev.unlimitedhand.com/unitycontents.html
また、Unity本体と開こうとするプロジェクトのバージョンが異なると警告が出ますが、気にせずに「Continue」を選択してください。
検証環境
- OS:Windows8.1
- Arduino:1.8.3
- Unity:5.6.1f1
1. USB経由でデバイスとPCを接続する
接続に関してはUSB接続とBluetooth接続の2種類がありますが、自分の環境ではBluetooth接続だと手順6が上手くいきませんでした。
なので、手順6が終わるまではUSBで接続した方が良いと思います。
2. UnlimitedHandにジェルを付ける
電気刺激を感じなくても問題ない場合は、ジェルを付けなくても構いません。
図では失敗していますが、デバイスの電極に貼り付けられている白いシールをはがしてからジェルを付けます(白いシールをはがすと銅色の電極が見えるようになります)。シールやジェルをはがす時に電極ごとはがさないように気を付けてください。
3.ダウンロードしたArduinoのライブラリを利用できるようにする
Arduinoの実行ファイル(arduino.exe)があるフォルダに「libraries」というフォルダがあるので、そこにダウンロードしたライブラリの「UH」というフォルダを入れます。
4.追加したライブラリを開く
Arduinoを起動して、「ファイル」->「スケッチ例」->「UH」->「Serial_Unity_Quaternion」をクリックする。
特に問題がなければ新規ウィンドウでファイルが開くと思います。
5.ポートを選択する
「Serial_Unity_Quaternion」プロジェクトの「ツール」->「シリアルポート」をクリックして、デバイスの接続に使用しているポートを選択します。
6.デバイスに情報を書き込む
画面左上の「マイコンボードに書き込む」をクリックして、デバイスに情報を書き込みます。
書き込み中はバイブレーションが作動します。
書き込みが完了した後はArduinoを終了しても問題ないです。
7.Bluetooth接続を行う
必ずしもBluetooth接続に切り替える必要はありません。USB接続でよい人はこの項目を飛ばしてください。
Bluetooth接続を管理する画面でデバイス名「RNBT-****」を選択します。
「パスコードを比べてください」という画面が出るので「はい」を選択します。
パスコードは毎回変わりますが気にする必要はないです。
ペアリングに成功すれば無線接続の準備は完了です。
8.ダウンロードしたUnityのプロジェクトファイルを開く
初回起動時にエラーが出ますが無視します。
特に問題なかった(´・ω・)
9.ゲームオブジェクトのスクリプトに値を設定する
UHゲームオブジェクトにあるUHスクリプトの「Port Name」に、現在デバイスを接続しているポートの名前を入れます。
10.Unityのプロジェクトを実行する
画面左下にエラーが出ていなければ接続できているはずです。
ボタンをクリックするとクリックしたものに応じた動作をします。
Vibration:振動
Stimulation:電気刺激
デフォルトの値での電気刺激は割と痛いのでLevel Downであらかじめ下げることをお勧めします。
UHゲームオブジェクトが見当たらない場合は「DontDestroyOnLoad」を展開すると出てきます。
スクリプトの値については「Update **** Flg」のようなチェックボックスを有効にしないと値が取得できません。また、AngleとQuaternionは同時に取得できません。
デバイスからの触覚提示とUHスクリプト内の数値が変わっている様子が見られれば、問題なく動作しています。
おまけ ソースを変更してみる
現状ではUHスクリプト(UnlimitedHandを制御するスクリプト)の「UH Gyro」、「UH Accel」、「UH GyroAccelData」の値が取得できておらず、チェックボックスも見当たらないと思います。せっかくなので、スクリプトを少々変更して値が取得できるようにします。
スクリプトの120行目辺りに
「updateUH3DGyroAccel();」を追加します。
372行目辺りに以下のコードを追加します。
//ジャイロセンサの値を読み込む
float[] gyroData = instance.readGyro();
UHGyro[0] = gyroData[0];
UHGyro[1] = gyroData[1];
UHGyro[2] = gyroData[2];
//加速度センサの値を読み込む
float[] accelData = instance.readAccel();
UHAccel[0] = accelData[0];
UHAccel[1] = accelData[1];
UHAccel[2] = accelData[2];
正常に変更できれば、ジャイロセンサの値と加速度センサの値が取得できているはずです。
他にもスクリプトの内容を変更することによって、例えば手順9で行ったポート番号の設定を手動ではなくスクリプト側で設定することが可能になると思います。
Unityで新規プロジェクトを立ち上げてUHスクリプトを利用したい場合は、ここからPlugin for Unityの最新版のものをダウンロードしてフォルダ内にあるUH.csを使用してください。
-
使ってみた感想について
一つのデバイスでいろんなことができるので便利だなぁと思いました。
公式が用意しているAPIも使いやすいです、おまけをやってみた人はわかると思いますが、UnlimitedHandを使用した開発はそこまで大変ではないと思います。
今回紹介した手順はUnlimitedHandの全てを説明したわけではないのですが、部分的でも参考になれば幸いです。
では(・ω・)/