プログラマー見習いの独り言

PCに関することからアイドルに関することから様々

久しぶりの投稿 part.2

お久しぶりです。

長らく更新できておりませんでした。すみません。

 

大学院を卒業し、ソフトウェアエンジニアとして

モバイルアプリの設計開発の業務をしています。

 

VRからは離れてしまいましたが

これまで通り最先端の技術にはどんどん触れていきたいと思っていますので、また自分のペースで更新していければなと思っています。

HMDなしでViveトラッカーを使いたい

はじめに

Viveトラッカーを使って様々な場面で位置トラッキングをしたい。

でも、HMDは使いたくない。そんなときのお話。

(研究の過程で調べたことをまとめた感じ)

 

使用したもの

HTC Vive(Viveトラッカー)

SteamVR 

 

参考にしたページ

SteamVR Tracking without an HMD | Triad Semi Help Center

 

shop-0761.hatenablog.com

手順

  1. SteamVRなどHTCViveのセットアップに必要なものをインストール
  2. SteamVRの設定を変更する
    • 設定ファイルの場所:C:\Program Files (x86)\Steam\steamapps\common\SteamVR\resources\settings\default.vrsettings
    • requireHmd を false にする
    • activateMultipleDriversをtrueにする
  3. Viveトラッカー同梱のドングルをPCに接続する
  4. SteamVRを再起動

 

位置の取得

OpenVR APIを使用

C#, Pythonで取得可能であることを確認

 

C#の場合は以下を参考

Initializing OpenVR manually in C# :: SteamVR Developer Hardware General Discussions

以下のコードで、トラッキングされているデバイスの位置を取得できる(allPosesに結果が格納される)

vrSystem.GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin.TrackingUniverseStanding, 0, allPoses);

ラッキングの状態を取得することもできる(allPoses[deviceID].eTrackingResult)

結果は以下のEnum

public ETrackingResult
{
  Uninitialized=1,
  Calibrating_InProgress=100,
  Calibrating_OutOfRange=101,(トラッキング範囲外)
  Running_OK=200,(トラッキングされている)
  Running_OutOfRange=201,
}

 

Pythonの場合は以下を参考(pyopenvrを使用)

github.com 

 

注意点とか

ドングルの使用を忘れない

HMD使用時は、HMDに2個分のドングルが内蔵されているため、接続ができるが

Viveトラッカー単体の使用の際にはその個数分のドングルが必要

 

 Viveトラッカー単体で位置トラッキングできると

ロボットとかドローンとかいろんなものの位置トラッキングに使えて夢が広がります

C#でViveトラッカーの位置や情報を取得するコードを書いたので

暇な時にでもリファクタリングしてGitHubにあげれるようにしたい(願望)

UnityでHTC Vive対応のコンテンツを開発 その1

はじめに

Unityで、HTC Vive対応のコンテンツを開発する方法について、

メモ程度に書いていこうと思います。

使用したもの

HTC Vive

Unity 5.5.3

SteamVR Plugin 1.2.1

 

参考にしたページ

Unity+HTC Vive開発メモ - フレームシンセシス

 

準備

  1. Unityをインストー
  2. 新規プロジェクトを作成する。
  3. SteamVR PluginをAsset Storeからダウンロードし、インポートする。

    推奨設定に変更させようとするウィンドウが出るので、左下の「Accept All」をクリックする。

  4. 自動追加されるカメラを削除し、SteamVR/Prefabs/[CameraRig]プレハブをシーン内に設置する。
  5. 同様に、[Status]プレハブ、[SteamVR]プレハブも設置する。

これでシーンを再生すれば、HTC Viveと接続されてコンテンツがHMDで再生されるはずです。

 

コントローラの取得

コントローラの位置

[CameraRig]の下に、Controller (left)とController (right)というゲームオブジェクトがあり、

このtransformを利用することで、位置が取得できます。

コントローラの入力

Unity+HTC Vive開発メモ - フレームシンセシス

こちらのサイトには以下のようなサンプルプログラムが掲載されています。


using UnityEngine;

