ARCore SDK для iOS взаимодействует с ARKit, предоставляя возможности облачной привязки, позволяя вам использовать привязки между устройствами iOS и Android в одной среде.
Узнайте, как использовать API ARCore Cloud Anchor или службу ARCore Cloud Anchor в своих приложениях.
Предварительные условия
- Xcode версии 13.0 или новее
- Cocoapods 1.4.0 или новее, если вы используете Cocoapods
- ARKit-совместимое устройство Apple под управлением iOS 12.0 или более поздней версии (требуется цель развертывания iOS 12.0 или более поздней версии)
Если вы новичок в Cloud Anchors:
Убедитесь, что вы понимаете процесс размещения и разрешения Cloud Anchor .
Прочтите краткое руководство по системным требованиям, инструкциям по настройке и установке.
Ознакомьтесь с одним из примеров Cloud Anchor
Включите облачные привязки в своем приложении
Чтобы использовать Cloud Anchors API, вам необходимо создать GARSessionConfiguration
и установить для него свойство cloudAnchorMode
, как описано в разделе Настройка сеанса ARCore в iOS . Используйте setConfiguration:error: (GARSession)
чтобы установить конфигурацию.
Вы также должны включить API ARCore для своего приложения.
Размещение и разрешение якорей
Вы можете размещать и разрешать облачные привязки с помощью API ARCore Cloud Anchor. API включает методы обратного вызова для завершенных операций, а также объекты Future, которые можно опросить.
Разместите якорь
Размещение ARAnchor
помещает якорь в общую систему координат для любого данного физического пространства.
Запрос хоста отправляет визуальные данные на сервер Google, который отображает положение ARAnchor
в системе координат, которая представляет текущее физическое пространство. Успешный запрос хоста возвращает новый идентификатор облачной привязки, которым можно поделиться и использовать для последующего разрешения привязки.
- (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 идентификатор облачной привязки вместе с визуальными данными из текущего кадра. Сервер попытается сопоставить эти визуальные данные с изображением того, где в данный момент размещены облачные привязки. При успешном разрешении к сеансу добавляется и возвращается новая привязка.
- (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 кадров в секунду, используйте следующий шаблон для передачи ARFrame
в GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
API-квоты
API ARCore имеет следующие квоты на пропускную способность запросов:
Тип квоты | Максимум | Продолжительность | Применяется к |
---|---|---|---|
Количество анкеров | Безлимитный | Н/Д | Проект |
Привязка запросов хоста | 30 | минута | IP-адрес и проект |
Привязка запросов на разрешение | 300 | минута | IP-адрес и проект |
Известные проблемы и обходные пути
Есть несколько известных проблем при работе с ARCore SDK для iOS.
Настройки схемы по умолчанию вызывают периодический сбой приложения
Настройки схемы захвата кадров графического процессора и проверки Metal API включены по умолчанию, что иногда может привести к сбою приложения в SDK.
Диагностика сбоя приложения
Всякий раз, когда вы подозреваете, что произошел сбой, взгляните на трассировку стека. Если вы видите MTLDebugComputeCommandEncoder
в трассировке стека, скорее всего, это связано с настройками схемы по умолчанию.
Обходной путь
Откройте Product > Scheme > Edit Scheme… .
Откройте вкладку Run .
Нажмите Options , чтобы просмотреть текущие настройки.
Убедитесь, что GPU Frame Capture и Metal API Validation отключены.
Создайте и запустите свое приложение.
Дополнительные известные проблемы см. CHANGELOG
Cocoapods.
Ограничения
ARCore SDK для iOS не поддерживает вызов метода ARKit setWorldOrigin(relativeTransform:)
.
Вопросы производительности
Использование памяти увеличивается при включении API ARCore. Ожидайте, что расход батареи устройства увеличится из-за более высокой загрузки сети и процессора.