にほんブログ村 IT技術ブログ IT技術メモへ ブログ村 IT技術ブログへ ブログ村 オヤジ日記へ ブログランキング・にほんブログ村へ

Hololens①

Microsof Hololensのお仕事が舞い込んできた。

さっそく以下のサイトを参考に開発環境から構築してみましたが、
なぜかテストシーンも実機に転送できない。。新規でプロジェクトを作ってもビルドさえできず。。

試行錯誤した結果、直近でHoloToolkit-Unityのバージョンが5.5.2f1対応となったようで
クラスも含めて使い方がガラッと変わったみたい
githubを見るとUpdated 35 minutes agoとなってました。すごいタイミング・・。


2017/04/07現在の最新の開発環境は以下の通りです。

セットアップ

UNITY 5.5.2f1f:id:BelieveInYourself:20170418050902p:plain
https://unity3d.com/jp/get-unity/download/archive

HoloToolkit-Unityのバージョンも5.5.2f1
https://github.com/Microsoft/HoloToolkit-Unity

のようです。

VisualStudio Community 2015 
私はすでに入っていたので追加で
ユニバーサルWindowsプラットフォームのみを追加しました

実機があるのでHololensエミュレータはインストールしていません。


基本的な使い方

①UNITYを起動し、新規プロジェクトを作成する

②HoloToolkit-Unityを解凍し、Assets内の
HoloToolkit-Examples以外のすべてのファイルを①のAssets内にコピーする

③開発を行う


ビルド

①PCとHololensをUSBで接続する
②UNITY上のメニューバーにHoloToolKitがあるので、Buildwindowを選択
f:id:BelieveInYourself:20170418050328p:plain

③BuildVisualStudioSLNを実行すると、ビルドが始まり、
 プロジェクトディレクトリにWindowsStoreAppフォルダが生成される(これがビルド後のデータ)
④WindowsStoreApp内のHoloToolkit-Unity.slnをVisualStudioで起動する
⑤ビルド環境をRerease x86 Device にして実行するだけでHololens上のアプリケーションとして配置される
f:id:BelieveInYourself:20170418050902p:plain
⑥Hololensでアプリを起動して確認する

以上。簡単でした。

ようやくKINECT V2を触る

久々のUnity案件。
しばらくUnity自体触っていませんでしたが、いつの間にかUnity5になっていて
ビックリです。また、KINECT V2も購入後、放置しており開梱すらしていない状態。。

Unity4ではデバイス系を扱うにはProが必要な場合がありましたが、
Unity5はUnity4Pro相当の機能がUnity5 Personalで利用できるとのことで、
まさにこの時をまっていたようなタイミングでした。

また、今後、Kinect for Windows v2センサーの販売はなくなり
Kinect for Xbox One センサーとXbox One Kinect センサー用 Windows PCアダプターのそれぞれの販売になるようですね。

Microsoft 公式ストアでKinect for Windows v2を検索してみたら、15年4月23日時点ではまだ、購入できるようです。
Xbox One Kinect センサー用 Windows PCアダプターも既に販売されているので、Xbox One Kinect本体と接続して利用することで
Windowsで利用できるようになるそうです。(ちなみに同アダプタはV1では利用できずV2のみ可とのことでした)

Kinect及びXbox One Kinect センサー用Windows PCアダプターは下記、Microsoft 公式ストアで購入可能です。
(17時までに注文すれば同日発送可能とのことなので、便利ですね)

さっそくUNITY5,KINECT2を触ってみて、地味にいいなと思った点を簡単に書いてみます。

UNITY5
・従来のUnity Pro専用機能がUNITY5 Persona(Free版)で利用できるのが嬉しい!
・64Bit対応になっていて嬉しい!
・Unity5は複数起動して別々のプロジェクトを開くことが出きるので嬉しい!

KINECT V2
・Nearモードがなくなりいちいち切り替えなくて良い。
・画角が広がったので、チルトも不要(角度変えたければ手で手動で動かす)
Kinect for Windows SDK 2.0 Unity Pro Add-in便利!

