Table of Contents

Controlar o processo de rastreamento Mega

Este artigo apresenta como controlar as várias funcionalidades e parâmetros no processo de rastreamento Mega 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((Início da sessão))
    create[Criação nativa]
    load(Carregar target)
    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 de rastreamento local]]
    localization_g[[Localização inicial]]
  end

  subgraph localization_graph[Localização inicial]
    direction TB
    localize__{Localização ativada e<br>tempo limite de solicitação excedido}
    localize[Localização na nuvem]
    localize_{Localizado em um bloco e<br>bloco carregado}
    tracking_g[[Rastreamento]]
  end
  
  subgraph tracking_graph[Rastreamento]
    direction TB
    tracking[[Rastreamento contínuo]]
  
    localizet_{Localização ativada e<br>tempo limite de solicitação excedido}
    localize2[Localização na nuvem]
    localize2_{Localizado em um bloco e<br>bloco carregado}
    localization_g2[[Localização inicial]]
  end

  subgraph stopping_graph[Parada]
    direction TB
    unload(Descarregar target)
    dispose[Destruição nativa]
    sstop([Parada da sessão])
  end

  sstart --> create --> load --> init_g
  init --> init_ --> |Sim| localization_g
  localize --> localize_ --> |Sim| tracking_g
  localize_ --> |Não| localize__ --> |Sim| localize
  unload --> dispose --> sstop
  init_ --> |Não| init

  tracking --> localizet_ --> |Sim| localize2 --> localize2_ --> |Sim| tracking
  localizet_ --> |Não| tracking
  localize2_ --> |Não| localization_g2

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

O fluxo é dividido em vários estágios:

  • Inicialização:
    • Após o início da sessão, o tracker da camada nativa é criado.
    • Após o Start() do target, ele é carregado no tracker correspondente.
  • Inicialização:
    • Ao usar a fonte de quadro 6DoF, entra-se no processo de inicialização de rastreamento local.
    • Ao usar uma fonte de quadro não 6DoF, a fase de inicialização é pulada e se passa diretamente para a fase de localização inicial.
    • Esse processo pode levar algum tempo, dependendo da complexidade da cena e da capacidade de desempenho do dispositivo, e geralmente está relacionado ao algoritmo usado na camada inferior da fonte de quadro.
    • Na configuração padrão, o conteúdo dessa fase não é exibido. Isso pode ser controlado pelas opções do componente ActiveController.
  • Localização inicial:
    • Se a localização estiver ativada e o tempo limite de solicitação for excedido, o tracker enviará uma solicitação de localização para a nuvem.
      • Após a localização bem - sucedida, se o bloco correspondente ao ID retornado pelo serviço de localização estiver carregado, entra - se na fase de rastreamento; se o bloco não estiver carregado, continua - se esperando o término do carregamento do bloco e a próxima solicitação de localização.
      • Após a falha na localização, o tracker continua esperando a próxima solicitação de localização.
    • Esse processo pode levar algum tempo, dependendo da facilidade de localização da cena e da condição da rede.
    • Na configuração padrão, o conteúdo dessa fase não é exibido. Isso pode ser controlado pelas opções do componente ActiveController.
  • Rastreamento:
    • O tracker rastreia continuamente o bloco atual.
    • Se a localização estiver ativada e o tempo limite de solicitação for excedido, o tracker enviará uma solicitação de localização para a nuvem.
      • Após a localização bem - sucedida, se o ID retornado pelo serviço de localização não mudar, continua - se o rastreamento; se o ID mudar e o bloco estiver carregado, muda - se para o novo bloco e continua - se o rastreamento; se o ID mudar e o bloco não estiver carregado, continua - se esperando o término do carregamento do bloco e a próxima solicitação de localização.
      • Após a falha na localização, o tracker continua rastreando o bloco atual e espera a próxima solicitação de localização.
    • Na configuração padrão, apenas o conteúdo do nó do target em estado de rastreamento (TargetController.IsTracked == true) é exibido. Isso pode ser controlado pelas opções do componente ActiveController.
  • Parada:
    • Após a parada da sessão, o target é descarregado e o tracker da camada nativa é destruído.

Ajustar o nível de suporte do dispositivo

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

alt text

O Mega pode ser executado em quase todos os tipos de fontes de dados de quadros, mas diferentes fontes de dados de quadros têm diferentes impactos no efeito de rastreamento.

Por padrão, o Mega selecionará a fonte de dados de quadros de nível mais alto suportada pelo dispositivo para rastreamento. A sessão que suporta o Mega na configuração padrão já está configurada com fontes de dados de quadros que suportam 6DoF e 5DoF.

Para suportar um determinado nível de fonte de dados de quadros durante a execução do Mega, são necessárias duas condições:

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

Outro exemplo, para remover o suporte ao rastreamento 5DoF na sessão padrão, é necessário:

