Hi5 グローブを２台以上同時に使う

### はじめに

Hi5 グローブの製造元である Noitom 社が販売している Neuron には、ネットワーク経由でデータを別のマシンに転送する機能がありますが、同じ Noitom 社製の Hi5 グローブにはそういった機能がありません。

２台以上の Hi5 グローブを使用して同時にキャプチャーを行おうとする場合には、Axis Neuron と同じようにネットワーク経由でデータを転送するソフトウェアが必要になります。



<!--
https://qiita.com/sator_imaging/items/846157216b51952ff722
-->





#### Hi5 Glove のデータを別の PC にストリーミングする

**Hi5 Remote** は、Noitom 社製の Hi5 グローブで収録されたモーションキャプチャーデータを、ネットワーク経由（UDP）で別のマシンにリアルタイムで転送するソフトウェアです。


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Hi5 Glove Remote アプリ<br><br>ネットワーク経由での同期テスト <a href="https://t.co/Tml8fmTJXh">pic.twitter.com/Tml8fmTJXh</a></p>&mdash; サトー (@sator_imaging) <a href="https://twitter.com/sator_imaging/status/1145809495949340672?ref_src=twsrc%5Etfw">July 1, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>








<!--more-->





## Hi5 Remote の使い方

Hi5 グローブを PC に接続し、`NetworkConfig.txt` を設定してから `Hi5Remote.exe` を実行します。