特にUNITYとの連携は非常に強化されているようで、

Kinect for Windows SDK 2.0 Unity Pro Add-in
KinectをUnityで扱うためのラッパー(ライブラリ郡))や
https://www.microsoft.com/en-us/kinectforwindows/develop/downloads-docs.aspx

Visual Studio 2013 Tools for Unity
(VisualStudioでデバッグできるようにするためのツール)

https://visualstudiogallery.msdn.microsoft.com/20b80b8c-659b-45ef-96c1-437828fe7cf2

も提供されており、ますます開発しやすくなっています。


初期の環境作りについては以下のサイトが、良く纏められています。
http://www.naturalsoftware.jp/blog/8860


さぁ次回から何か作ってみたいと思います。
楽しみ☆です。

Kinect For Windows SDK 2.0 Public Preview終了

ずっとトライしようと思っていたPublic Preview版を
本日ようやくダウンロードしようと、アクセスしてみたところ
2014/10/21付けで該当ページがなくなっているようですね。。

Public Previewが終了し、正式なKinectSDK-v2.0_1409-Setup.exeとしてDLできるようになっているようです。

新しいページは下記となっており、Version:2.0.1410.19000 となっておりました。

http://www.microsoft.com/en-us/download/details.aspx?id=44561


Unityのアドイン(Kinect for Windows SDK 2.0 Unity Pro Add-in )は下記のサイトで見つけることができました。

http://go.microsoft.com/fwlink/?LinkID=513177


さて、前回の更新から殆どUNITYさわってなかったので、完全に忘れているように思います。
ZIGFUのV2対応について、情報がほとんどないようですので、こちらはあきらめて別のものを習得していきたいと思います。

少しややこしいですが、私の環境はKinect Fot Windows V1です。
今回SDKは2.0をインストールしましたが、あくまでもハードウェアとしてのKINECTは今のところV1を使っています。

いろいろ調べているとKinect Wrapper Package for Unity3D (Kinect1.7Wrapper.unitypackage)がほぼZIGFUと同じ感覚で
利用できるようで、ZIGFUからの移植であれば比較的、簡単に作業できそうでしたが、公式ラッパーではなさそうなので、
一旦利用を保留し、今回DLしたKinect for Windows SDK 2.0 Unity Pro Add-inを使ってみたいと思います。

インストールは下記の手順で行いました。

①SDK2.0をインストール

Kinect for Windows SDK 2.0 Unity Pro Add-inを解凍。

③Unityを開き新しいプロジェクトを作成し、「Assets|Import Package|Custom Package」から
Kinect.2.0.1410.19000.unitypackage」をインポートします

④パッケージがインポートできたら、「KinectView」の中身をAssetsへドラッグアンドドロップします
。Assets直下に「MainScene」があるので、それを開きます。

⑤MainSceneで動作確認


・・・動きません。うんともすんとも動きません。

再度、ZIGFUやKinect1.7Wrapperでプロジェクトを作り直してみるとちゃんと動くことが確認できました。
SDK自体は問題なさそうですが、Kinect.2.0.1410.19000では何度やっても動作しないようです。
念のため、SDK Browser v2.0 (Kinect for Windows)でも試してみましたが、全く動作せず。でした。
やっぱり、V1では2.0のアドインは動かないのでしょうか??
動いた人がいたら教えて下さい・・・。

Try Unity _12 KINECTアプリをビルド

今までずっとPLAYボタンで確認していましたが、
今日、初めて今まで作ってたKINECTアプリをビルドしてみました。

最初、かなりうれしくて、KINECT前で一人怪しげな動きをしていましたが、
つい、BANDICAMでキャプチャ動画を取っておこうと思い、WINDOWSボタン+TABキーで
デスクトップ画面に切り替え、BANDICAMを起動! さらにWINDOWSボタン+TABキーで
KINECTアプリ(UNITY)に切り替えると、あら不思議?アプリが見えません。