Quando não houver fonte de dados de quadros que atenda às condições disponível, a montagem da sessão falhará.

Conhecer o estado atual do sistema

Na configuração padrão da sessão, as mensagens da interface do usuário são exibidas na tela, contendo informações sobre o status de rastreamento do Mega.

Quando o posicionamento é bem-sucedido, a informação do serviço Mega conterá o texto de status Found; quando o posicionamento falha, a informação do serviço Mega conterá o texto de status NotFound.

Os blocos carregados são exibidos como Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Onde <objName> é o nome do objeto de cena correspondente ao bloco, <name> é o nome do bloco e <id> é o ID do bloco. O trackingStatus pode ser Tracking ou NotTracking, indicando respectivamente se o bloco está sendo rastreado no momento.

alt text alt text

Quando o posicionamento é bem-sucedido, as informações de blocos que foram posicionados, mas não carregados, são exibidas como Block [scnObj=?]: <name> (<id>).

alt text

Dica

NotFound é um estado normal que ocorre frequentemente durante todo o processo de trabalho do Mega. Quando esse estado aparece, o rastreamento ainda continua. Normalmente, o desenvolvimento de aplicativos não requer tratamento especial para o estado NotFound.

Usando o evento MegaTrackerFrameFilter.LocalizationRespond é possível obter o status de posicionamento atual, para saber se o sistema encontrou o alvo de rastreamento no momento.

O código a seguir demonstra como usar esse evento, bem como métodos de tratamento para estados de exceção comuns que exigem atenção do aplicativo:

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)
    {
        // O serviço está acordando, o usuário final precisa aguardar
    }

    if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
    {
        // QPS excedeu o limite, alguns usuários finais podem falhar no posicionamento aleatoriamente (qualidade geral do rastreamento diminui)
        // Geralmente é necessário pagar para aumentar o limite de QPS para garantir a qualidade do rastreamento com o volume atual de usuários
    }

    if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
    {
        // Token expirado, isso só ocorre ao usar a interface de Token para acessar o serviço
        // Para resolver esse problema, o aplicativo precisa solicitar seu próprio backend para obter o Token e chamar MegaTrackerFrameFilter.UpdateToken para atualizá-lo
    }
}

Se o aplicativo frequentemente encontra o estado MegaTrackerLocalizationStatus.RequestTimeout, geralmente indica que a conexão de rede do dispositivo com o serviço é ruim. Recomenda-se otimizar o ambiente de rede para melhorar a qualidade do rastreamento. Em cenários onde a condição da rede não pode ser melhorada, considere aumentar o tempo limite da solicitação.

Nota

Não é possível obter a pose retornada pelo posicionamento por meio desse evento.

Na verdade, a pose retornada pelo posicionamento não é necessária no desenvolvimento de aplicativos. O EasyAR calculará uma pose mais precisa por meio de algoritmos locais após o retorno do posicionamento e a fornecerá aos desenvolvedores para uso. Essa pose já está refletida no transform do bloco. Consulte Obter o resultado da execução da sessão.

Pausar e continuar

As funções de rastreamento e localização do Mega podem ser pausadas e retomadas separadamente.

Pausar o rastreamento

Definir MegaTrackerFrameFilter.enabled como false pode pausar o rastreamento.

Por padrão, depois que o rastreamento é pausado, todo o conteúdo nos nós do bloco será ocultado.

Pausar localização

Defina MegaTrackerFrameFilter.EnableLocalization como false para pausar a localização.

Aviso

Pausar a localização afetará o efeito de rastreamento, geralmente não é recomendado modificar. Use sob a orientação do suporte técnico da EasyAR.

Se a localização foi pausada durante a execução da aplicação, certifique-se de mencionar este ponto ao fornecer feedback à EasyAR.

Controle de serviços e solicitações

É possível controlar o comportamento da solicitação de serviços modificando os parâmetros do componente MegaTrackerFrameFilter.

Intervalo de solicitação e tempo limite

Selecione o objeto Mega Tracker na sessão e modifique as opções em Request Time Parameters para ajustar o intervalo de tempo e o tempo limite das solicitações ao serviço.

alt text

No script, você pode modificar MegaTrackerFrameFilter.RequestTimeParameters para obter o mesmo efeito.

Aviso

Modificar o intervalo de solicitação afeta o desempenho do rastreamento. Geralmente, não é recomendado fazer essa modificação. Use-o apenas sob a orientação do suporte técnico da EasyAR.

Se o intervalo de solicitação for modificado durante a execução do aplicativo, certifique-se de informar isso ao relatar problemas à EasyAR.

Trocar o banco de localização

Use MegaTrackerFrameFilter.SwitchEndPoint para trocar o banco de localização em tempo de execução. Quando esse método é usado, a imagem da câmera e a sessão não serão interrompidas.

Tópicos relacionados