public class ControllerExample : MonoBehaviour
{
    void Update()
    {
        SteamVR_TrackedObject trackedObject = GetComponent<SteamVR_TrackedObject>();
        var device = SteamVR_Controller.Input((int) trackedObject.index);

        if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Trigger)) {
            Debug.Log("トリガーを浅く引いた");
        }
        if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger)) {
            Debug.Log("トリガーを深く引いた");
        }
        if (device.GetTouchUp(SteamVR_Controller.ButtonMask.Trigger)) {
            Debug.Log("トリガーを離した");
        }
        if (device.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad)) {
            Debug.Log("タッチパッドをクリックした");
        }
        if (device.GetPress(SteamVR_Controller.ButtonMask.Touchpad)) {
            Debug.Log("タッチパッドをクリックしている");
        }
        if (device.GetPressUp(SteamVR_Controller.ButtonMask.Touchpad)) {
            Debug.Log("タッチパッドをクリックして離した");
        }
        if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Touchpad)) {
            Debug.Log("タッチパッドに触った");
        }
        if (device.GetTouchUp(SteamVR_Controller.ButtonMask.Touchpad)) {
            Debug.Log("タッチパッドを離した");
        }
        if (device.GetPressDown(SteamVR_Controller.ButtonMask.ApplicationMenu)) {
            Debug.Log("メニューボタンをクリックした");
        }
        if (device.GetPressDown(SteamVR_Controller.ButtonMask.Grip)) {
            Debug.Log("グリップボタンをクリックした");
        }

        if (device.GetTouch(SteamVR_Controller.ButtonMask.Trigger)) {
            //Debug.Log("トリガーを浅く引いている");
        }
        if (device.GetPress(SteamVR_Controller.ButtonMask.Trigger)) {
            //Debug.Log("トリガーを深く引いている");
        }
        if (device.GetTouch(SteamVR_Controller.ButtonMask.Touchpad)) {
            //Debug.Log("タッチパッドに触っている");
        }
    }
}

このようなスクリプトを書いて、Controller (left)とController (right)にアタッチすれば、入力が取得できるようです。

個人的には、deviceを取得する部分のコードを書くのがめんどくさいので、

以下のような拡張メソッドを作って使用しています。(SteamVR_TrackedObjectの代わりにSteamVR_TrackedControllerを使用しています。)


public static SteamVR_Controller.Device GetDevice(this SteamVR_TrackedController self)
{
    return SteamVR_Controller.Input((int)self.controllerIndex);
}

また、クリックなどの入力は、イベントを使用して以下のようにも書くことが出来ます。


private void SetControllerEventExample()
{
    trackedController.TriggerClicked += new ClickedEventHandler(DoTriggerClicked);
    trackedController.TriggerUnclicked += new ClickedEventHandler(DoTriggerUnClicked);
    trackedController.MenuButtonClicked += new ClickedEventHandler(DoMenuButtonClicked);
}

public void DoTriggerClicked(object sender, ClickedEventArgs e)
{
    Debug.Log("トリガーを引いた");
}

public void DoTriggerUnClicked(object sender, ClickedEventArgs e)
{
    Debug.Log("トリガーを離した");
}

public void DoMenuButtonClicked(object sender, ClickedEventArgs e)
{
    Debug.Log("メニューボタンをクリックした");
}

 

とりあえず今回はこのへんで

次回はコントローラからRayを出す話とかですかね

久しぶりの投稿

お久しぶりです。

実生活が忙しく全然更新できてませんでした。

 

先日大学を卒業し、大学院に進学しました。

引き続き点群とかVRとかの研究を続けていこうと思います。

 

真面目な内容以外にも、色々更新していければな、と思っています。

VTKを自分でビルド

ymremio.hatenablog.com

上のブログの続きです

はじめに

前回のブログでも書いたのですが、PCLにVTKがうまく連携されなかったので、バージョンを下げてみて自分でビルドしてみた

参考は前回同様このサイト

Point Cloud Library 1.8.0 has been officially released | Summary?Blog

各依存ライブラリについての導入方法も書いてあります