なぜ!?と思いタスクマネージャを見るとちゃんとあります。

ビルドについて、ちゃんと調べたことがなかったのと、
デフォルトのビルドでは「ウィンドウの設定」的なものが表示されるのも
嫌だったので、きちんと設定してみました。

Windows デスクトップアプリでの設定方法です。


1.メニューの FileBuild Settings... を選択すると、「Build Settings」のウィンドウが開きます。
2.「platform」の設定でPC, Mac and Linux Standaloneを選択し、「Switch Platform」を押します。
3.「Player Settings」を押すと、UNITYのインスペクターがPlayer Settingsに変わります。


Unityで構築するアプリの様々なパラメータを(プラットフォーム固有の)定義する場所が
Player Settings(プレイヤー設定)ということのようです。

Cross-Platform Properties
Company Name       :会社の名前などを設定する項目です
Product Name       :アプリの名前です。メニューバーに表示されます。
Default Icon       :アプリのアイコンを指定することができます。
Default Cursor      :アプリ上で使用するデフォルトのカーソル。
Cursor Hotspot      :デフォルトのカーソルの位置をピクセル単位で指定できます。


Resolution And Presentation
Defualt Is Full Screen  :画面サイズに合わせて自動起動する場合にチェック
Default Screen Width   :アプリのスクリーン幅
Default Screen Height  :アプリののスクリーン高さ
Run in background    :アプリがフォーカスを失った場合もゲームの実行を止めたくない場合にチェックする


Standalone Player Options
Default is Full Screen :アプリ起動時にデフォルトでフルスクリーンモードとしたい場合にチェック。
Capture Single Screen  :オンにした場合、マルチモニターの設定において2つめのモニタを暗くしない。


DisplayResolution Dialog
 Disabled        :ゲーム開始時にResolution (解像度)ダイアログを表示しない。
 Enabled        :ゲーム開始時にResolution (解像度)ダイアログを表示。
Hidden by default    :Resolution(解像度)Playerを、 "Alt"キーを押しながらアプリを起動した場合のみ表示できます。
Use Player Log     :デバッグ情報を含むログを書きこむ。
Resizable Window    :スタンドアロンのFlash Playerのウィンドウサイズをユーザーで変更することができます。
Mac App Store Validation:MacのApp StoreのReceipt Validationを有効化します。
Mac Fullscreen Mode	:Macビルドでフルスクリーンモードのオプション。
Fullscreen Window	:Unityが画面全体を覆うデスクトップの解像度でウィンドウ実行します。


Defualt Is Full Screenにチェック(フルスクリーン)
Default Screen Widthに任意の寸法
Default Screen Heightに任意の寸法
Run in backgroundにチェック(フォーカスを失っても実行する)
DisplayResolution DialogをDisabled(ダイアログを非表示)


無事解決しました。

Run in backgroundについては、
WEBカメラを使ったアプリでも要注意ですね。

Try Unity _11 UNITYでKINECTを使ってみる Zigfu編③

zigfuを使っていてカメラやスケルトン、ビューワ(カメライメージ)の
配置について少し気になったので、書いておきます。

僕の場合、下記のように配置することで、
_Manオブジェクトがきちんと表示されています。

_Main Camera(メインカメラ)
X:0、Y:0、Z:-10

_Man(スケルトンのトラッキングデータ)
X:0、Y:0、Z:-5

_ViewKiInect(Kinectからのキャプチャ画像)
X:0、Y:0、Z:0

しかし、上記の座標を下記に変えると
_Manオブジェクトが表示されません。

_Main Camera(メインカメラ)
X:0、Y:0、Z:0

_Man(スケルトンのトラッキングデータ)
X:0、Y:0、Z:5

_ViewKinect(Kinectからのキャプチャ画像)
X:0、Y:0、Z:10

