ドキュメント

セッションのライフサイクルとトラッキングクオリティの管理

セッションの現在の状態についてユーザーに継続的に情報を提供します。また、中断から復帰します。

概要

ワールドトラッキングARセッションは、Visual Inertial Odometry(VIO)と呼ばれる技術を使います。このプロセスは、モーションセンサーのデータとカメラ画像のコンピュータビジョン解析を組み合わせ、リアルワールドの空間においてARCamera(英語)transform(英語)プロパティで表されるデバイスの位置と向き(姿勢)をトラッキング(追跡)します。最適な結果を得るため、ワールドトラッキングには、継続的なセンサーデータと、視覚的複雑性または認識可能なフィーチャ(特徴)を持つカメラ画像が必要です。

セッションを開始してから、ARKitがデバイスの姿勢を正しく把握するために十分なデータを収集するまでに少し時間がかかります。セッション中に、ワールドトラッキングクオリティに影響する条件が変わることがあります。ARSessionObserver(英語)デリゲートメソッドとARCamera(英語)プロパティを使うと、この変化を把握できます。

ARセッションの基本的なライフサイクル

下の図は、ARセッションを開始したときのトラッキング状態の変化を示しています。

ARKitのトラッキング状態がnotAvailableからlimited(初期化中)、normalへと進むことを示したシーケンス図

新しいセッションの開始直後、提供されるフレームのトラッキング状態はARCamera.TrackingState.notAvailable(英語)であり、ARKitがまだデバイスの姿勢を推定するために十分な情報を収集していないことを示しています。

数フレーム後に、トラッキング状態はARCamera.TrackingState.limited(_:)(英語)に変わり、デバイスの姿勢情報は利用可能であるもののその精度は不明であることを示します。limited状態では常に、トラッキングクオリティの低下の理由が含まれます。この場合、セッションの状態はまだARCamera.TrackingState.Reason.initializing(英語)です。

しばらくするとトラッキング状態がARCamera.TrackingState.normal(英語)に変わり、デバイスの姿勢情報が正確であり、ARKitのすべての機能を利用できることを示します。

トラッキングクオリティの変化に関するフィードバックの提供

下の図は、ユーザーの操作や環境の変化によって発生する可能性のある、トラッキング状態の変化を示しています。

ARKitのトラッキング状態がnormalからlimited(一部の機能が使用不可)になり、normalに戻ることを示したシーケンス図

トラッキングクオリティがARCamera.TrackingState.limited(_:)(英語)になっている間、ARKitがユーザーの周囲の状況をマッピングすることに依存する機能は利用できません。

  • 平面検出機能は、平面アンカーの追加や更新を行いません。

  • ヒットテストメソッドの結果が提供されません。

ユーザーの周囲の状況が変化したり、ユーザーがデバイスを動かしたりすることによって、セッションのトラッキング状態はいつでもARCamera.TrackingState.limited(_:)(英語)になる可能性があります。たとえば、ユーザーが何もない壁にデバイスを向けたり、部屋の明かりが消えたりすると、ARCamera.TrackingState.Reason.insufficientFeatures(英語)のためトラッキングクオリティが低下する場合があります。

関連するARCamera.TrackingState.Reason(英語)の値を使ってフィードバックを提供し、ユーザーが問題を解決してトラッキング状態をARCamera.TrackingState.normal(英語)に戻せるようにしてください。

セッション中断からの復帰

ARKitは、ARSession(英語)を実行中でないとデバイスの姿勢をトラッキングできません。デフォルトで、(たとえば別のアプリに切り替えることによって)セッションが中断すると、そのセッションの仮想コンテンツは、リアルワールドの環境に対して不自然なものになり得ます。

relocalization(場所への復帰)を使って、中断からの復帰を試みることができます。sessionShouldAttemptRelocalization(_:)(英語)メソッドでtrueを返すと、ARKitは、中断前のユーザー環境について持っている情報と、現在のカメラおよびセンサーのデータとのマッチングを試みます。このプロセスの間、トラッキング状態はARCamera.TrackingState.limited(_:)(英語)(理由はARCamera.TrackingState.Reason.relocalizing(英語))になります。成功してしばらくすると、トラッキング状態がARCamera.TrackingState.normal(英語)に戻ります。

