Table of Contents

ヘッドセット拡張の実行検証(bring-up)

EasyAR をデバイス上で動作させるために、最も重要であり同時に最も扱いにくい作業は、入力データの正しさを確保することです。新しいデバイスで初めて EasyAR を実行する際、問題の 90% 以上は誤ったデータに起因します。

可能であれば、EasyAR が存在しない状態で、デバイスおよびデバイスインターフェースだけを使ったテスト方法により、データの正しさを直接検証することを推奨します。この記事では EasyAR の機能を使ってデータを検証する経験的な方法を紹介します。この過程は 外部入力フレームデータ の理解に役立ちますが、EasyAR 自体にも誤差があるため、この結合されたシステムでデータの正しさを検証することは最良の選択ではありません。

始める前に

基本機能サンプルを実行する

デバイス上で初めて EasyAR の実行検証を行う場合は、これらの機能を必ず順番に実行してください。特に、急いで Mega を実行しないでください。Mega には一定の許容性があり、短時間の実行や単一の現実シーンでの実行では問題に気づきにくいためです。

  1. 目の前に表示される session 情報を確認し、予期しない状況が発生していないこと、また frame count が継続的に増加していることを確認します。

  2. Image、つまり 画像トラッキング 機能を実行し、スマートフォンでの実行結果と一致することを比較確認します(iPhone を基準にすることを推奨)。トラッキング状態とターゲットのオーバーレイ表示に注目してください。

    モーションフュージョンを有効にしていない場合、画像トラッキングの結果には明らかな遅延感がありますが、これは想定どおりです。移動中の挙動が正しく、デバイスが停止したときに位置が合えば問題ありません。

  3. Dense、つまり 稠密空間マップ 機能を実行し、スマートフォンでの実行結果と一致することを比較確認します(iPhone を基準にすることを推奨)。メッシュの位置、生成速度、品質に注目してください。

    入力データのフレームレートが低い場合、メッシュ生成速度は遅くなりますが、品質が明らかに低下することはありません。

    この機能は一部の Android デバイスでは実行できず、メッシュ品質もデバイスによって変化します。

重要

ヘッドセット拡張パッケージで使用される入力拡張は、カスタムカメラ の実装です。

カスタムカメラまたはヘッドセットで試用製品(Personal Edition license、試用版 XR license、試用版 Mega サービスなど)を使用する場合、EasyAR Sense は起動するたびに 100 秒後に応答を停止します(Mega ユーザーは承認後に EasyAR Business 経由で時間の長さを調整できます)。有料版の EasyAR Sense および有料の EasyAR Mega サービスにはこの制限はありません。

ImageDense の両方がスマートフォン上の結果と一致する、またはそれ以上であれば、EasyAR の大部分の機能はデバイス上で正常に動作できます。Mega のテストを開始できます。

実行中の異常を解決する:問題の切り分け

スマートフォン上と同じ結果を再現できない場合、次は詳細な問題切り分けプロセスです。根本原因を探す際の参考にしてください。常にシステムログ出力に注目することを推奨します。

ステップ 0:ヘッドセット自身のシステム誤差を理解する

AR/MR 向けにデバイスを準備する で説明したモーショントラッキングと表示の要件を覚えていますか。

重要

モーショントラッキング/VIO の誤差は、常にさまざまな形で EasyAR アルゴリズムの安定性に影響します。

重要

表示システムの誤差により、仮想物体と現実物体が完全には一致しない場合があります。

誤差が比較的大きい状況では、仮想物体が実物の上または下に浮いているように見え、その後(見かけ上)ずっとドリフトし続けます。この現象は Pico 4E で観察できます。EasyAR を使わず、そのデバイス自身の VST だけを開いた場合でも同じ現象があります。

ステップ 1:session の実行状態を確認する

UI メッセージ 内の session 状態表示が正常であるために、正常でなければならない機能またはデータ:

session 状態情報の表示が見えない場合は、オプションを Log に変更し、システムログで session の状態と使用中の frame source の名前を確認してください。

ARSession ノード下の他のすべての frame source を削除して、変化があるか確認することもできます。

ステップ 2:EasyAR が受信したカメラフレーム数を確認する

