Техническая характеристика В мире отслеживания влияют ограничения ресурсов

При запуске сеанса ARKit с включенным отслеживанием мирового уровня консоль Xcode отображает сообщения журнала о (я полагаю: снижение) производительности отслеживания, даже если

  • AR-сессия находится в состоянии нормального отслеживания,

  • Я использую устройство в хорошо освещенной офисной комнате с большим количеством "функций" для обнаружения, и

  • Устройство перемещается только тонко.

TL;DR: я хочу понять, что может быть причиной их, какое влияние у них есть, и как их предотвращать или (re) воздействовать на них, когда они происходят - NB. не просто скрыть ошибку.

[Technique] World tracking performance is being affected by resource constraints [0]
[Technique] World tracking performance is being affected by resource constraints [1]

Приложение "Консоль" показывает, что они поступают из библиотеки ARKit и попадают в категорию "Техника регистрации". Хотя они звучат как предупреждения, приложение Console показывает их тип как ошибки.

Как и ожидалось при использовании отслеживания в мире, приложение консоли показывает много журналов CoreMotion во время ошибок, но эти строки, похоже, не содержат никаких ошибок, предупреждений или другой информации, которая помогает мне диагностировать, что продолжается.

В тот момент, когда ошибки появляются в журнале, нет обратных вызовов делегатов, но в конечном итоге (что-то между 5 секундами или 50 секундами) экран замерзнет с завершением сеанса обратного вызова:

Error Domain=com.apple.arkit.error Code=200 "World tracking failed." UserInfo={NSLocalizedDescription=World tracking failed., NSLocalizedFailureReason=World tracking cannot determine the device position.}

Источник ARKit/documentation не содержит никаких намеков на то, что "ограничения ресурсов" могут привести к невозможности определить устройство, он просто читает:

Мировое отслеживание столкнулось с фатальной ошибкой.

Я пробовал (без успеха), чтобы остановить появление предупреждений:

  • сброс отслеживания сеанса: все еще ошибки,

  • сброс сеанса с удалением всех ARAnchor s: все еще ошибки,

  • отключить определение плоскости (когда это уже не нужно): все еще ошибки,

Приостановка сеанса AR отключает предупреждения (имеет смысл, поскольку это означает, что устройство перестает отслеживать его перемещение во время паузы), но при возобновлении сеанса предупреждения возвращаются.

При закрытии сеанса и его повторной создании (т.е. увольнение VC и повторное создание), не перемещая камеру (или измененное освещение), проблема не всегда повторяется.

Мое лучшее предположение заключается в том, что мигающие TL-огни являются причиной предупреждений о производительности отслеживания, поскольку Apple объясняет, как работает отслеживание мира:

... визуально-инерциальная одометрия. Этот процесс объединяет информацию с устройств обнаружения движения устройств iOS с анализом компьютерного зрения сцены, видимой для камеры устройств. ARKit распознает заметные особенности изображения сцены, отслеживает различия в положениях этих функций в видеокадрах и сравнивает эту информацию с данными обнаружения движения.

(iPhone 6S, iOS 11 beta 4, никаких других приложений, работающих в фоновом режиме)


Вопросы:

  • В чем разница между [0] и [1]?

  • Что может вызвать эти ошибки?

  • Какое влияние у них есть, пока ARSession не сработал (пока)? Я предполагаю, что мы увидим "прыгающие" модели, поскольку мировые координаты, предоставленные обновлениями фрейма, не точны - NB. после сброса/остановки ARAnchor отслеживания ошибок.

  • Мы узнаем, произойдет ли сеанс AR, или это будет неожиданным? (Опять же, ARSession не сработает сразу после того, как состояние отслеживания изменится на "ограниченное" )

  • Есть ли способ справиться с этим, например. освобождая эти упомянутые "ограничения ресурсов" или даже предотвращая их вообще?

Ответ 1

Только разрешить ориентацию портретного устройства разрешить эту ошибку для меня.

введите описание изображения здесь

Ответ 2

Я думаю, что это ошибка xcode 9.1. Если вы используете SceneKit: найдите, где вы устанавливаете .backgroundColor = "ваш цвет" для ARSCNView или подкласса. Прокомментируйте эту строку и очистите проект.

Ответ 3

Эта ошибка произошла со мной, потому что я вручную добавил контроллер вида в раскадровку и добавил к ней ARSKView. Это добавляет его как дочернего к UIView, который по умолчанию представляет дочерний вид в UIViewController. Поэтому для поддержки ландшафтной и портретной ориентации мне пришлось добавить ограничения автоматической компоновки, которые по какой-то причине вызвали эту ошибку.

Когда я посмотрел проект AR запаса, ARSKView является непосредственным дочерним элементом контроллера представления, и он поддерживает все размеры и ориентации вида из коробки без ограничений автоматического макета. Когда я установил его таким образом, ошибки исчезли.

Ответ 4

Я думаю, что это своего рода мешок, потому что эта проблема произошла для меня, только когда я использую ограничения, когда пытаюсь что-то сделать.

Если отключить, например, ограничение ниже моего кода работает хорошо, как ожидалось.

введите описание изображения здесь