Table of Contents

アプリケーション内のコンテンツの揺れとドリフトの診断と修正

「仮想コンテンツが漂う」、「オブジェクトが揺れる」、「位置が安定しない」ことは、AR アプリケーションで開発者がよく遭遇する問題です。コンテンツが不安定だと没入感が大きく損なわれ、ユーザー体験の低下につながることもあります。

この記事では、コンテンツの揺れとドリフトの原因を理解し、体系的なトラブルシューティングと最適化の方法を説明します。

「正常な揺れ」と「異常なドリフト」を区別する

まず、妥当な期待値を持つ必要があります。モバイルデバイスで高精度な AR tracking を実現することは、それ自体が難しい課題です。次の状況は 正常範囲 に含まれます。完全に取り除くことはできませんが、最適化は可能です。

  • ごく小さな高周波の揺れ:

    • 症状: 仮想オブジェクトにミリメートル単位の細かな揺れがある。
    • 原因: デバイスセンサーの物理的なノイズ、visual tracking アルゴリズムの精度限界、手持ちデバイスのわずかな手ぶれが重なって発生します。
    • : 近距離で観察する場合、たとえば仮想オブジェクトを机の上に置いて近づいて見る場合、このような細かな揺れは正常です。
  • 短時間のドリフト:

    • 症状: ユーザーがデバイスを素早く移動または回転させたとき、仮想オブジェクトが短時間 (0.5-1 秒) 位置ずれし、その後復帰する。
    • 原因: 高速移動時には、デバイスの SLAM システムで IMU (慣性計測ユニット) の累積誤差と visual localization の遅延により、一時的な position drift が発生することがあります。
    • : 動的なシーンでは許容できます。オブジェクトが正しい位置へすばやく「引き戻される」なら、システムは有効に機能しています。

一方、次の状況は 異常な問題 であり、トラブルシューティングと修正が必要です。

  • 継続的で大きな位置ドリフト: 仮想オブジェクトが本来あるべき位置からゆっくり継続的に離れ、復帰しない、またはかなり時間が経ってから復帰する。
  • 激しいジャンプやちらつき: 仮想オブジェクトが画面上で大きく跳ねる、または表示と非表示を繰り返す。
  • 実物との相対位置が一致しない: 仮想オブジェクトを実物に安定して「固定」できない。
注記

さらに、注意すべき重要な点があります。
0DoF、3DoF、または 5DoF モードで動作するデバイスでは、フィット感とリアリティは 6DoF デバイスより本質的に弱くなります。ユーザーが素早く移動したり、曲がったり、階段を上り下りしたりすると、仮想オブジェクトは完全には追従できません。
そのため、これらのモードでコンテンツが「空中に浮く」または「位置ずれする」現象は、デバイス能力の根本的な制限であり、この記事で扱う「コンテンツの揺れまたはドリフト」の障害ではありません。
各 xDoF モードの体験の違いについては、ナビゲーションのベストプラクティス の説明を参照してください。

体系的なトラブルシューティング手順

以下の順序で、最も可能性の高い原因から確認してください。

ステップ 1: 外部環境とハードウェア要因 (コード変更不要)

  1. 物理環境の確認:

    • テクスチャの豊富さ
      テスト環境が単調すぎませんか。広い白一色の壁、滑らかな床、ガラス面は、visual localization の失敗や誤りを引き起こすことがあります。
    • 動的オブジェクト
      環境内に、人の群れや走行車両など、多数の移動物体がありますか。動的オブジェクトは visual localization を妨げますが、この問題は多くの場合 一時的 です。
    • シーンの混同
      異なる入口にあるエレベーターホールのように、非常に混同しやすい場所が環境内にありますか。視覚的に似た領域は localization に影響し、localization result が似た領域間を行き来して跳ぶことがあります。この種の問題は、事前に適切な prior information を設定することで回避できます。
  2. デバイスハードウェアの確認:

    • デバイスの発熱
      長時間実行後、デバイスがひどく熱くなっていませんか。過熱は CPU/GPU throttling を引き起こし、デバイス自身の SLAM システムの tracking performance に影響します。これは継続的なドリフトの最も一般的な原因です。
    • デバイス性能
      一部の古いデバイスでは、ハードウェア性能と部品精度の制限により scale drift が発生しやすく、仮想コンテンツもそれに伴ってドリフトします。別のデバイスで比較テストを行い、問題がデバイス自体の制限によるものか判断できます。