_ViewKinectは正しく表示されていますが
_Manオブジェクトが表示されません。。。、
座標をトラッキングしても、XYZ座標は配置通り・・
見えないわけはないのですが・・・

マイナス方向に配置するとかの決まりがあるんですかね?
謎ですが。。

Try Unity _10 UNITYでKINECTを使ってみる Zigfu編②

今日はZigfuで各関節(ボーン)の位置の取得について考えてみたいと思います。

シーンは前回からものを利用することにします。

まず、右手の位置をトレースしてみます。

下記のスクリプト作成し、ヒエラルキービューにあるrighthandオブジェクトに
アタッチします。

   private GameObject righthand;

  void Start () {

   //righthandのオブジェクト(Sphere)を変数に格納
    righthand = GameObject.Find("righthand");

  }
	
  void Update () {

    //フレームごとにrighthandオブジェクトのx座標をコンソールへ出力する
    Debug.Log(righthand.transform.position.x);
   }

再生するとコンソールビューに右手の位置がトレースされると思いますので、
いろいろ右手を動かしてみてください。

今回のスクリプトは、右手だけに限定してたので、righthandにアタッチしましたが、
別にどこでも良いと思います。右手を頭より上にあげれば・・・などを行いたい場合は
MANオブジェクトにアタッチするのがベストでしょうか。

どんな振る舞いを何に与えるか。と、プログラムをすっきりさせるために
アタッチするもの(場所)は良く考えないといけませんね。

というわけで、右手を頭より上にあげればマテリアルを赤色にするというものを作ってみました。

  private GameObject head;
    private GameObject righthand;

    void Start()
    {

        //righthandのオブジェクト(Sphere)を変数に格納
        righthand = GameObject.Find("righthand");

        //headのオブジェクト(Sphere)を変数に格納
        head = GameObject.Find("head");


    }

    void Update()
    {

        if (head.transform.position.y < righthand.transform.position.y)
        {
            //右手が頭よりも上にあれば右手のマテリアルを赤色に。
            righthand.renderer.material.color = Color.red;        
        }
        else
        {
            //右手が頭よりも下にあれば右手のマテリアルを白色に。
            righthand.renderer.material.color = Color.white;
        }
        
    }


赤上げて。ってゆーか上げたら赤。

Try Unity _9 UNITYでKINECTを使ってみる Zigfu編

UNITYでの2Dの扱いはだいぶ分かったので、いよいよ3Dをやってみたい。
でも、基本的にゲームを作る気はあまりなくどうしようかと思案した結果
KINECTを学んでみることにした。

また、KINECTを扱うライブラリはMicrosoftの標準ライブラリなど、他にも存在するが、とりあえず簡単そうなところで、まずは、ZIGFUを使ってみた。


Zigfuについて

zigfu ZDK とは、Xtion や Kinect をWeb上やUnityで動かすためのライブラリ。

トライアル版は無料。商用利用可能な有償版は1ユーザあたり$200で購入の必要。

将来はFLASHにも対応する見たいですが、ずっとcoming soon...のまま。

また、厄介なのはドキュメントがない。(正確にはjavascript版のドキュエントしかない)

なので、JSのドキュメントを参考にするか、付属のサンプルを解析するしかない。と思う。

こういった点を踏まえると、今後、発売されるKINECT2でも対応できるのか、またはしてくれるのか...

などなど、不安要素も多いので標準のライブラリを習得する方が良いのかもしれない。

なので、タイトルはZIGFU編にしてみた。


導入編


① Zigfu公式サイトより、ライブラリをダウンロード。

② ダウンロードしたZDK_Unity40_1.1_trial.unitypackageをプロジェクトビューに
  ドラッグ&ドロップでインポートすると、Zigfu内のいろんなパッケージが一覧で表示され
  どれをインポートされるか聞かれるので、全て(ALL)選んで、インポート(import)。

  僕のPCでは、この時点でコンソールにエラーがでた。
  
  ダブルクリックすると、ソースコードが表示され、
  「'UnityEngine.GameObject.active' は古い形式です」みたいなことになってた。
  
  どうやら、UNITY4で修正された非推奨のメソッドがまだ使われていることが原因みたい。

  シーンを保存して、UNITYを再起動するとエラーは消えている。

  非推奨のメソッドは、推奨型に直すんだったら

  ActivateTrigger.cs

  targetGameObject.active = true; を
  ↓ 
  targetGameObject.Setactive(true) みたいに修正すれば良いみたい。
     

