iOS 向け Cloud Anchors デベロッパー ガイド

ARCore SDK for iOS は ARKit と連携して Cloud Anchor を提供します を使用して、iOS デバイスと Android デバイスの間でアンカーを 同じ環境で動作します。

独自のアプリで ARCore Cloud Anchor APIARCore Cloud Anchor サービス)を使用する方法を学びます。

前提条件

  • Xcode バージョン 13.0 以降
  • Cocoapods 1.4.0 以降(Cocoapods を使用している場合)
  • iOS 12.0 以降を搭載した ARKit 対応の Apple デバイス (デプロイ ターゲットが iOS 12.0 以降であることが必要です)

Cloud Anchors を初めて使用する場合:

アプリで Cloud Anchors を有効にする

Cloud Anchors API を使用するには、 GARSessionConfiguration その cloudAnchorMode プロパティを設定します。詳しくは、 iOS で ARCore セッションを構成する。使用 setConfiguration:error: (GARSession) 構成を設定します

ARCore API も有効にする必要があります。 説明します

アンカーのホストと解決

ARCore Cloud Anchor API を使用してクラウド アンカーをホストして解決できます。API 完了したオペレーションのコールバック メソッドと Future オブジェクトが含まれます 作成されます。

アンカーをホストする

ARAnchor をホストすると、アンカーは特定の座標系の共通の座標系に配置されます。 あります。

ホスト リクエストによってビジュアル データが Google サーバーに送信され、ARAnchor の 現在の物理空間を表す座標系での位置。 ホスト リクエストが成功すると新しい Cloud Anchor ID が返されます。この ID は共有して使用し、 後でアンカーの解決に使用されます。

- (void)addAnchorWithTransform:(matrix_float4x4)transform {
  self.arAnchor = [[ARAnchor alloc] initWithTransform:transform];
  [self.sceneView.session addAnchor:self.arAnchor];

  __weak ExampleViewController *weakSelf = self;
  self.hostFuture = [self.cloudAnchorManager
      hostCloudAnchor:self.arAnchor
           completion:^(NSString *anchorId, GARCloudAnchorState cloudState) {
             [weakSelf handleHostAnchor:anchorId cloudState:cloudState];
           }
                error:nil];
  [self enterState:HelloARStateHosting];
}

アンカーを解決する

ARAnchor を解決すると、特定の物理スペースで Android デバイスと iOS デバイスが可能になります を使用して、以前にホストしたアンカーを新しいシーンに追加できます。

解決リクエストにより、クラウド アンカー ID とビジュアル データが Google サーバーに送信されます。 取得されます。サーバーがこのビジュアル データの照合を試みます。 現在ホストされている Cloud Anchors がマッピングされている場所のイメージが表示されます。日時 解決に成功すると、新しいアンカーがセッションに追加されて返されます。

- (void)resolveAnchorWithIdentifier:(NSString *)identifier {
  GARResolveCloudAnchorFuture *garFuture =
      [self.gSession resolveCloudAnchorWithIdentifier:identifier
                                    completionHandler:completion
                                                error:&error];
}

// Pass the ARFRame to the ARCore session every time there is a frame update.
// This returns a GARFrame that contains a list of updated anchors. If your
// anchor's pose or tracking state changed, your anchor will be in the list.
- (void)cloudAnchorManager:(CloudAnchorManager *)manager didUpdateFrame:(GARFrame *)garFrame {
  for (GARAnchor *garAnchor in garFrame.updatedAnchors) {
    if ([garAnchor isEqual:self.garAnchor] && self.resolvedAnchorNode) {
      self.resolvedAnchorNode.simdTransform = garAnchor.transform;
      self.resolvedAnchorNode.hidden = !garAnchor.hasValidTransform;
    }
  }
}

オプションの GARSession ポーリング パターン

Metal を使用している場合やポーリング オプションが必要であり、かつアプリが 30 fps 以上では、次のパターンを使用して ARFrameGARSession:

-(void)myOwnPersonalUpdateMethod {
  ARFrame *arFrame = arSession.currentFrame;
  NSError *error = nil;
  GARFrame *garFrame = [garSession update:arFrame error:&error];
  // your update code here
}

API 割り当て

ARCore API のリクエスト帯域幅の割り当ては、次のとおりです。

割り当てのタイプ 最大 期間 適用対象
アンカーの数 無制限 なし プロジェクト
アンカー host リクエスト 30 IP アドレスとプロジェクト
resolve リクエストをアンカーする 300 IP アドレスとプロジェクト

既知の問題と回避策

ARCore SDK for iOS を使用する際に既知の問題がいくつかあります。

デフォルトのスキーム設定が原因でアプリが断続的にクラッシュする

GPU フレーム キャプチャと Metal API 検証スキームの設定は、以下によって有効化されます。 デフォルト状態のままです。そのため SDK 内でアプリがクラッシュすることがあります。

アプリのクラッシュを診断する

クラッシュが発生した疑いがある場合は、スタック トレースを確認します。 スタック トレースに MTLDebugComputeCommandEncoder がある場合は、 デフォルトのスキーム設定に戻します。

回避策

  1. Product > Scheme > Edit Scheme…に向かいます。

  2. [Run] タブを開きます。

  3. Options をクリックすると、現在の設定が表示されます。

  4. GPU Frame CaptureMetal API Validation の両方が無効になっていることを確認します。

  5. アプリをビルドして実行します。

その他の既知の問題については、Cocoapods の CHANGELOG をご覧ください。

制限事項

ARCore SDK for iOS は、ARKit の setWorldOrigin(relativeTransform:) メソッド呼び出しをサポートしていません。

パフォーマンスに関する注意事項

ARCore API を有効にすると、メモリ使用量が増加します。今後の ネットワーク使用率と CPU 使用率が高くなるため、デバイスのバッテリー使用量が増加します。

次のステップ