ステップ 2: マップと localization 品質の分析 (外部ツールを使用)

  1. Mega Toolbox を使用する:

    • 同じ場所で Mega Toolbox を実行し、その localization の安定性を観察します。
    • Toolbox の localization もドリフトまたはジャンプする場合: 問題は マップ自体、または 現在の環境が localization に適していない ことにあります。
    • Toolbox の localization が安定している場合: 問題は あなたのアプリケーション にあります。ステップ 3 に進んでください。
  2. PC シミュレーションで EIF data を実行する:

    • 現場で記録した EIF data を再生します。
    • 再生でもドリフトまたはジャンプする場合: シーン自体が localization に適していない、または マップ自体 に問題がある、または EIF を記録したデバイス自身の motion tracking に scale drift があることを示します。
    • 再生が安定している場合: シーン自体は localization に適しており、問題は あなたのアプリケーション のリアルタイム実行時におけるデバイス発熱や throttling などの要因にある可能性があります。

ステップ 3: アプリケーション内部ロジックの確認

  1. Pose 更新:

    • pose data に対して、過度な LerpSmoothDamp など、不要な追加 smoothing を行っていないか確認してください。これは逆に遅延やドリフト感を生むことがあります。
    • 通常は、Mega が返す元の Pose をそのまま使用するのが最も安定します。
  2. Coordinate system の一致:

    • 仮想オブジェクト、scene camera、MegaTracker などの node 関係が正しいこと、また MegaBlocks 配下の各 node の local transform 値を変更していないことを確認してください。
    • node の設定が誤っていると、coordinate system 変換が正しく行われず、コンテンツの rendering に予測できない挙動が発生します。

特別な注意: OST ヘッドセットデバイスの visual overlay 問題

localization と rendering logic の確認が終わった後、OST (optical see-through) ヘッドセットデバイスを使用している場合は、もう一つ特殊な状況を考慮する必要があります。

デバイス自体が良好な 6DoF motion tracking 能力を持っていても、仮想オブジェクトと physical space の重ね合わせでフィット感が悪くなる場合があります。これは通常、Mega localization service の障害ではなく、OST デバイスの光学原理による固有の現象です。たとえば optical alignment error や eye calibration の差異が原因になります。

この種の問題の詳細な説明と判断方法については、OST デバイスの特別な説明 を参照してください。

まとめとベストプラクティス

上記のトラブルシューティングにより、コンテンツの揺れやドリフトの根本原因を特定できているはずです。すばやく振り返って対応できるよう、次の表に一般的な問題症状、考えられる原因、ベストプラクティスをまとめます。トラブルシューティング結果に応じて、表から対応する解決策を確認してください。

問題タイプ 考えられる原因 ベストプラクティス
小さな揺れ センサーノイズ、アルゴリズム限界 このような小さな揺れは正常な現象であり、通常は過度に気にする必要はありません
高速移動後のドリフト SLAM 遅延、アルゴリズム補正 ユーザーにデバイスを滑らかに動かすよう案内できます。すばやく復帰しない場合は追加の注意が必要です
継続的な大規模ドリフト SLAM 障害、デバイス差異 別のデバイスで cross-validation を行います
激しいジャンプ/ちらつき 混同しやすいシーン、localization に不向きな環境 auxiliary prior information を設定するか、ユーザーを案内します
実物との相対位置が一致しない localization/map エラー、code logic エラー 複数の viewpoints からテストして virtual object の位置を観察し、考えられるコードエラーを修正します

上記の確認と修正後も問題が残る場合は、画面録画、EIF data recording、詳細ログを添えて、Issue reporting から詳細な報告を送信してください。