ARCore SDK for iOS は ARKit と連携して Cloud Anchor を提供します を使用して、iOS デバイスと Android デバイスの間でアンカーを 同じ環境で動作します。
独自のアプリで ARCore Cloud Anchor API(ARCore 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 以上では、次のパターンを使用して ARFrame
を
GARSession
:
-(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
がある場合は、
デフォルトのスキーム設定に戻します。
回避策
Product > Scheme > Edit Scheme…に向かいます。
[Run] タブを開きます。
Options をクリックすると、現在の設定が表示されます。
GPU Frame Capture と Metal API Validation の両方が無効になっていることを確認します。
アプリをビルドして実行します。
その他の既知の問題については、Cocoapods の CHANGELOG
をご覧ください。
制限事項
ARCore SDK for iOS は、ARKit の setWorldOrigin(relativeTransform:)
メソッド呼び出しをサポートしていません。
パフォーマンスに関する注意事項
ARCore API を有効にすると、メモリ使用量が増加します。今後の ネットワーク使用率と CPU 使用率が高くなるため、デバイスのバッテリー使用量が増加します。