導入方法

ダウンロード

VTK - The Visualization Toolkit

ここから、自分の使いたいバージョンのVTKをダウンロードしてくる

今回わたしは、6.3を使用します

ZIPファイルをダウンロードしてきたら展開します

CMakeを使うので、ソリューションファイルの出力先となる「build」フォルダを作成しておきます

CMake

  • Where is the source code:ソースコードの入力先(展開したフォルダ)
  • Where is build the binaries: ソリューションファイルの出力先(先程作成したbuildフォルダ)

というように指定します

 

次に、[Configure]を押してターゲットとなるVisual Studioを選択します

自分の使いたいバージョンのVisual Studioを選択しましょう

ちゃんと64bitの人は、Win 64と書かれてる項目を選択しましょう(わたしはここで選択ミスしてはまった笑)

 

Configureが終わって、画面が真っ赤になったら各種設定をします

たくさん項目がありますが、確認すべきところだけ押さえれば大丈夫でしょう

 

 チェックを外す項目

  • BUILD_SHAREED_LIBS
  • BUILD_TESTING

 

項目を編集するところ

  • CMAKE_CONFIGURATION_TYPES Debug;Release
  • CMAKE_INSTALL_PREFIX C:\Program Files\VTK (or C:\Program Files (x86)\VTK) :これがインストール先となる

 

追加する項目

Name: CMAKE_DEBUG_POSTFIX
Type: STRING
Value: -gd
Description:  

 

ここまで確認が終わったら、[Generate]を押してソリューションファイルを作成しましょう

ビルド

最後にVisual Studio管理者権限で起動してVTKのソリューションファイルを開きます

ALL_BUILDを選択しビルドした後、INSTALLを選択し、INSTALLのみをビルド

特に問題がなければこれでVTKのインストールが完了します

 

パスの設定

あと、最後の最後にパスの設定をします

  1. 環境変数VTK_DIRを作成してVTKのパス(C:\Program Files\VTK)を設定

  2. 環境変数Pathに%VTK_DIR%\binを追加

 

これで完了です、お疲れ様でした

おわりに

 このブログについてはこちら

ymremio.hatenablog.com

 

PCLの導入

はじめに

センサ使って空間をスキャンして、取得した点群を処理して…みたいなことをしたいなーって思ったのでとりあえずPCLの導入

PCLとは

詳しい説明は省きますが、誰でもフリーで使用できる、点群の様々な処理が包括されているライブラリです

公式サイト ⇒ PCL - Point Cloud Library (PCL)

公式で配布されているインストーラはバージョンが古く、Visual Studio2015での使用に対応してません

2016年6月現在PCLの最新バージョンは1.8.0で、それを使用したインストーラを作成してくださっている方がいらっしゃるので、

そちらを有り難く使わせていただきましょう

(2018.12.11 追記:バージョンの更新に伴い、リンクが切れていたので、トップページのリンクに変更した)

unanancyowen.com

 

導入方法

自分の環境に対応したAll-in-one Installerをダウンロードしてインストール

ただこれだけです、簡単ですね

しかしここからが大変

プロジェクトを作成する際にPCL関連のファイルを参照させなければなりません

ここらへんの設定はCMakeというものを使って行います

ダウンロードはこちらから ⇒ CMake

基本的な、PCLを使用したプロジェクトに対するCMakeLists.txtの書き方は以下の通り

基本的な、PCLを使用したプロジェクトに対するCMakeLists.txtの書き方

 

とりあえずはこんな感じで導入できます、できるはずです、、、、

(どうしてVTKの連携ができないんだろう)

 

おわりに

このブログについてはこちら

ymremio.hatenablog.com

 

追記

2016.07.16

再度構築し直してみたら、特に問題なく構築できたので

わざわざ以下のことをする必要はないかもしれません

 

2016.07.02

VTKの連携できない問題は、VTKのバージョンを7.0から6.3に下げて、自分でビルドすることで、とりあえず解決できました

ビルド方法については後日別ブログで書きます

 

ymremio.hatenablog.com