正常でなければならない機能またはデータ:

  • ExternalFrameSourceカメラフレームデータ が Unity コード層を通る経路(データの正しさおよびネイティブ層へのデータ経路は含まない)

このデータは時間とともに増加する必要があります。そうでない場合、数秒後に警告情報が表示されます。

この値が増加しないことが分かった場合は、最優先で解決してください。

ステップ 3:デバイス上で EIF を録画し、Unity エディターで再生する

正常でなければならない機能またはデータ:

  • ExternalFrameSourceカメラフレームデータ がネイティブ層へ入力される経路(データの正しさは含まない)
  • カメラフレームデータ 内の raw camera image data
  • カメラフレームデータ 内の timestamp(時刻点およびデータ同期は含まない)

EIF をクリックして録画を開始し、もう一度クリックして停止します。

ヒント

ランダムアクセス可能な EIF ファイルを取得するには、録画を正常に停止する必要があります。

Unity エディターで EIF データを実行する際は、シーン内の不正な設定を避けるため、クリーンな EasyAR シーンまたは EasyAR のサンプルを使用するのが最適です。

Unity エディターで カメラフレームデータ の再生を確認できます。画像データはバイト単位で同一ではなく、全体の処理中に非可逆のエンコード/デコードが存在します。

EasyAR は計算では歪みパラメーターを使用しますが、表示時には画像を逆歪み補正しません。そのため、これらのデータを入力した場合、Unity で EIF ファイルを再生すると逆歪み補正されていないデータが観察されますが、これは想定どおりです。

ヒント

Unity game ウィンドウの比率を入力と同じに変更してください。そうしないと、データがクロップされて表示されます。

データ再生が速すぎる、または遅すぎる場合は、timestamp 入力を確認してください。

注記

EIF では多くのことができます。Unity エディターで EIF を使用して 画像トラッキング稠密空間マップ を実行できます。デバイス上で実行したときの表示結果は異なる可能性がある点に注意してください。

ステップ 4:EIF を使用して画像トラッキングを実行する

正常でなければならない機能またはデータ:

  • カメラフレームデータ 内の raw camera image data
  • カメラフレームデータ 内の intrinsics(アルゴリズムには誤差への許容度があるため、データの正しさを完全には保証できない)

Unity エディターで EIF を使用して画像トラッキングサンプル ImageTracking_Targets を実行するには、画像をトラッキングできる EIF を録画する必要があります。

注記

画像トラッキング では、トラッキングターゲットが画像全体の一定割合を占める必要があります。画像をトラッキングできない場合は、画像により近い位置へ頭を移動してみてください。

トラッキングが継続的に失敗する、または仮想物体が画像内でターゲットから離れた位置に表示される場合、intrinsics に問題がある可能性が高いです。

画像データに歪みがある場合、仮想物体が画像上のトラッキングターゲットを完全には覆わないことがありますが、これは想定どおりです。トラッキングターゲットが画像の端にある場合、この現象はより明らかになります。

ステップ 5:デバイス上で画像トラッキングを実行する

正常でなければならない機能またはデータ:

  • デバイス自身の表示システム
  • カメラフレームデータ 内の raw camera image data
  • カメラフレームデータ 内の intrinsics(アルゴリズムには誤差への許容度があるため、データの正しさを完全には保証できない)
  • カメラフレームデータ 内の extrinsics
  • カメラフレームデータレンダリングフレームデータ 内の device pose の座標整合性
  • カメラフレームデータレンダリングフレームデータ 内の device pose の時間差
注記

画像トラッキング では、トラッキングターゲットが画像全体の一定割合を占める必要があります。画像をトラッキングできない場合は、画像により近い位置へ頭を移動してみてください。

画像トラッキング では、画像の横方向の辺の長さが現実世界の物体サイズと一致している必要があります。サンプルでは、水平に置いた A4 用紙の長辺いっぱいに広がる横方向の辺を持つ画像をトラッキングする必要があります。そのため、定規を使って画像の横方向の辺を A4 サイズに調整する場合を除き、コンピューター画面に表示された画像をトラッキングしないでください。

EIF 使用時には画像トラッキングが完璧なのにデバイス上では異なる場合、他のテストへ進む前に解決する必要があります。後続ステップで問題を解決するのははるかに困難です。

