iOS용 Cloud Anchors 개발자 가이드

iOS용 ARCore SDK는 클라우드 앵커를 제공하기 위해 ARKit과 상호작용합니다. 기능을 통해 iOS 및 Android 기기 간에 동일한 환경에서 실행합니다

내 앱에서 ARCore 클라우드 앵커 API 또는 ARCore 클라우드 앵커 서비스를 사용하는 방법을 알아보세요.

기본 요건

  • Xcode 버전 13.0 이상
  • Cocoapods 1.4.0 이상(Cocoapods를 사용하는 경우)
  • iOS 12.0 이상을 실행하는 ARKit 호환 Apple 기기 (iOS 12.0 이상의 배포 대상 필요)
를 통해 개인정보처리방침을 정의할 수 있습니다.

클라우드 앵커를 처음 사용하는 경우

앱에서 클라우드 앵커 사용 설정

Cloud Anchors API를 사용하려면 GARSessionConfiguration 그런 다음 아래의 설명에 따라 cloudAnchorMode 속성을 설정하세요. iOS에서 ARCore 세션을 구성합니다. 사용 setConfiguration:error: (GARSession) 드림 구성을 설정합니다

ARCore API도 사용 설정해야 합니다. 생성합니다.

앵커 호스팅 및 확인

ARCore Cloud Anchor API를 사용하여 클라우드 앵커를 호스팅하고 확인할 수 있습니다. API Future 객체뿐 아니라 완료된 작업을 위한 콜백 메서드도 포함되어 있습니다. 선택할 수 있습니다

앵커 호스팅

ARAnchor를 호스팅하면 지정된 모든 위치의 공통 좌표계에 앵커가 배치됩니다. 물리적 공간을 의미합니다.

호스트 요청은 ARAnchor의 좌표계의 위치를 나타냅니다. 가 호스트 요청이 성공하면 새 클라우드 앵커 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 기기가 허용됩니다. 를 사용하여 이전에 호스팅한 앵커를 새 장면에 추가할 수 있습니다.

확인 요청은 시각적 데이터와 함께 Google 서버에 클라우드 앵커 ID를 전송합니다. 삭제할 수 있습니다. 서버는 이 시각적 데이터를 일치시키려고 시도합니다. 현재 호스팅된 클라우드 앵커가 매핑된 위치의 이미지가 표시됩니다. 날짜 새 앵커가 세션에 추가되고 반환됩니다.

- (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 폴링 패턴(선택사항)

메탈을 사용하거나 폴링 옵션이 필요한 경우 그리고 앱이 최소 30fps인 경우 다음 패턴을 사용하여 ARFrameGARSession:

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

API 할당량

ARCore API의 요청 대역폭 할당량은 다음과 같습니다.

할당량 유형 최대 기간 적용 대상
앵커 수 무제한 해당 사항 없음 프로젝트
앵커 호스트 요청 30 IP 주소 및 프로젝트
앵커 요청 해결 300 IP 주소 및 프로젝트

알려진 문제 및 해결 방법

iOS용 ARCore SDK로 작업할 때 몇 가지 알려진 문제가 있습니다.

기본 스키마 설정으로 인해 간헐적으로 앱이 비정상 종료됩니다.

GPU 프레임 캡처 및 Metal API 검증 스키마 설정은 다음을 통해 사용 설정됩니다. 경우에 따라 SDK 내에서 앱이 비정상 종료될 수 있습니다.

앱 비정상 종료 진단

비정상 종료가 발생한 것으로 의심될 때마다 스택 트레이스를 살펴보세요. 스택 트레이스에 MTLDebugComputeCommandEncoder가 있으면 다음과 같은 오류일 수 있습니다. 기본 스키마 설정으로 변경합니다.

해결 방법

  1. Product > Scheme > Edit Scheme… 페이지로 이동합니다.

  2. Run 탭을 엽니다.

  3. 현재 설정을 보려면 Options 버튼을 클릭하세요.

  4. GPU Frame CaptureMetal API Validation가 모두 사용 중지되어 있는지 확인합니다.

  5. 앱을 빌드하고 실행합니다.

알려진 추가 문제는 Cocoapods CHANGELOG를 참고하세요.

제한사항

iOS용 ARCore SDK는 ARKit setWorldOrigin(relativeTransform:) 메서드 호출을 지원하지 않습니다.

성능에 대한 고려사항

ARCore API를 사용 설정하면 메모리 사용량이 증가합니다. 예상 시간: 네트워크 사용량 및 CPU 사용률 증가로 인해 기기의 배터리 사용량이 증가할 수 있습니다.

다음 단계