Table of Contents

メガゴー追跡プロセスの制御

この文書では、様々なアプリケーションシナリオのニーズを満たすために、メガゴー追跡プロセスの各機能とパラメータを制御する方法について説明します。

開始前

tracker のワークフロー

tracker のワークフローは以下の通りです。

flowchart LR
  subgraph startup_graph[起動]
    direction TB
    sstart((セッション起動))
    create[ネイティブ作成]
    load(ターゲットの読み込み)
    verify[試用検証]
    init_g[[初期化]]
  end
  
  subgraph init_graph[初期化]
    direction TB
    init_{6DoF 初期化成功<br>または非 6DoF}
    init[[ローカル追跡初期化プロセス]]
    detecting[[検出]]
    tracking_g[[追跡]]
  end

  subgraph tracking_graph[追跡]
    direction TB
    tracking[[継続的な追跡]]
  end

  subgraph stopping_graph[停止]
    direction TB
    unload(ターゲットのアンロード)
    dispose[ネイティブ破棄]
    sstop([セッション停止])
  end

  sstart --> create --> load --> verify --> init_g
  init --> init_ --> |Yes| detecting --> tracking_g
  unload --> dispose --> sstop
  init_ --> |No| init

  startup_graph --> init_graph
  init_graph --> tracking_graph
  tracking_graph --> stopping_graph

プロセスは大まかにいくつかの段階に分けられます。

  • 起動:
    • セッションが起動した後、ネイティブ層の tracker が作成されます。
    • ターゲット自身の Start() の後、対応する tracker に読み込まれます。
    • 試用データの場合、試用資格のオンライン検証が必要で、検証に成功した後にのみ後続の段階に進みます。
  • 初期化:
    • 6DoF フレームソースを使用する場合、ローカル追跡初期化プロセスに入ります。
      • ローカル追跡初期化には多少時間がかかる場合があり、シーンの複雑さとデバイスの性能に関係し、通常はフレームソースの底層で使用されるアルゴリズムに関係します。
    • 非 6DoF フレームソースを使用する場合、ローカル追跡初期化段階はスキップされ、直接検出が開始されます。
    • 検出プロセスには多少時間がかかる場合があり、シーンの位置特定のしやすさとデータ収集とマッピングの品質に依存します。
    • デフォルトの設定では、この段階の内容は表示されませんが、ActiveController コンポーネントのオプションでこの動作を制御できます。
  • 追跡:
    • tracker は現在のブロックを継続的に追跡します。
    • デフォルトの設定では、この段階では追跡状態(TargetController.IsTracked == true)のターゲットノードの下の内容のみが表示されますが、ActiveController コンポーネントのオプションでこの動作を制御できます。
  • 停止:
    • セッションが停止した後、ターゲットがアンロードされ、ネイティブ層の tracker が破棄されます。

デバイスサポートレベルの調整

MegaGoTrackerFrameFilterMegaGoTrackerFrameFilter.MinInputFrameLevel プロパティは、メガがサポートする最低デバイスレベルを指定するために使用されます。

alt text

メガゴーはほぼすべてのタイプのフレームデータソースで実行できますが、異なるフレームデータソースは追跡結果に異なる影響を与えます。

デフォルトでは、メガはデバイスがサポートする最高レベルのフレームデータソースを選択して追跡します。デフォルト設定でのメガゴーをサポートするセッション は、6DoF と 5DoF のフレームデータソースをサポートするように設定されています。

メガが実行中にあるレベルのフレームデータソースをサポートするには、2 つの条件を満たす必要があります。

たとえば、デフォルトのセッションで 3DoF 追跡をサポートするには、以下のことが必要です。

また、たとえば、デフォルトのセッションから 5DoF 追跡のサポートを削除するには、以下のことが必要です。

条件を満たすフレームデータソースが利用できない場合、セッションの組み立てに失敗します。

現在のシステム状態の把握

デフォルトのセッション設定では、UI メッセージ が画面に表示され、その中にはメガゴーの状態情報が含まれています。

Tracker の状態は Mega Go: の横に表示され、たとえば TrackingVerifyingTrial などが表示されます。検出と追跡の過程では、下部に位置特定の更新情報も表示されます。

alt text

現在読み込まれているブロックの追跡状態は、Mega Go: の下に Block (<trackingStatus>): <name> (<id>) として表示されます。ここで、<name> はブロックの名前、<id> はブロックの ID です。trackingStatus は Tracking または NotTracking のいずれかで、それぞれ現在のブロックが追跡中かどうかを示します。

alt text

MegaGoTrackerFrameFilter.Status プロパティを使用すると、現在の状態を取得して追跡器の動作状況を把握できます。エラー状態が発生した場合は、MegaGoTrackerFrameFilter.Error を使用してエラー状態を取得し、適切な処理を行うことができます。

以下のコードは、これらのプロパティの使用方法と、アプリが関心を持つ一般的な異常状態の処理方法を示しています。

void HandleTrackerStatus()
{
    if (tracker.Status == MegaGoTrackerStatus.Error)
    {
        if (tracker.Error == MegaGoTrackerError.ServiceVerificationFailed)
        {
            // サービス検証に失敗しました。データが期限切れまたは無効になっていないか確認することをおすすめします(テスト版を正式版に変更した後、テスト版のデータは無効になります)。
        }
        else if (tracker.Error == MegaGoTrackerError.LocalVerificationFailed)
        {
            // ローカル検証に失敗しました。ターゲットファイルが完全であることを確認することをおすすめします。
        }
        else
        {
            // その他のエラー。
        }
    }
    else if (tracker.Status == MegaGoTrackerStatus.VerifyingTrial)
    {
        // 試用ターゲットの検証中です。検証が長時間完了しない場合は、ネットワーク接続を確認することをおすすめします。
    }
    else if (tracker.Status == MegaGoTrackerStatus.VIOInitializing)
    {
        // VIO 入力の初期化中です。初期化が長時間完了しない場合は、ユーザーに使用方法の最適化を促すことをおすすめします。
        // たとえば、「カメラを斜め前方に向け、デバイスを持って体を左右に大きく 5 回動かしてみてください。」
    }
}

MegaGoTrackerFrameFilter.LocalizationRespond イベントを使用すると、位置特定の更新情報を取得できます。

一時停止と再開

MegaGoTrackerFrameFilter.enabled を false に設定すると、追跡を一時停止できます。

デフォルトでは、追跡が一時停止されると、すべてのブロックノードの下の内容が非表示になります。

関連トピック