Table of Contents

Contrôler le processus de suivi Mega

Cet article explique 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

Workflow du tracker

Le workflow du tracker est le suivant :

flowchart LR
  subgraph startup_graph[Démarrage]
    direction TB
    sstart((session démarrée))
    create[Création native]
    load(Charger target)
    init_g[[Initialisation]]
  end
  
  subgraph 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]]
  end

  subgraph localization_graph[Localisation initiale]
    direction TB
    localize__{Localisation activée et<br>intervalle de requête dépassé}
    localize[Localisation cloud]
    localize_{Localisé sur block et<br>block chargé}
    tracking_g[[Suivi]]
  end
  
  subgraph tracking_graph[Suivi]
    direction TB
    tracking[[Suivi continu]]
  
    localizet_{Localisation activée et<br>intervalle de requête dépassé}
    localize2[Localisation cloud]
    localize2_{Localisé sur block et<br>block chargé}
    localization_g2[[Localisation initiale]]
  end

  subgraph stopping_graph[Arrêt]
    direction TB
    unload(Dechargér target)
    dispose[Destruction native]
    sstop([session arrêtée])
  end

  sstart --> create --> load --> init_g
  init --> init_ --> |Yes| localization_g
  localize --> localize_ --> |Yes| tracking_g
  localize_ --> |No| localize__ --> |Yes| localize
  unload --> dispose --> sstop
  init_ --> |No| init

  tracking --> localizet_ --> |Yes| localize2 --> localize2_ --> |Yes| tracking
  localizet_ --> |No| tracking
  localize2_ --> |No| localization_g2

  startup_graph --> init_graph
  init_graph --> localization_graph
  localization_graph --> tracking_graph
  tracking_graph --> localization_graph
  tracking_graph --> stopping_graph

Le flux se décompose en plusieurs étapes :

  • Démarrage :
    • Après le démarrage de la session, le tracker natif est créé.
    • Après le Start() de la target, celle-ci est chargée dans le tracker correspondant.
  • Initialisation :
    • Avec une frame source 6DoF, le processus d’initialisation du suivi local démarre.
    • Avec une frame source non 6DoF, l’étape d’initialisation est sautée et l’on passe directement à la localisation initiale.
    • Ce processus peut prendre un certain temps, selon la complexité de la scène et les capacités de l’appareil, et dépend généralement de l’algorithme utilisé au niveau de la frame source.
    • Avec la configuration par défaut, ce contenu n’est pas affiché ; vous pouvez contrôler ce comportement via l’option 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.
      • Si la localisation réussit et que le block correspondant à l’id retourné par le service est chargé, la phase de suivi démarre ; si le block n’est pas chargé, le système attend la fin du chargement du block et la prochaine requête de localisation.
      • Si la localisation échoue, 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, la qualité de la capture et de la cartographie, ainsi que l’état du réseau.
    • Avec la configuration par défaut, ce contenu n’est pas affiché ; vous pouvez contrôler ce comportement via l’option du composant ActiveController.
  • Suivi :
    • Le tracker suit en continu le block courant.
    • 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.
      • Si la localisation réussit et que l’id renvoyé ne change pas, le suivi continue ; si l’id change et que le block est chargé, le tracker bascule vers le nouveau block et continue le suivi ; si l’id change mais que le block n’est pas chargé, le système attend la fin du chargement du block et la prochaine requête de localisation.
      • Si la localisation échoue, le tracker continue de suivre le block courant et attend la prochaine requête de localisation.
    • Avec la configuration par défaut, seul le contenu sous les nœuds target actuellement suivis (TargetController.IsTracked == true) est affiché ; vous pouvez contrôler ce comportement via l’option du composant ActiveController.
  • Arrêt :
    • Après l’arrêt de la session, la target est déchargée et le tracker natif est détruit.

Ajuster le niveau de prise en charge de l’appareil

La propriété MegaTrackerFrameFilter.MinInputFrameLevel de MegaTrackerFrameFilter sert à spécifier le niveau minimal d’appareil pris en charge par Mega.

alt text

Mega peut fonctionner avec presque tous les types de frame source, mais les différentes frame sources ont des effets différents sur le suivi.

Par défaut, Mega choisit la frame source prise en charge par l’appareil au niveau le plus élevé. La session compatible Mega avec la configuration par défaut est déjà configurée avec des frame sources 6DoF et 5DoF.

Pour prendre en charge un certain niveau de frame source pendant l’exécution de Mega, deux conditions doivent être remplies :

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

Autre exemple, pour supprimer le support du suivi 5DoF dans la session par défaut, il faut :

Si aucune frame source répondant aux conditions n’est disponible, l’assemblage de la session échouera.

Comprendre l’état actuel du système

Avec la configuration de session par défaut, les messages UI s’affichent à l’écran et contiennent des informations sur l’état du suivi Mega.

Lorsque la localisation réussit, le texte d’état Found apparaît sous les informations du service Mega ; lorsque la localisation échoue, le texte NotFound apparaît.

Un block chargé est affiché sous la forme Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Ici, <objName> est le nom de l’objet scène correspondant au block, <name> est le nom du block, et <id> est l’ID du block. trackingStatus peut être Tracking ou NotTracking, indiquant si le block courant est suivi ou non.

alt text alt text

