Lors de l’exécution d’une session ARKit avec le suivi universel activé, la console Xcode affiche messages de journalisation relatifs aux performances du suivi (je présume: réduites)}, même si
la session AR est en état de suivi normal,
J'utilise l'appareil dans un bureau bien éclairé avec de nombreuses «fonctionnalités» à détecter, et
TLDR: Je veux comprendre ce qui peut leur causer, quel impact ils ont et comment les prévenir, ou (ré) agir sur eux quand ils se produisent —NB. Ne cachez pas simplement l'erreur.
[Technique] World tracking performance is being affected by resource constraints [0]
[Technique] World tracking performance is being affected by resource constraints [1]
L'application Console indique qu'ils proviennent de la bibliothèque ARKit et relèvent de la catégorie de journalisation Technique. Bien qu'ils ressemblent à avertissements, l'application console affiche leur type sous la forme erreurs.
Comme prévu lors de l'utilisation du suivi du monde, l'application console affiche de nombreux journaux CoreMotion
au moment des erreurs, mais ces lignes ne semblent contenir aucune erreur, aucun avertissement ni aucune autre information susceptible de m'aider à diagnostiquer ce qui se passe.
Au moment où les erreurs apparaissent dans le journal, il y a aucun rappel de délégué, mais finalement (tout ce qui se situe entre 5 et 50 secondes), l'écran se fige lorsque la session de rappel a échoué:
Error Domain=com.Apple.arkit.error Code=200 "World tracking failed." UserInfo={NSLocalizedDescription=World tracking failed., NSLocalizedFailureReason=World tracking cannot determine the device's position.}
La source ARKit / documentation ne fournit aucune indication sur les "contraintes de ressources" qui auraient pu causer l'impossibilité de déterminer la position du périphérique}, il se lit simplement:
Le suivi du monde a rencontré une erreur fatale.
J'ai essayé (sans succès) d'empêcher les avertissements d'apparaître en:
réinitialisation du suivi de session: encore des erreurs,
réinitialisation de la session avec suppression de toutes les ARAnchor
s: still errors,
désactivation de la détection de plan (une fois que vous n'en avez plus besoin): toujours des erreurs,
Mettre en pause la session AR désactive les avertissements (cela a du sens, car cela signifie que le périphérique arrête de suivre son mouvement lorsqu'il est en pause), mais lors de la reprise de la session, les avertissements sont renvoyés.
Lors de la fermeture de la session et de sa recréation (par exemple, rejeter VC et recréer), sans avoir déplacé la caméra (ni modifié l'éclairage), le problème ne se reproduit pas toujours.
Ma meilleure hypothèse est quevoyants TL clignotantssont la cause des avertissements de performance de suivi, étant donné l'explication de d'Apple sur le fonctionnement du suivi mondial :
… Odométrie visuelle-inertielle. Ce processus combine les informations du matériel de détection de mouvement du périphérique iOS avec une analyse de la vision par ordinateur de la scène visible par la caméra du périphérique. ARKit reconnaît les caractéristiques remarquables de l'image de la scène, enregistre les différences de position entre ces images et entre les images vidéo, et compare ces informations aux données de détection de mouvement.
(iPhone 6S, iOS 11 beta 4, aucune autre application ne tourne en arrière-plan)
Des questions:
Quelle est la différence entre [0]
et [1]
?
Qu'est-ce qui peut causer ces erreurs?
Quel impact ont-ils alors que la ARSession
n'a pas (encore) échoué? Je suppose que nous verrons des modèles "instables", car les coordonnées mondiales fournies par les mises à jour du cadre ne sont pas exactes - NB. après avoir réinitialisé/arrêté ARAnchor
le suivi des erreurs se produisait toujours.
Savons-nous si la session AR est sur le point d’échouer ou sera-t-elle inattendue? (Encore une fois, la ARSession
n'échoue pas immédiatement après le passage de l'état de suivi à "limité")
Y a-t-il un moyen de régler ce problème, par exemple libérer ces "contraintes de ressources" mentionnées - ou même les empêcher de se produire?
Je pense que c'est un bug de xcode 9.1. Si vous utilisez SceneKit: recherchez où vous définissez .backgroundColor = "votre couleur" pour ARSCNView ou la sous-classe. Commentez cette ligne et nettoyez le projet.
Cette erreur m'est arrivée car j'ai ajouté manuellement un contrôleur de vue sur le storyboard et ajouté une variable ARSKView
. Cela l'ajoute en tant qu'enfant à une UIView
qui est par défaut une vue enfant dans une UIViewController
. Par conséquent, pour prendre en charge l'orientation paysage et portrait, je devais ajouter les contraintes de mise en page automatique, qui pour une raison quelconque ont déclenché cette erreur .
Lorsque j'ai consulté le projet d'AR stock, la ARSKView
est un enfant immédiat du contrôleur de vue et prend en charge toutes les tailles et orientations de vue prêtes à l'emploi, sans contraintes de mise en page automatique. Lorsque je l'ai configuré de cette façon, les erreurs ont disparu.