Table of Contents

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.
  • 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.

alt text

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 :

Par exemple, pour prendre en charge le suivi 3DoF dans une session par défaut, il faut :

Un autre exemple : pour supprimer le support du suivi 5DoF dans une session par défaut, il faut :

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.

alt text alt text

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>).

alt text

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.

alt text

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