③ ZigFu/SampleScenesの中にサンプルのシーンが入っているので
  一通り遊んでみると面白い。


基本的な使い方


① まず、Zigfuの基本スクリプトをオブジェクト化し、ゲームオブジェクトとして登録します。
  GameObject → Create Emptyで適当な名前で、空のオブジェクトを作ります。
  僕はzigfuという名前にしました。そのままですね。(笑)

② Assets → Zigfu → Script → Zig をアタッチします。
  
  ZigはZigfuのメインスクリプトです。 これは必ず必要です。

インスペクタービューで以下にチェックを入れておきます。
  Update Depth  ・・・深度情報を更新するか
  Update Image  ・・・カメラ画像を更新するか
  Update LabelMap ・・・?なにこれ。わかる方ヘルプ。

③ 必要に応じて、いろいろアタッチできます。

  今回僕が実装したのは、ZigEngageSingleUserだけですが、
  他にもいろいろ実装できます。 

  Assets → UserEngagers → ZigEngageSingleUser ...シングルユーザを取得します
  Assets → Viewers → ZigUsersRadar・・・ユーザーまでの距離を取得します
  Assets → Viewers → ZigDepthViewer・・・深度ビューワを取得します

④ 次にKINECT+Zigfuで動かすオブジェクト(人)を作っていきます。
  GameObject→Create Emptyで適当な名前で、空のオブジェクトを作ります。
  僕はmanという名前にしました。

  このmanオブジェクトに
  Assets → UserControls → ZigSkeletonをmanにアタッチ。
  
  Updata Joint Positions・・・ジョイントポジジョンの更新
  Updata Root Positions・・・ルートポジションの更新
  Updata Orientation・・・方向?

  
➄ ヒエラルキービューからZigfuを選択。インスペクターでZigEngageSingleUserを確認し、
  Engaged Users項目のSizeプロパティに1をセットします。するとElement0という項目が出てくるので
  ここにmanオブジェクトをアタッチします。

  これで、zigfuとmanオブジェクトの紐つけができました。
  Playボタンを押して、エラーがでないことが確認できますが、何も表示されないと思います。
  これはmanオブジェクトが空っぽの状態なので、何も表示されていないだけです。

⑥ では、MANオブジェクトにボーン(関節)を付けていきましょう。

  GameObject → Create Other → Sphere(CubeでもCapsuleでも)を追加します。
  少し大きいので、Scaleを0.2ぐらいにしておきます。
  オブジェクトをDeplicate(複製)して、全部で18個のSphereを作ります。
  また、分かりやすくするため作成したSphereはmanオブジェクトの子としておくとよいと思います。
  
  作成したSphereをhead、neck、torso、waist、leftcollar、lefthand、leftsholder、lftelbow、
  rightcollar、righthand、rightsholder、rightlbow、leftknee、leftfoot、leftankle、
  rightknee、rightfoot、rightankleという名前にしておきます。

manオブジェクトを選択し、インスペクターのZigSkeltonを確認し、
  Head、Neckなどに、先程作成したSphereをそれぞれアタッチします。

⑦ メインの位置をmanオブジェクトの位置を調整して、Playビューを押すと下記のように表示されるはず。
  ここまでノープログラム。sphereに色やら画像などのテクスチャーを与えれば、これだけでいろいろできそうです。



感想

 ・動いたときはかなりうれしい。
 ・ドキュメントがないのはやっぱり辛い。
 ・英語の知識もあった方が良い。僕は関西弁以外わからない。