- [Hi5 Remote の使い方](#hi5-remote-の使い方)
   - [NetworkConfig.txt の編集](#networkconfigtxt-の編集)
      - [設定する上での注意点](#設定する上での注意点)
      - [設定ファイルに問題がある場合](#設定ファイルに問題がある場合)
   - [ショートカットキー](#ショートカットキー)
   - [実行中はウインドウをアクティブに](#実行中はウインドウをアクティブに)
   - [デバッグ用ソフトウェア](#デバッグ用ソフトウェア)
- [ソフトウェアの仕様](#ソフトウェアの仕様)
   - [動作環境](#動作環境)
   - [転送データ仕様](#転送データ仕様)
   - [稼働時間](#稼働時間)
   - [バイトオーダーが違うマシンが混在している場合](#バイトオーダーが違うマシンが混在している場合)
- [組み込む上での参考資料](#組み込む上での参考資料)
   - [Hi5 Remote で受信したデータの適用](#hi5-remote-で受信したデータの適用)
- [おわりに](#おわりに)
      - [こちらもどうぞ](#こちらもどうぞ)




### NetworkConfig.txt の編集

**Hi5 Remote** と同じフォルダにある、`Hi5Remote_Data/StreamingAssets/` フォルダの中に、接続先を設定をするためのファイル `NetworkConfig.txt` があります。

`NetworkConfig.txt` をメモ帳などのテキストエディタで開き、以下を参考にして接続先の情報をテキストファイルの最初の行に入力します。


> `[IPアドレス]:[ポート]@[最大送受信レート/秒]`
> 例： `127.0.0.1:54321@200`



<p><img src="https://dl.dropbox.com/s/rqhcvk0gu5uq54d/Hi5Remote_NetworkConfig.png" /></p>


#### 設定する上での注意点

- ポート番号は 32768 から 61000 の間に設定することをお勧めします。
- 2 台以上のマシンから **Hi5 Remote** を使用して１台のマシンに向けてデータを転送する場合は、ポート番号がそれぞれ異なる数字になるように設定する必要があります。



入力が終わったらファイルを保存して、**Hi5 Remote** の実行ファイルを起動します。

起動すると、`NetworkConfig.txt` で指定した IP アドレスのポートに対してデータ転送を開始します。


<p><img src="https://dl.dropbox.com/s/u5bv56rv41atp0o/Hi5Remote_Hero.png" /></p>




#### 設定ファイルに問題がある場合

設定ファイルに問題がある場合は、アプリの左下に表示される IP アドレスが、`127.0.0.4` ポートが `49494` になります。

IP アドレスが意図したものと違った場合は、`NetworkConfig.txt` を再度編集してから **Hi5 Remote** を再起動してください。



### ショートカットキー


リモート・デバッグソフトウェア共に、以下のショートカットキーを使用する事が出来ます。

- **Shift + R**
   - `NetworkConfig.txt` を読み込み直し、新しい設定でネットワーク接続を行います。

- **Shift + H**
   - ウインドウに表示されている各種情報を非表示にします。




### 実行中はウインドウをアクティブに

Unity を使用したソフトウェアには、依然としてウインドウがアクティブになっていないとフレームレートが落ちる、という問題があります。

稼働中は可能な限り、**Hi5 Remote** ウインドウをアクティブにした状態にしておくことをお勧めします。



※ 他のウインドウがアクティブな場合は以下の通り注意を促す表示がなされますが、ネットワーク経由でのデータのストリーミングは継続して行われています。

<p><img src="https://dl.dropbox.com/s/tlcbsobdcpfkq6x/Hi5Remote_Warning.PNG" /></p>



### デバッグ用ソフトウェア

動作確認用にデバッグ用のソフトウェアが付属しています。


**Shift + D** のショートカットキーを押すことで、

- テストアニメーションをネットワーク越しに転送するモード
- 転送されたアニメーションを受信して確認するモード

を切り替えることができます。



<p><img src="https://dl.dropbox.com/s/jc2qme2txk8l3vx/Hi5Remote_Debug.png" /></p>






## ソフトウェアの仕様


### 動作環境

Windows 10 の 64bit 版で動作を確認しています。

ネットワークは無線LAN（Wi-Fi）ではなく、有線接続の LAN 環境での使用をおすすめします。



### 転送データ仕様

転送するデータは以下の通りです。

> 8 bytes header
> 4 bytes float * Quaternion xyzw * 20 joints * 2 hands

１度のデータ転送で計 648 バイトのデータを送信・受信します。
秒間 200fps でデータを転送した場合には、１秒間に 129.6KB、１分間で約 7.8MB のデータを送信するため、**1Mbps** （ビット／秒）のネットワーク帯域が必要になります。



### 稼働時間


長時間運用のテストでは送信側＆受信側共にフレームレートが極端に落ちることなく、約４時間半の長時間稼働を確認しています。

※ 受信側はデバッグアプリでの確認の為、受信機能を組み込んだ本試験は別に行う必要があります。


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">テストアニメーションを使用して、約４時間半の連続稼働<br><br>フレームレートは送信側は終始 180 前後<br><br>受信側の HUD の Frames Ignored は、直近で処理したフレームよりも前に送信されたデータを受信した数 <a href="https://t.co/pk1dYCNLlm">pic.twitter.com/pk1dYCNLlm</a></p>&mdash; サトー (@sator_imaging) <a href="https://twitter.com/sator_imaging/status/1145811394421374976?ref_src=twsrc%5Etfw">July 1, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



### バイトオーダーが違うマシンが混在している場合

バイトオーダーが違うマシンが混在している環境では上手くデータが転送できません。

設定に問題が無いのにデータが転送できない場合は、アプリ右上の経過時間のすぐ下に表示されている、**Little Endian** もしくは **Big Endian** の表記が、各マシンで統一されているのかを確認してください。



--

## 組み込む上での参考資料

Unity の Transform を数多く扱う際のパフォーマンスの最適化については、以下をご覧ください。


- [Unity の Transform のパフォーマンス最適化まとめ - Qiita](https://qiita.com/sator_imaging/items/ff5811885f515a0a4998)
   <iframe
      class="embed-card embed-webcard"
      scrolling="no"  frameborder="0"
      style="
         display: block;  border: none;
         margin: 10px 0px;
         width: 100%; height: 155px;
         max-width: 500px;
      "
      src="https://hatenablog-parts.com/embed?url=https://qiita.com/sator_imaging/items/ff5811885f515a0a4998">
   </iframe>



### Hi5 Remote で受信したデータの適用

多くの Transform 毎フレーム更新することになるので、上記リンク先を参考に受信用のコンポーネントを組み込んでください。




## おわりに

生放送等で Hi5 グローブを複数台使ってみたい、使おうと思っている方、おりましたらご連絡など頂ければ！




--
#### こちらもどうぞ

- [#VTuber開発まとめ - Qiita](https://qiita.com/sator_imaging/items/5d3b4466a2a1539184d0)
   <iframe
      class="embed-card embed-webcard"
      scrolling="no"  frameborder="0"
      style="
         display: block;  border: none;
         margin: 10px 0px;
         width: 100%; height: 155px;
         max-width: 500px;
      "
      src="https://hatenablog-parts.com/embed?url=https://qiita.com/sator_imaging/items/5d3b4466a2a1539184d0">
   </iframe>