セッション中断前のトラッキング状態がnormalで、中断後にnotAvailableからlimited(初期化中)、limited(場所への復帰中)、normalへと進むシーケンス図

relocalizationが成功するためには、セッションが中断されたときと同じような位置と向きにデバイスを戻す必要があります。このような状態にならない場合(デバイスをまったく別の場所に移動した場合など)、セッションの状態はいつまでもARCamera.TrackingState.Reason.relocalizing(英語)のままです。

持続するAR体験の作成

iOS 12.0以降では、ARWorldMap(英語)クラスに、ARKitがセッションの再開に使用する情報が保存されます。ワールドマップをファイルに保存することによって、同じrelocalizationプロセスを使って短い中断から復帰するのと同様に、アプリを再起動した場合でも以前のセッションから再開できます。ワールドマップにはアンカーが含まれるので、以前のセッションと一致するように仮想コンテンツを再配置することもできます。

normalのトラッキング状態で、アプリを閉じる前にワールドマップを保存しているシーケンス図。アプリを再起動すると、保存されたマップが読み込まれ、トラッキング状態がnotAvailableからlimited(初期化中)、limited(場所への復帰中)へと進みます。

ユーザーがアプリを閉じた後に同じARセッションに戻れるようにするには、ユーザーの操作によって明示的にワールドマップを保存するか、applicationDidEnterBackground(_:)(英語)で暗黙的に保存します。ワールドマップの保存は、ARセッションの状態が保存に値する場合にのみ行ってください。たとえば、ユーザーが配置した仮想オブジェクトの位置を覚えて置きたい場合などは、セッションがARFrame.WorldMappingStatus.mapped(英語)状態である(またはセッション中に少なくとも一度はその状態にあった)必要があります。

保存されたワールドマップに対してrelocalizationを行うには、セッションの実行時にinitialWorldMap(英語)プロパティを使います。中断から復帰する場合と同じように、セッションはARCamera.TrackingState.limited(_:)(英語)ARCamera.TrackingState.Reason.relocalizing(英語))のトラッキング状態で開始します。ARKitが現在の環境とワールドマップをマッチングできると、しばらくしてトラッキング状態がARCamera.TrackingState.normal(英語)になり、セッションが記録されたワールドマップに一致していることを示します。

ワールドマップから再開されたセッションには、そのワールドマップに保存されたすべてのアンカーが含まれます。name(英語)プロパティを使ってアンカーに配置した仮想オブジェクトを特定できるようにしておき、再開したセッションでアンカーから参照した仮想コンテンツをもう一度作成します。コンテンツを正しく配置するには、セッションのトラッキング状態がARCamera.TrackingState.normal(英語)になってから表示してください。

ARKitが、記録されたワールドマップと現在の環境をマッチングさせることができない場合(たとえば、ワールドマップが記録された場所とまったく異なる場所にデバイスがある場合など)は、セッションがいつまでもARCamera.TrackingState.Reason.relocalizing(英語)の状態のままになります。セッションを再開できない場合は、セッションを再起動する方法をユーザーに提供してください。ワールドマップのrelocalizationをやめるには、セッションでもう一度run(_:options:)(英語)を呼び出します。このとき、resetTracking(英語)オプションと、initialWorldMap(英語)nilの設定を使います。

関連項目

最初のステップ

拡張するカメラフィードの選択

フロントカメラまたはバックカメラのいずれかを通じて、ユーザーの体験を拡張します。

デバイスのサポートとユーザーの許可の確認

アプリでARKitを使用できること、および実行時にユーザーのプライバシーが尊重されることを確認します。

class ARSession(英語)

AR体験の制御に使用する主要オブジェクトです。

class ARConfiguration(英語)

セッションで使用するARKitの特定の機能を定義するオブジェクトです。

class ARAnchor(英語)

物理的環境における対象物の位置と向きに関する情報です。