仮想物体が実物から離れた場所に浮いて表示され、人が動かなくてもそう見える場合、intrinsics または extrinsics が正しくない、カメラフレームデータレンダリングフレームデータ 内の device pose が同じ座標系にない、または表示システムがこの誤差を生んでいる可能性が高いです。

頭部を動かしたときに仮想物体が継続的に動き、遅延しているように見える場合、device pose が健全でない可能性が高いです。これはよくいくつかの状況で発生します(他の問題の可能性を排除するものではありません)。

  • device poseraw camera image data のデータ時刻が同期していない
  • カメラフレームデータレンダリングフレームデータ で同じ pose を使用している

ステップ 6:EIF を使用し、デバイス上で稠密空間マップを実行する

正常でなければならない機能またはデータ:

  • デバイス自身の表示システム
  • カメラフレームデータ 内の raw camera image data
  • カメラフレームデータ 内の intrinsics(アルゴリズムには誤差への許容度があるため、データの正しさを完全には保証できない)
  • カメラフレームデータ 内の extrinsics
  • カメラフレームデータ 内の device pose

メッシュ生成速度が非常に遅い、または地面の再構築がでこぼこになる場合、device pose に問題がある可能性が非常に高いです。pose の座標系が正しくない、または pose の時刻点が正しくない可能性もあります。

ヒント

入力データのフレームレートが低い場合、メッシュ生成速度も遅くなりますが、品質が明らかに低下することはありません。この状況は想定どおりです。

通常、正確なメッシュ位置を見分けることはそれほど容易ではないため、稠密空間マップ を使用しているときに表示システムの誤差を観察できるとは限りません。

Mega サンプルを実行する

Unity で Mega を使用する方法については、以下の内容を読んでください。Mega サービスをまだ開通していない場合は、試用資格について EasyAR の営業担当にお問い合わせください。

次にデバイス上で Mega を実行し、スマートフォンでの実行結果と一致することを比較確認します(iPhone を基準にすることを推奨)。以下に注目してください。

  • 物体の表示位置が正しいか
  • 遠方(10M 以上)の物体の表示位置とサイズが正しいか
  • 視線中心以外の物体の表示位置とサイズが正しいか
  • 頭部を回転したときの物体の表示位置とサイズが正しいか

実行中の異常を解決する

正常でなければならない機能またはデータ:

  • デバイス自身の表示システム
  • カメラフレームデータレンダリングフレームデータ 内のすべてのデータ

画像トラッキング稠密空間マップ の 2 つの機能を検証した後、理論上 EasyAR Mega はすでにサポートされているはずです。ヘッドセット上での実行結果がスマートフォン上より明らかに悪い場合は、以下に注目してください。

  • カメラフレームデータレンダリングフレームデータ 内の pose データと timestamp に注目する
  • モーショントラッキング/VIO システム出力に注目する。XR Origin 下のパンダはよい参考になります

また、デバイス自身の表示システムにも重点的に注目する必要があります。特に遠方、視線中心以外、頭部回転時の物体表示結果です。このようなシーンはデバイス自身のテスト時に見落とされがちですが、多くの場合、問題は依然としてデバイス自身の表示システムに起因します。これらの問題と考えられる影響を EasyAR に説明し、開発者に合理的な結果期待値を提供する必要があります。

重要

ユーザーは使用時にこれらの表示問題を非常に重視します。また、多くのデバイスは大空間シーンで完全に理想的な表示結果を提供できないのも事実です。EasyAR はデバイス自身の表示問題を解決できません。これはデバイスメーカーが反復的に解決すべきことであり、同時にユーザーもこれらの問題を理解する必要があります。

次のステップ

関連トピック

スマートフォン上で実行できるサンプル:

  • 画像トラッキングサンプル ImageTracking_Targets。これにより 画像トラッキング 機能の想定実行結果を理解できます
  • 稠密空間マップサンプル SpatialMap_Dense_BallGame。これにより 稠密空間マップ 機能の想定実行結果を理解できます
  • モーションフュージョンサンプル ImageTracking_MotionFusion。これにより モーションフュージョン 機能の想定実行結果を理解できます
  • Mega サンプル MegaBlock_Basic。これにより Mega 機能の想定実行結果を理解できます