Stereo Labs のZED を個人購入した際の話


本記事は3D Sensor Adevent Calenderの第21日目です。

#目的
* 室外でも対応するセンサが欲しかった

  (20m まで測距できると書いているけど、どの程度良いのかの調査も兼ねて)

* 輸入代行のページで見た料金と StereoLabs のページで記載している料金で２倍近くお金が違うため個人で購入できれば安く済むかと思って実行した。


#結果
* 料金は？ → 買った時は、本体の値段は $449。今は料金が変わっている[様子](https://www.stereolabs.com/store/)
　+ 輸送料(2018年時点では、日本だと$30だった)

* 住所の記入に関しても、ローマ字で対応できた。(しっかり書く必要はあったが)

* 購入時に届いたメール内容は以下になります。
<img width="729" alt="zed_order.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/6618e2d1-7d91-4a91-f3f9-00cd09b86254.png">

　+ 届いた際の手数料？(記憶が曖昧だけど、着払いで¥2,200 ほどだったような...)

* 到着までの期限としては、到着まで 2週間 ほどくらいかかった。

* やっぱり到着しているか不明なためか、Stereo Labs から荷物が届いたかどうかの確認メールが来ていた。

##ZED SKD をインストールした際のアプリ一覧。

###Diagnostic

  各種動作チェック用のツール

![zed_dialog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/7e1f275c-9986-273f-abf7-5644f3730357.png)

###Caliblation

  カメラ補正処理 : ディスプレイに向けてZEDカメラを向けてキャリブレーションする。
  ![Calibration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/60a23666-1b65-6a07-a565-56481ecef0b9.png)

###Depth Viewer

  深度画面の表示
![depth1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/1d7cda95-0357-54ba-d759-720b75c3e997.png)

###Tracking

   Kinect Fusion のロジックでのトラッキング処理?(名前からして)
![kf3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/ed2d7c04-e5e5-9407-d991-f06cacf55091.png)


##動きとか取得とかの感想
Depth/kf を動かしてみたが、...

  [Q&A](https://support.stereolabs.com/hc/en-us/articles/213074149-Spatial-Mapping-Best-Practices)にも記載されているが

　* カメラの画像を使って点群を作成しているので、暗い箇所はうまく取得できない。  
　* 一度トラッキングから外れると認識が一気に外れて取り直しになる。

なので、人が持って動かすというのには向かなくて、カメラを固定した状態で移動させて使うのを想定した使い方になる印象を持った。
(移動するロボットへの取り付け、VR機器への取り付け)

その点は少しがっかりした感がある。

##動かす際の注意
  1. SDK が使用する CUDA のVersion に注意
     (10.1 とか Minor Version が違っても動かない)

  2. USB の電源供給に注意

     (認識しない場合、給電するタイプのUSB で試してみることを進めます。)

     (確認用のツールで動作しているかチェックする)

##動作できる環境・言語について
OS は Windows か Linux の２つのみ
* Mac OS が無い...

CUDA が動作する機器
* 一応カメラ単体であれば他の環境でも動作できるらしい。
  (OpenCV を利用して対応する)

###Unity(5.6.1 to 2018.2)
→ Qiita に[記事](https://qiita.com/GONBEEE_project/items/dff1d9b42b1493687f1b)があるためそちらを参照。

###ROS(stereo labs の github のページを見ると　ROS2 もできる?)
→ 以下のBlog に[記事](https://dronebiz.net/tech/zed_camera)があるためそちらも参照。

###Python

と色々な出来る様子。

(PCL のサンプルも存在する。)
![zed_pcl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/c4adf7b4-0896-4e96-729a-4c8438f84793.png)

* 試しに動かしてみると、一応点群としては表示はできている事までは確認できた。

## 補足部分について
###Unreal Engine
ZED2.6までは UE 4.19、ZED2.7/2.8 では UE4.21をベースにした StereoLabs カスタムのエンジンを使用して対応する。

環境構築手順

* 今回確認した環境は、Windows 10 で確認。

* Visual Studio 2017 が必要なため、先にインストールをしておく事。

* 注意点として、Stereolabs 側で用意したコードをビルドする対応になる。
　(Epic Games で用意している Launcher からの Install だと動作しない)
![EpicGL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/fa688cb4-8923-81aa-1aff-a236f007948b.png)

* プロジェクトの設定で日本語のパスが入っていると、ビルド時に失敗します。

1.　Stereolabs の github から UE4 のコードを clone してくる。
  * SDK2.7/2.8 の場合は Unreal バージョンが 4.21 の物を使用する。
  
  ```cmd
  git clone -b zed-4.21 https://github.com/Stereolabs-Unreal/UnrealEngine.git
  ```

  * private リポジトリとなるため、先にEpic Games のページに行ってユーザー登録を行うする必要があります。

  * 方法に関しては、UE4の[公式](https://docs.unrealengine.com/ja/GettingStarted/DownloadingUnrealEngine/index.html)に記載されているためそちらを参照してください。)

2.　カスタムソースコードのビルト

   Windows の場合は、

　　Setup.bat, GenerateProject.bat

   の順に実行して、UE4.sln を作成する。

　　あとはビルドになるのですが、結構時間がかかります。(1-2時間くらい)

* ビルド時の注意としては、sln プロジェクト立ち上げ時の Visual Studio 起動時に管理者権限をつけて実行する必要があります。

  (Install 先フォルダのアクセス権限の関係から)　
  ビルド方法に関しても、UE4公式のドキュメントに記載されている内容と同一のため詳しく知りたい場合は[公式](https://docs.unrealengine.com/ja/Programming/Development/BuildingUnrealEngine/index.html)を参照してください。

ここまでの参考ページ
https://www.stereolabs.com/docs/unreal/building-the-engine/

3.　本体の実行を行い、 動作させるためのプロジェクトを作成、プラグインの追加

  新規プロジェクト/C++ タブに移動後、プロジェクト名を入れて「プロジェクトを作成」ボタンを押す。

![CreateProj.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/5d85e9ed-97e2-a259-d5c0-8baa3ab8bdb0.png)

  * スターターキットは無しに設定する。
  * 今回は参考ページに沿って MyApp という名前で作成した。

  プロジェクトを作成すると、別の visual studio が立ち上がるので、 プロジェクト作成先のフォルダに移動する。

　プロジェクトが作成されたフォルダ直下にプラグインフォルダ作成し、
　[zed-plugins](https://github.com/stereolabs/zed-unreal-plugin)のソースコードをコピーしてくる。

　再度、 uproject に戻り、 visual studio のプロジェクトファイルの内容を更新する。

  * プラグインを確認すると、モジュールが入っていることが確認できる。
![plugin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/e6b66424-6e97-6651-de21-9efb75bd547a.png)

ここまでの参考ページ
https://www.stereolabs.com/docs/unreal/building-your-project/

4.　プロジェクト設定の変更

UE4 の画面が表示されるので設定を変更する。

  * マップ&モード設定変更
![Setting1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/e9f6ab01-2705-2f4a-dd22-c501672dcc32.png)

  * 基礎設定変更
![Setting2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/705f98df-960c-735f-e130-5d6cb0346763.png)

次に Config フォルダの中身を変更・追加する。

* DefaultEditor.ini の編集。(Render に関する設定項目を記述する。)
![Setting3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/c43529b5-689f-b689-061e-9063bf1232d2.png)

* DefaultScalability.ini を新規に作成して、設定に関する項目を記述する。
![Setting4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/52c1d56c-9c79-02e3-73ab-469e31165097.png)

エディタに戻って、描画設定を変更する。
* 描画時の品質設定
![Setting5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46426/183deaf5-c756-cc27-3436-0a954e62315f.png)

設定に関する参考ページは以下になります。
https://www.stereolabs.com/docs/unreal/project-setup/

5.　コンテンツを作成して、VRモードで実行する。

* VR モードでの実行しか対応していない様子。

  VR の実機を持っていないため動作確認までは出来なかった...

  (どこかのタイミングで内容は更新します。)

コンテンツ作成に関する参考ページは以下になります。
https://www.stereolabs.com/docs/unreal/creating-mixed-reality-app/

参考ページ
[Q&A](https://support.stereolabs.com/hc/en-us/)
[トラブル対応一覧](https://support.stereolabs.com/hc/en-us/categories/200856185-Troubleshooting)

まとめ
・記事書くのに Stereolabs のページ見てたら、ZED2 なるものが...
・Azure Kinect 購入する場合は、余程急いでいない限り日本で購入可能になるまで待てば面倒な手間とお金が掛からなさそう。
・あんま技術内容書いてない...

明日12/22(日)は UnagiHuman さんで「AzureKinect BodyTrackingSDK 0.9.5をUnityで実行可能にする」です。