Contrôler le processus de suivi mega
Cet article présente comment contrôler les différentes fonctions et paramètres du processus de suivi Mega pour répondre aux besoins de différents scénarios d'application.
Avant de commencer
Tracker 的工作流程
Le processus de travail du tracker est le suivant :
flowchart LR
sous-graphe startup_graph[Démarrage]
direction TB
sstart((démarrage de la session))
create[création native]
load(chargement de la cible)
init_g[[initialisation]]
fin
sous-graphe init_graph[Initialisation]
direction TB
init_{initialisation 6DoF réussie<br>ou non 6DoF}
init[[processus d'initialisation du suivi local]]
localization_g[[localisation initiale]]
fin
sous-graphe localization_graph[Localisation initiale]
direction TB
localize__{localisation activée et<br>intervalle de requête dépassé}
localize[localisation cloud]
localize_{bloc localisé et<br>bloc chargé}
tracking_g[[suivi]]
fin
sous-graphe tracking_graph[Suivi]
direction TB
tracking[[suivi continu]]
localizet_{localisation activée et<br>intervalle de requête dépassé}
localize2[localisation cloud]
localize2_{bloc localisé et<br>bloc chargé}
localization_g2[[localisation initiale]]
fin
sous-graphe stopping_graph[Arrêt]
direction TB
unload(déchargement de la cible)
dispose[destruction native]
sstop([arrêt de la session])
fin
sstart --> create --> load --> init_g
init --> init_ --> |Oui| localization_g
localize --> localize_ --> |Oui| tracking_g
localize_ --> |Non| localize__ --> |Oui| localize
unload --> dispose --> sstop
init_ --> |Non| init
tracking --> localizet_ --> |Oui| localize2 --> localize2_ --> |Oui| tracking
localizet_ --> |Non| tracking
localize2_ --> |Non| localization_g2
startup_graph --> init_graph
init_graph --> localization_graph
localization_graph --> tracking_graph
tracking_graph --> localization_graph
tracking_graph --> stopping_graph
Le processus est globalement divisé en plusieurs étapes :
- Démarrage :
- Après le démarrage de la session, le tracker de la couche native est créé.
- La cible elle-même, après son Start(), est chargée dans le tracker correspondant.
- Initialisation :
- Lors de l'utilisation d'une source de trames 6DoF, le processus d'initialisation du suivi local est lancé.
- Lors de l'utilisation d'une source de trames non 6DoF, l'étape d'initialisation est ignorée, passant directement à l'étape de localisation initiale.
- Ce processus peut prendre un certain temps, en fonction de la complexité de la scène et des capacités de performance de l'appareil, et est généralement lié à l'algorithme utilisé en couche basse par la source de trames.
- Par défaut, le contenu de cette étape n'est pas affiché. Ce comportement peut être contrôlé via les options du composant ActiveController.
- Localisation initiale :
- Si la localisation est activée et que l'intervalle de requête est dépassé, le tracker envoie une requête de localisation au cloud.
- En cas de succès de la localisation, si le bloc correspondant à l'ID renvoyé par le service de localisation est chargé, l'étape de suivi est lancée ; si le bloc n'est pas chargé, le tracker attend que le chargement du bloc se termine et attend la prochaine requête de localisation.
- En cas d'échec de la localisation, le tracker continue d'attendre la prochaine requête de localisation.
- Ce processus peut prendre un certain temps, selon la facilité de localisation de la scène et l'état du réseau.
- Par défaut, le contenu de cette étape n'est pas affiché. Ce comportement peut être contrôlé via les options du composant ActiveController.
- Si la localisation est activée et que l'intervalle de requête est dépassé, le tracker envoie une requête de localisation au cloud.
- Suivi :
- Le tracker suit continuellement le bloc actuel.
- Si la localisation est activée et que l'intervalle de requête est dépassé, le tracker envoie une requête de localisation au cloud.
- En cas de succès de la localisation, si l'ID renvoyé par le service de localisation n'a pas changé, le suivi continue ; si l'ID a changé et que le bloc est chargé, le tracker bascule vers le nouveau bloc et continue le suivi ; si l'ID a changé et que le bloc n'est pas chargé, le tracker attend que le chargement du bloc se termine et attend la prochaine requête de localisation.
- En cas d'échec de la localisation, le tracker continue de suivre le bloc actuel et attend la prochaine requête de localisation.
- Par défaut, dans cette étape, seul le contenu sous le nœud cible en état de suivi (TargetController.IsTracked ==
true) est affiché. Ce comportement peut être contrôlé via les options du composant ActiveController.
- Arrêt :
- Après l'arrêt de la session, la cible est déchargée et le tracker de la couche native est détruit.
Ajuster le niveau de support de l'appareil
La propriété MegaTrackerFrameFilter.MinInputFrameLevel de MegaTrackerFrameFilter est utilisée pour spécifier le niveau d'appareil minimum pris en charge par Mega.
![]()
Mega peut fonctionner sur presque tous les types de sources de trames de données, mais différentes sources de trames de données ont des effets différents sur les performances de suivi.
Par défaut, Mega sélectionne la source de trames de données de niveau le plus élevé supporté par l'appareil pour le suivi. La session prenant en charge Mega avec la configuration par défaut est déjà configurée avec des sources de trames de données prenant en charge 6DoF et 5DoF.
Pour qu'une source de trames de données d'un certain niveau soit prise en charge pendant l'exécution de Mega, deux conditions doivent être remplies :
- La source de trames de données requise doit se trouver dans le groupe de sources de trames de données disponibles de la session.
- MegaTrackerFrameFilter.MinInputFrameLevel doit être supérieur ou égal au niveau CameraTransformType de la source de trames de données requise.
Par exemple, pour prendre en charge le suivi 3DoF dans une session par défaut, il faut :
- Ajouter ThreeDofCameraDeviceFrameSource au groupe de sources de trames de données de la session.
- Modifier MegaTrackerFrameFilter.MinInputFrameLevel en ThreeDof.
Un autre exemple : pour supprimer le support du suivi 5DoF dans une session par défaut, il faut :
- Supprimer InertialCameraDeviceFrameSource du groupe de sources de trames de données de la session.
- Modifier MegaTrackerFrameFilter.MinInputFrameLevel en SixDof (même sans modification, comme il n'y a pas de source de trames de données 5DoF, le 5DoF ne sera pas utilisé).
Lorsqu'aucune source de trames de données répondant aux conditions n'est disponible, l'assemblage de la session échouera.
Connaître l'état actuel du système
Avec la configuration par défaut de la session, les messages de l'UI s'affichent sur l'écran, et contiennent des informations sur l'état de suivi de Mega.
Lorsque la localisation réussit, l'information du service Mega contient le texte d'état Found ; lorsque la localisation échoue, l'information du service Mega contient le texte d'état NotFound.
Les blocs déjà chargés s'affichent sous la forme Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Dans cette expression, <objName> est le nom de l'objet de scène correspondant au bloc, <name> est le nom du bloc et <id> est l'identifiant ID du bloc. trackingStatus peut être Tracking ou NotTracking, qui indiquent respectivement si le bloc est actuellement en cours de suivi.
![]()
Lorsque la localisation réussit, les informations du bloc qui a été localisé mais pas chargé s'affichent sous la forme Block [scnObj=?]: <name> (<id>).
![]()
Astuce
NotFound est un état normal, il apparaît fréquemment pendant tout le fonctionnement de Mega, et le suivi continue même quand cet état apparaît. En général, il n'est pas nécessaire de traiter spécialement l'état NotFound lors du développement de l'application.
Vous pouvez utiliser l'événement MegaTrackerFrameFilter.LocalizationRespond pour obtenir l'état de localisation actuel, et ainsi savoir si le système a trouvé la cible de suivi actuellement.
Le code ci-dessous montre comment utiliser cet événement, ainsi que les méthodes de traitement courantes des états anormaux que l'application doit surveiller :
private void Awake()
{
megaTracker.LocalizationRespond += HandleLocalizationStatusChange;
}
private void HandleLocalizationStatusChange(MegaLocalizationResponse response)
{
var status = response.Status;
wakingUpCount = status == MegaTrackerLocalizationStatus.WakingUp ? wakingUpCount + 1 : 0;
if (wakingUpCount >= 5)
{
// le service est en cours de réveil, il faut demander à l'utilisateur final d'attendre
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// la limite de QPS est dépassée, certains utilisateurs finaux auront aléatoirement des échecs de localisation (la qualité globale du suivi diminue)
// dans ce cas, il faut généralement augmenter la limite de QPS en payant pour garantir la qualité du suivi pour le volume d'utilisateurs actuel
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// le Token a expiré, cela n'apparaît que lors de l'accès au service avec l'interface Token
// pour résoudre ce problème, l'application doit demander un nouveau Token à son propre backend, puis appeler MegaTrackerFrameFilter.UpdateToken pour le mettre à jour
}
}
Si l'application rencontre fréquemment l'état
Mise en pause et reprise
La fonction de suivi et de localisation de Mega peut être mise en pause et reprise séparément.
Suspendre le suivi
Définissez MegaTrackerFrameFilter.enabled sur false pour suspendre le suivi.
Par défaut, après la suspension du suivi, tout le contenu sous le nœud block est masqué.
Suspension de la localisation
Définissez MegaTrackerFrameFilter.EnableLocalization sur false pour suspendre la localisation.
Avertissement
La suspension de la localisation affecte l'effet de suivi, il n'est généralement pas recommandé de modifier ce paramètre. Veuillez l'utiliser sous la direction du support technique d'EasyAR.
Si la localisation a été suspendue pendant l'exécution de l'application, veuillez impérativement le préciser lorsque vous signalez un problème à EasyAR.
Services et contrôle des requêtes
Le comportement des services de requête peut être contrôlé en modifiant les paramètres du composant MegaTrackerFrameFilter.
Intervalle de requête et délai d'attente
Sélectionnez l'objet Mega Tracker sous la session. Modifiez les options sous Request Time Parameters pour ajuster l'intervalle de requête et le délai d'attente du service.
![]()
Dans le script, vous pouvez modifier MegaTrackerFrameFilter.RequestTimeParameters pour obtenir le même effet.
Avertissement
La modification de l'intervalle de requête affecte l'effet de suivi. Il n'est généralement pas recommandé de la modifier. Veuillez l'utiliser sous la direction du support technique EasyAR.
Si l'intervalle de requête a été modifié pendant l'exécution de l'application, veuillez absolument mentionner ce point lors du signalement d'un problème à EasyAR.
Changer de bibliothèque de localisation
Utilisez MegaTrackerFrameFilter.SwitchEndPoint pour changer de bibliothèque de localisation pendant l'exécution. Lorsque vous utilisez cette interface, le flux de la caméra et la session ne sont pas interrompus.
Sujets connexes
- Meilleures pratiques de session AR pour Mega présente comment créer et configurer une session AR pour Mega.
- Ajouter une cible de suivi Mega présente comment ajouter un bloc de cible de suivi Mega et comment charger le modèle de bloc dans l'éditeur Unity pour faciliter le développement.
- Ajouter un groupe de sources de données d'image présente comment modifier le groupe de sources de données d'image d'une session.
- Obtenir les résultats d'exécution d'une session présente comment obtenir les résultats de suivi du composant de session.
- Messages UI présente comment utiliser les messages UI pour afficher l'état de la session.