Table of Contents

Controlar el proceso de seguimiento de mega

Este artículo describe cómo controlar las diversas funciones y parámetros en el proceso de seguimiento de mega para satisfacer las necesidades de diferentes escenarios de aplicación.

Antes de comenzar

Flujo de trabajo del rastreador

El flujo de trabajo del rastreador es el siguiente:

flowchart LR
  subgraph startup_graph[Arranque]
    direction TB
    sstart((inicio de sesión))
    create[creación nativa]
    load(cargar objetivo)
    init_g[[inicialización]]
  end
  
  subgraph init_graph[Inicialización]
    direction TB
    init_{6DoF inicializado con éxito<br>o no 6DoF}
    init[[proceso de inicialización de seguimiento local]]
    localization_g[[localización inicial]]
  end

  subgraph localization_graph[Localización inicial]
    direction TB
    localize__{localización activada y<br>intervalo de solicitud excedido}
    localize[localización en la nube]
    localize_{bloque localizado y<br>bloque cargado}
    tracking_g[[seguimiento]]
  end
  
  subgraph tracking_graph[Seguimiento]
    direction TB
    tracking[[seguimiento continuo]]
  
    localizet_{localización activada y<br>intervalo de solicitud excedido}
    localize2[localización en la nube]
    localize2_{bloque localizado y<br>bloque cargado}
    localization_g2[[localización inicial]]
  end

  subgraph stopping_graph[Detención]
    direction TB
    unload(descargar objetivo)
    dispose[destrucción nativa]
    sstop([sesión detenida])
  end

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

  tracking --> localizet_ --> |Sí| localize2 --> localize2_ --> |Sí| 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

El flujo se divide aproximadamente en varias fases:

  • Arranque:
    • Después de que se inicia la sesión, se crea el rastreador en la capa nativa.
    • El objetivo en sí se carga en el rastreador correspondiente después de su propio Start().
  • Inicialización:
    • Cuando se utiliza una fuente de frames 6DoF, se entra en el proceso de inicialización de seguimiento local.
    • Cuando se utiliza una fuente de frames no 6DoF, se omite la fase de inicialización y se pasa directamente a la fase de localización inicial.
    • Este proceso puede llevar algo de tiempo, relacionado con la complejidad de la escena y la capacidad de rendimiento del dispositivo, y generalmente está relacionado con el algoritmo utilizado subyacente a la fuente de frames.
    • En la configuración predeterminada, el contenido de esta fase no se muestra, este comportamiento se puede controlar a través de las opciones del componente ActiveController.
  • Localización inicial:
    • Si la localización está activada y se excede el intervalo de solicitud, el rastreador envía una solicitud de localización a la nube.
      • Si la localización tiene éxito y el bloque correspondiente al ID devuelto por el servicio de localización está cargado, se entra en la fase de seguimiento; si el bloque no está cargado, se continúa esperando a que se complete la carga del bloque y a la siguiente solicitud de localización.
      • Si la localización falla, el rastreador continúa esperando la siguiente solicitud de localización.
    • Este proceso puede llevar algo de tiempo, dependiendo de la facilidad de localización de la escena y las condiciones de la red.
    • En la configuración predeterminada, el contenido de esta fase no se muestra, este comportamiento se puede controlar a través de las opciones del componente ActiveController.
  • Seguimiento:
    • El rastreador continúa rastreando el bloque actual.
    • Si la localización está activada y se excede el intervalo de solicitud, el rastreador envía una solicitud de localización a la nube.
      • Si la localización tiene éxito y el ID devuelto por el servicio de localización no ha cambiado, se continúa el seguimiento; si el ID ha cambiado y el bloque está cargado, se cambia al nuevo bloque y se continúa el seguimiento; si el ID ha cambiado y el bloque no está cargado, se continúa esperando a que se complete la carga del bloque y a la siguiente solicitud de localización.
      • Si la localización falla, el rastreador continúa rastreando el bloque actual y espera la siguiente solicitud de localización.
    • En la configuración predeterminada, en esta fase solo se muestra el contenido bajo el nodo del objetivo que está en estado de seguimiento (TargetController.IsTracked == true), este comportamiento se puede controlar a través de las opciones del componente ActiveController.
  • Detención:
    • Después de que se detiene la sesión, el objetivo se descarga y el rastreador en la capa nativa se destruye.

Ajustar el nivel de soporte del dispositivo

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

alt text

Mega puede ejecutarse en casi todos los tipos de fuentes de datos de fotogramas, pero diferentes fuentes de datos de fotogramas tienen diferentes efectos en el rendimiento del seguimiento.

Por defecto, Mega selecciona la fuente de datos de fotogramas de nivel más alto compatible con el dispositivo para realizar el seguimiento. La sesión compatible con Mega configurada por defecto ya está configurada con fuentes de datos de fotogramas compatibles con 6DoF y 5DoF.

Para que Mega admita una fuente de datos de fotogramas de un nivel específico durante su ejecución, se deben cumplir dos condiciones:

Por ejemplo, para admitir seguimiento 3DoF en una sesión por defecto, se necesita:

Otro ejemplo, para eliminar el soporte de seguimiento 5DoF en una sesión por defecto, se necesita:

Cuando no hay una fuente de datos de fotogramas disponible que cumpla las condiciones, el ensamblaje de la sesión fallará.

Conoce el estado actual del sistema

Bajo la configuración de sesión predeterminada, los mensajes de la interfaz de usuario se muestran en la pantalla, que contienen información sobre el estado de seguimiento de Mega.

Cuando la localización es exitosa, la información del servicio Mega incluirá el texto de estado Found; cuando falla, incluirá el texto de estado NotFound.

Los bloques cargados se mostrarán como Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Donde <objName> es el nombre del objeto de escena correspondiente al bloque, <name> es el nombre del bloque y <id> es el ID del bloque. trackingStatus puede ser Tracking o NotTracking, indicando si el bloque está siendo rastreado actualmente.

texto alternativo texto alternativo

Cuando la localización es exitosa, la información de los bloques localizados pero no cargados se mostrará como Block [scnObj=?]: <name> (<id>).

texto alternativo

Consejo

NotFound es un estado normal, que ocurre con frecuencia durante todo el proceso de trabajo de Mega, y el seguimiento continúa cuando aparece este estado. Por lo general, no es necesario un manejo especial del estado NotFound en el desarrollo de aplicaciones.

Usando el evento MegaTrackerFrameFilter.LocalizationRespond se puede obtener el estado de localización actual, para saber si el sistema ha encontrado el objetivo de seguimiento.

El siguiente código muestra cómo usar este evento, así como métodos comunes para manejar estados excepcionales que requieren atención de la aplicación:

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)
    {
        // El servicio se está despertando, es necesario que el usuario final espere.
    }

    if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
    {
        // Se excedió el límite de QPS, algunos usuarios finales fallarán aleatoriamente en la localización (calidad general de seguimiento disminuida)
        // En este caso, generalmente se necesita pagar para aumentar el límite de QPS y garantizar la calidad de seguimiento con el volumen actual de usuarios.
    }

    if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
    {
        // Token expirado, esto solo ocurre cuando se accede al servicio usando la interfaz de Token
        // Para abordar este problema, la aplicación necesita solicitar un Token a su propio backend y llamar a MegaTrackerFrameFilter.UpdateToken para actualizarlo.
    }
}

Si la aplicación encuentra frecuentemente el estado MegaTrackerLocalizationStatus.RequestTimeout, generalmente indica que la conexión de red del dispositivo al servicio es deficiente. Se recomienda optimizar el entorno de red para mejorar la calidad del seguimiento. En escenarios donde no se puede mejorar la red, se puede considerar aumentar el tiempo de espera de la solicitud.

Nota

No es posible obtener la pose devuelta por la localización a través de este evento.

De hecho, la pose devuelta por la localización no es necesaria en el desarrollo de aplicaciones. EasyAR calculará una pose más precisa a través de algoritmos locales después de que la localización regrese y la devolverá para que los desarrolladores la usen, y esta pose ya se refleja en el transform del bloque. Puede consultar Obtener los resultados de ejecución de la sesión.

Pausar y reanudar

Las funciones de seguimiento y localización de Mega se pueden pausar y reanudar por separado.

Pausar el seguimiento

Establezca MegaTrackerFrameFilter.enabled en false para pausar el seguimiento.

Por defecto, después de pausar el seguimiento, todo el contenido bajo los nodos de bloque se ocultará.

Pausar la localización

Establecer MegaTrackerFrameFilter.EnableLocalization en false para pausar la localización.

Advertencia

Pausar la localización afectará el efecto de seguimiento, generalmente no se recomienda modificarlo. Úselo bajo la guía del soporte técnico de EasyAR.

Si la localización se pausó durante la ejecución de la aplicación, asegúrese de mencionar este punto al informar problemas a EasyAR.

Servicios y control de solicitudes

Puedes controlar el comportamiento de las solicitudes de servicio modificando los parámetros del componente MegaTrackerFrameFilter.

Intervalo de solicitud y tiempo de espera

Seleccione el objeto Mega Tracker bajo la sesión, modifique las opciones bajo Request Time Parameters para ajustar el intervalo de solicitud del servicio y el tiempo de espera.

alt text

En el script, puede modificar MegaTrackerFrameFilter.RequestTimeParameters para lograr el mismo efecto.

Advertencia

Modificar el intervalo de solicitud afectará el efecto de seguimiento, generalmente no se recomienda modificarlo. Úselo bajo la guía del soporte técnico de EasyAR.

Si el intervalo de solicitud se modificó durante la ejecución de la aplicación, asegúrese de mencionar este punto al informar problemas a EasyAR.

Cambiar la base de datos de localización

Usa MegaTrackerFrameFilter.SwitchEndPoint para cambiar la base de datos de localización en tiempo de ejecución. Al usar esta interfaz, la imagen de la cámara y la sesión no se interrumpirán.

Temas relacionados