Quand la localisation réussit, un block localisé mais non chargé s’affiche sous la forme Block [scnObj=?]: <name> (<id>).

alt text

Astuce

NotFound est un état normal ; il apparaît souvent pendant tout le fonctionnement de Mega, et le suivi continue malgré cet état. En général, il n’est pas nécessaire de traiter spécialement l’état NotFound dans le développement d’une application.

Vous pouvez utiliser l’événement MegaTrackerFrameFilter.LocalizationRespond pour obtenir l’état de localisation courant et savoir si le système a trouvé la target à suivre.

Le code suivant montre comment utiliser cet événement et comment traiter les états anormaux courants qui doivent attirer l’attention de l’application :

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 reveil ; l utilisateur final doit attendre
    }

    if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
    {
        // la limite de QPS est depassee ; certains utilisateurs finaux peuvent echouer aleatoirement a se localiser (la qualite globale du tracking diminue)
        // il faut generalement payer pour augmenter la limite de QPS afin de garantir la qualite du tracking avec le nombre actuel d utilisateurs
    }

    if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
    {
        // le Token a expire ; cela ne se produit que lors de l acces au service via l interface Token
        // pour resoudre ce probleme, l application doit demander un Token a son propre backend et appeler MegaTrackerFrameFilter.UpdateToken pour le mettre a jour
    }
}

Si l’application rencontre souvent l’état MegaTrackerLocalizationStatus.RequestTimeout, cela indique généralement que le réseau entre l’appareil et le service n’est pas bon. Il est recommandé d’optimiser l’environnement réseau pour améliorer la qualité du suivi. Si le réseau ne peut pas être amélioré, vous pouvez envisager d’augmenter le délai d’expiration des requêtes.

Note

Cet événement ne permet pas d’obtenir le pose renvoyé par la localisation.

En réalité, le pose renvoyé par la localisation n’est pas nécessaire pour le développement applicatif. Après le retour de la localisation, EasyAR calcule via des algorithmes locaux un pose plus précis pour le développeur, et ce pose est déjà reflété dans le transform du block. Consultez Obtenir les résultats d’exécution de la session.

Mettre en pause et reprendre

Le suivi et la localisation de Mega peuvent être mis en pause et repris séparément.

Mettre en pause le suivi

Définir MegaTrackerFrameFilter.enabled sur false permet de mettre le suivi en pause.

Par défaut, lorsque le suivi est mis en pause, tout le contenu sous les nœuds block est masqué.

Mettre en pause la localisation

Définir MegaTrackerFrameFilter.EnableLocalization sur false permet de mettre la localisation en pause.

Avertissement

Mettre la localisation en pause affecte les résultats de suivi et n’est généralement pas recommandé. Veuillez l’utiliser sous la direction du support technique EasyAR.

Si la localisation a été mise en pause pendant l’exécution de l’application, veuillez le préciser lorsque vous signalez un problème à EasyAR.

Contrôle du service et des requêtes

Vous pouvez contrôler le comportement des requêtes vers le service en modifiant les paramètres du composant MegaTrackerFrameFilter.

Choisir le dépôt de localisation

Sélectionnez l’objet Mega Tracker sous la session ; les options sous Service permettent d’ajuster le dépôt de localisation connecté. Cette option doit être définie avant le démarrage de la session.

Avec la configuration par défaut, Access Source est Global Config, la configuration du service utilise la configuration globale, et les paramètres de service peuvent être modifiés dans Project Settings > EasyAR > Sense > Mega > Mega Block. Cette configuration affecte toutes les sessions utilisant cette configuration globale.

alt text

Astuce

La configuration du service peut être obtenue depuis le centre de développement EasyAR. Mega Config Detail

Si vous devez utiliser des dépôts de localisation différents dans différentes sessions, définissez Access Source sur API Key, puis modifiez les paramètres de service ci-dessous.

alt text

Dans le script, vous pouvez modifier MegaTrackerFrameFilter.ServiceAccessSource et MegaTrackerFrameFilter.ServiceAccessData pour obtenir le même effet.

Par exemple, le code suivant montre comment configurer le tracker avant le démarrage de la session pour qu’il se connecte au service avec des paramètres à l’exécution :

megaTracker.ServiceType = easyar.MegaApiType.Block;
megaTracker.ServiceAccessSource = easyar.MegaServiceAccessSourceType.APIKey;
megaTracker.ServiceAccessData = new easyar.APIKeyAccessData
{
    ServerAddress = serverAddress,
    APIKey = apiKey,
    APISecret = apiSecret,
    AppID = appID
};

Intervalle et délai d’expiration des requêtes

Sélectionnez l’objet Mega Tracker sous la session ; les options sous Request Time Parameters permettent d’ajuster l’intervalle et le délai d’expiration des requêtes vers le service.

alt text

Dans le script, vous pouvez modifier MegaTrackerFrameFilter.RequestTimeParameters pour obtenir le même effet.

Avertissement

Modifier l’intervalle de requête affecte les résultats de suivi et n’est généralement pas recommandé. 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 le préciser lorsque vous signalez un problème à EasyAR.

Changer de dépôt de localisation

Utilisez MegaTrackerFrameFilter.SwitchEndPoint pour changer de dépôt de localisation à l’exécution. Avec cette interface, l’image caméra et la session ne seront pas interrompues.

Sujets associés