Table of Contents

Controlar o processo de rastreamento do Mega Go

Este artigo explica como controlar as funções e os parâmetros no processo de rastreamento do Mega Go para atender às necessidades de diferentes cenários de aplicação.

Antes de começar

Fluxo de trabalho do tracker

O fluxo de trabalho do tracker é o seguinte:

flowchart LR
  subgraph startup_graph[Inicialização]
    direction TB
    sstart((Inicialização da session))
    create[Criação nativa]
    load(Carregar target)
    verify[Verificação de trial]
    init_g[[Inicialização]]
  end
  
  subgraph init_graph[Inicialização]
    direction TB
    init_{Inicialização 6DoF bem-sucedida<br>ou não 6DoF}
    init[[Processo de inicialização do tracking local]]
    detecting[[Detecção]]
    tracking_g[[Tracking]]
  end

  subgraph tracking_graph[Tracking]
    direction TB
    tracking[[Tracking contínuo]]
  end

  subgraph stopping_graph[Parada]
    direction TB
    unload(Descarregar target)
    dispose[Destruição nativa]
    sstop([Parada da 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

O processo é dividido aproximadamente em várias etapas:

  • Início:
    • Depois que a session inicia, o tracker da camada nativa é criado.
    • Depois do Start() do target, ele é carregado no tracker correspondente.
    • Para dados de teste, é necessário validar online a elegibilidade do teste; somente após a validação bem-sucedida segue para a próxima etapa.
  • Inicialização:
    • Ao usar uma frame source 6DoF, entra no processo local de inicialização de tracking.
      • A inicialização local de tracking pode levar algum tempo; isso depende da complexidade da cena e da capacidade do dispositivo, e normalmente também está relacionado ao algoritmo usado pela camada inferior da frame source.
    • Ao usar uma frame source que não seja 6DoF, a etapa de inicialização local é pulada e a detecção começa diretamente.
    • O processo de detecção também pode levar algum tempo, dependendo de quão fácil é localizar a cena e da qualidade de captura e mapeamento dos dados.
    • Com a configuração padrão, o conteúdo dessa etapa não será exibido; esse comportamento pode ser controlado pelas opções do componente ActiveController.
  • Rastreamento:
    • O tracker continuará rastreando o block atual.
    • Com a configuração padrão, apenas o conteúdo sob os nós target que estiverem em estado de rastreamento (TargetController.IsTracked == true) será exibido; esse comportamento pode ser controlado pelas opções do componente ActiveController.
  • Parada:
    • Depois que a session para, o target é descarregado e o tracker da camada nativa é destruído.

Ajustar o nível de suporte do dispositivo

A propriedade MegaGoTrackerFrameFilter.MinInputFrameLevel de MegaGoTrackerFrameFilter é usada para especificar o nível mínimo de dispositivo suportado pelo Mega.

alt text

O Mega Go pode rodar em quase todos os tipos de frame source, mas cada frame source afeta de forma diferente o resultado do rastreamento.

Por padrão, o Mega escolhe para rastreamento a frame source do nível mais alto suportado pelo dispositivo. A session compatível com Mega Go na configuração padrão já está configurada com frame sources que suportam 6DoF e 5DoF.

Para que o Mega dê suporte a uma frame source de certo nível em runtime, duas condições precisam ser atendidas:

Por exemplo, para suportar tracking 3DoF na session padrão, é necessário:

Em outro exemplo, para remover o suporte a tracking 5DoF da session padrão, é necessário:

Quando não houver nenhuma frame source que atenda às condições, a montagem da session falhará.

Entender o estado atual do sistema

Com a configuração padrão da session, as mensagens de UI serão exibidas na tela e incluirão informações de estado do Mega Go.

O estado do tracker será exibido ao lado de Mega Go: , por exemplo Tracking ou VerifyingTrial. Durante a detecção e o rastreamento, atualizações de localização também serão exibidas abaixo.

alt text

O estado de rastreamento do block atualmente carregado será exibido abaixo de Mega Go: , no formato Block (<trackingStatus>): <name> (<id>). <name> é o nome do block e <id> é o ID do block. trackingStatus pode ser Tracking ou NotTracking, indicando respectivamente se o block atual está sendo rastreado.

alt text

A propriedade MegaGoTrackerFrameFilter.Status pode ser usada para obter o estado atual e entender o funcionamento do tracker. Quando surgir um estado de erro, é possível obter o estado de erro por meio de MegaGoTrackerFrameFilter.Error e tratá-lo adequadamente.

O código abaixo mostra como usar essas propriedades e como lidar com estados anormais comuns que exigem atenção do aplicativo:

void HandleTrackerStatus()
{
    if (tracker.Status == MegaGoTrackerStatus.Error)
    {
        if (tracker.Error == MegaGoTrackerError.ServiceVerificationFailed)
        {
            // a verificacao local falhou; recomenda-se verificar se data expirou ou ficou invalido (os dados de teste ficam invalidos depois que a versao de teste e convertida para a versao oficial).
        }
        else if (tracker.Error == MegaGoTrackerError.LocalVerificationFailed)
        {
            // a verificacao local falhou; recomenda-se verificar se o arquivo target esta completo.
        }
        else
        {
            // outros erros.
        }
    }
    else if (tracker.Status == MegaGoTrackerStatus.VerifyingTrial)
    {
        // o target de teste esta sendo verificado. Se a verificacao demorar muito, recomenda-se verificar a conexao de rede.
    }
    else if (tracker.Status == MegaGoTrackerStatus.VIOInitializing)
    {
        // a entrada VIO esta inicializando. Se a inicializacao demorar muito, recomenda-se orientar o usuario a otimizar o modo de uso.
        // por exemplo: "tente apontar a camera diagonalmente para frente e mover o dispositivo amplamente para a esquerda e para a direita 5 vezes."
    }
}

Use o evento MegaGoTrackerFrameFilter.LocalizationRespond para obter atualizações de localização.

Pausar e continuar

Defina MegaGoTrackerFrameFilter.enabled como false para pausar o rastreamento.

Por padrão, após pausar o rastreamento, todo o conteúdo abaixo dos nós block será ocultado.

Tópicos relacionados