При запуске сеанса 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
не сработает сразу после того, как состояние отслеживания изменится на "ограниченное" ) -
Есть ли способ справиться с этим, например. освобождая эти упомянутые "ограничения ресурсов" или даже предотвращая их вообще?