Table of Contents

Controlar el proceso de seguimiento de Mega Go

Este artículo explica cómo controlar las funciones y parámetros del proceso de seguimiento de Mega Go para satisfacer las necesidades de distintos escenarios de aplicación.

Antes de empezar

Flujo de trabajo del tracker

El flujo de trabajo del tracker es el siguiente:

flowchart LR
  subgraph startup_graph[Inicio]
    direction TB
    sstart((Inicio de session))
    create[Creación nativa]
    load(Cargar target)
    verify[Verificación de prueba]
    init_g[[Inicialización]]
  end
  
  subgraph init_graph[Inicialización]
    direction TB
    init_{Inicialización 6DoF correcta<br>o no 6DoF}
    init[[Proceso de inicialización del tracking local]]
    detecting[[Detección]]
    tracking_g[[Tracking]]
  end

  subgraph tracking_graph[Tracking]
    direction TB
    tracking[[Tracking continuo]]
  end

  subgraph stopping_graph[Detención]
    direction TB
    unload(Descargar target)
    dispose[Destrucción nativa]
    sstop([Detención de session])
  end

  sstart --> create --> load --> verify --> init_g
  init --> init_ --> |Yes| detecting --> tracking_g
  unload --> dispose --> sstop
  init_ --> |No| init

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

El proceso se divide aproximadamente en varias etapas:

  • Inicio:
    • Después de que la session se inicia, el tracker de la capa nativa se crea.
    • Tras Start() del target, este se carga en el tracker correspondiente.
    • Para los datos de prueba, es necesario validar en línea la elegibilidad de prueba; solo después de que la validación sea correcta se pasa a la siguiente etapa.
  • Inicialización:
    • Cuando se usa una frame source de 6DoF, entra en el proceso local de inicialización del tracking.
      • La inicialización local del tracking puede tardar un poco; depende de la complejidad de la escena y de la capacidad del dispositivo, y normalmente también está relacionada con el algoritmo usado por la capa inferior de la frame source.
    • Cuando se usa una frame source que no es 6DoF, se omite la etapa de inicialización local y se empieza directamente a detectar.
    • El proceso de detección también puede tardar un poco, según lo fácil que sea localizar la escena y la calidad de captura y mapeo de los datos.
    • Con la configuración predeterminada, el contenido de esta etapa no se mostrará; se puede controlar este comportamiento mediante las opciones del componente ActiveController.
  • Seguimiento:
    • El tracker seguirá rastreando continuamente el block actual.
    • Con la configuración predeterminada, solo se mostrará el contenido bajo los nodos target que estén en estado de seguimiento (TargetController.IsTracked == true); este comportamiento se puede controlar mediante las opciones del componente ActiveController.
  • Detención:
    • Después de que la session se detiene, el target se descarga y el tracker de la capa nativa se destruye.

Ajustar el nivel de soporte del dispositivo

La propiedad MegaGoTrackerFrameFilter.MinInputFrameLevel de MegaGoTrackerFrameFilter se usa para especificar el nivel mínimo de dispositivo compatible con Mega.

alt text

Mega Go puede ejecutarse en casi todo tipo de fuentes de frame, pero cada fuente de frame afecta de forma distinta al resultado del tracking.

De forma predeterminada, Mega selecciona la fuente de frame del nivel más alto compatible con el dispositivo para realizar el tracking. La session compatible con Mega Go en la configuración predeterminada ya está configurada con fuentes de frame compatibles con 6DoF y 5DoF.

Para que Mega admita una fuente de frame de cierto nivel en tiempo de ejecución, deben cumplirse dos condiciones:

Por ejemplo, para admitir tracking 3DoF en la session predeterminada, se necesita:

Por otro ejemplo, para eliminar el soporte de tracking 5DoF de la session predeterminada, se necesita:

Cuando no haya disponible ninguna fuente de frame que cumpla las condiciones, el ensamblado de la session fallará.

Conocer el estado actual del sistema

Con la configuración predeterminada de la session, los mensajes de UI se mostrarán en pantalla e incluirán información de estado de Mega Go.

El estado del tracker se mostrará junto a Mega Go: , por ejemplo Tracking o VerifyingTrial. Durante la detección y el tracking, también se mostrarán actualizaciones de localización debajo.

alt text

El estado de tracking del block cargado actualmente se mostrará debajo de Mega Go: , con el formato Block (<trackingStatus>): <name> (<id>). <name> es el nombre del block y <id> es el ID del block. trackingStatus puede ser Tracking o NotTracking, que indican respectivamente si el block actual está siendo rastreado.

alt text

La propiedad MegaGoTrackerFrameFilter.Status permite obtener el estado actual y conocer el funcionamiento del tracker. Cuando aparezca un estado de error, se puede obtener el estado de error mediante MegaGoTrackerFrameFilter.Error y realizar el tratamiento correspondiente.

El siguiente código muestra cómo usar estas propiedades y cómo tratar los estados anómalos más comunes que requieren atención de la aplicación:

void HandleTrackerStatus()
{
    if (tracker.Status == MegaGoTrackerStatus.Error)
    {
        if (tracker.Error == MegaGoTrackerError.ServiceVerificationFailed)
        {
            // la verificacion local fallo; se recomienda comprobar si data ha caducado o ya no es valido (los datos de prueba dejan de ser validos despues de convertir la version de prueba a la version oficial).
        }
        else if (tracker.Error == MegaGoTrackerError.LocalVerificationFailed)
        {
            // la verificacion local fallo; se recomienda comprobar si el archivo target esta completo.
        }
        else
        {
            // otros errores.
        }
    }
    else if (tracker.Status == MegaGoTrackerStatus.VerifyingTrial)
    {
        // se esta verificando el target de prueba. Si la verificacion tarda demasiado, se recomienda comprobar la conexion de red.
    }
    else if (tracker.Status == MegaGoTrackerStatus.VIOInitializing)
    {
        // la entrada VIO se esta inicializando. Si la inicializacion tarda demasiado, se recomienda indicar al usuario que optimice el modo de uso.
        // por ejemplo: "intente orientar la camara hacia delante en diagonal y mueva el dispositivo ampliamente de izquierda a derecha 5 veces."
    }
}

Usa el evento MegaGoTrackerFrameFilter.LocalizationRespond para obtener actualizaciones de localización.

Pausar y continuar

Configura MegaGoTrackerFrameFilter.enabled en false para pausar el tracking.

De forma predeterminada, después de pausar el tracking, todo el contenido bajo los nodos block se ocultará.

Temas relacionados