Marcadores de Espaço

Problemas a serem resolvidos

Erro de dimensionamento

Embora a abordagem de âncora espacial tradicional para alinhar os Hologramas aos recursos do mundo real funcione muito bem em pequena escala, conforme a escala cresce, ela encontra dificuldades para cobrir uma área superior a um metro.

O erro de dimensionamento no espaço de rastreamento de cabeça significa que, mesmo que uma âncora espacial mantenha uma extremidade de um objeto virtual dimensionada para alguns metros apenas e perfeitamente alinhada com um recurso de mundo real, a outra extremidade provavelmente estará desalinhada no recurso de mundo real correspondente. Esse desalinhamento ocorre porque a distância percorrida pelo espaço de rastreamento de cabeça tende a diferir da distância percorrida pelo espaço físico com um erro de +-10%. O erro real costuma ser menor (depende de muitas características do ambiente e do dispositivo), mas geralmente será significativo e aumentará à medida que a escala do projeto cresce.

Em outras palavras, se um usuário com um HoloLens percorre 10 metros no mundo real, a distância percorrida no espaço virtual, conforme relatado pelo rastreador de cabeça, ficará entre 9 e 11 metros. Se o usuário se movimentar 50 metros, o erro aumentará para +-5 metros. Quanto maior a distância percorrida pelo usuário, maior o erro.

Assim, um feixe de 10 metros (no espaço de modelagem) com um ponto de extremidade perfeitamente alinhado à extremidade zero de uma fita métrica no espaço real, terá a outra extremidade marcada entre 9 e 11 metros na fita métrica.

Pelos mesmos motivos, vários objetos bloqueados usando âncoras espaciais, terão distanciamentos diferentes no espaço virtual em comparação com o espaço real.

Sistema de coordenadas arbitrárias

Há uma outra preocupação. O sistema de coordenadas do Unity no HoloLens é indeterminado. Ele é baseado apenas na pose da cabeça no início do aplicativo.

Essa arbitrariedade não é um problema para diversas tarefas. Se o objetivo for converter um raio no mapeamento espacial da sala e colocar um Holograma na posição da ocorrência, os valores numéricos da posição da ocorrência serão irrelevantes.

Da mesma forma, ao exibir elementos de UX em torno do usuário, as coordenadas absolutas para posicionar um elemento de UX são irrelevantes, sendo necessárias apenas as coordenadas relativas ao usuário.

No entanto, cenários mais envolvidos podem ser complicados pelo sistema de coordenadas imprevisível. O carregamento de uma grande coleção de objetos como, por exemplo, a área de trabalho de um usuário ou uma sala inteira de um escritório, em um espaço virtual com uma relação fixa ao espaço físico, requer uma transformação de compensação para alinhar os objetos do espaço de modelagem ao quadro de coordenadas baseado na cabeça.

Essa compensação geralmente é feita anexando todos os objetos a uma única transformação do Unity e ajustando essa única transformação para posicionar e orientar os objetos virtuais em alinhamento com o mundo real.

De forma equivalente, uma única transformação na hierarquia da câmera pode ser usada para realinhar a câmera de modo que, quando o usuário estiver vendo um ponto de referência do mundo real, um objeto virtual com as coordenadas de modelagem desejadas aparecerá sobrepondo esse recurso.

A solução

O recurso de Marcação de Espaço aborda esses dois problemas ao mesmo tempo. Isso é feito aproveitando a natureza bloqueada do espaço global do World Locking Tools e a arbitrariedade desse espaço.

Como alinhar o espaço do Unity ao mundo real

Essencialmente, o World Locking Tools fornece um sistema estável de coordenadas bloqueadas. Um objeto virtual posicionado no World Locked Space registrado com um recurso do mundo real permanecerá dessa forma ao longo do tempo.

Mas há um número infinito de espaços que atendem a essa meta. Na verdade, a obtenção de um espaço bloqueado e sua transformação por qualquer posição e rotação arbitrárias produz outro espaço bloqueado igualmente válido.

O recurso de Marcador de Espaço aplica outra restrição que remove a natureza indeterminada da transformação de bloqueio.

Nessa restrição, ao se "aproximar" de um Marcador de Espaço, a pose do Marcador de Espaço no espaço bloqueado será a mesma do Marcador de Espaço no espaço de modelagem.

Imagine um cubo em uma cena do Unity modelado nas coordenadas globais de (0, 0, 1). Quando a cena for carregada no HoloLens, o cubo aparecerá um metro à frente da pose inicial da cabeça. Dependendo da pose inicial da cabeça, ele pode estar em qualquer lugar no espaço físico.

O Marcador de Espaço permite que esse cubo seja bloqueado para um recurso do mundo real na sala, por exemplo, no canto de uma mesa específica. Ao contrário do bloqueio do cubo com uma âncora espacial, o Marcador de Espaço move todo o espaço do Unity de modo que o cubo fique alinhado com o canto da mesa. Por exemplo, outros itens da área de trabalho modelados em relação ao cubo no Unity serão distribuídos corretamente na área de trabalho real.

Como resolver o erro de dimensionamento

Embora um Marcador de Espaço único remova a indeterminação da relação entre a coordenada virtual e o mundo real, ele não resolve o erro de dimensionamento.

Ou seja, a origem possa ter sido movida para uma posição e orientação alinhadas ao mundo físico, a movimentação de 10 metros no mundo real pode corresponder a uma movimentação de 9 metros do usuário no espaço virtual.

Para isso, vários Marcadores de Espaço fornecem a solução completa. Quando o usuário estiver próximo de um Marcador de Espaço específico, o mundo será alinhado de acordo com esse Marcador de Espaço. Os outros Marcadores de Espaço serão desalinhados, ficando mais remotos, o que geralmente é aceitável, e geralmente imperceptíveis.

À medida que o usuário se move entre os Marcadores de Espaço, uma interpolação suave minimiza o erro de dimensionamento em um determinado ponto no espaço. Com uma densidade adequada de Marcadores de Espaço como pontos de referência, o desalinhamento dos recursos do mundo real e virtuais é reduzido de acordo com o erro do rastreador de cabeça.

Embora a densidade necessária dos Marcadores de Espaço dependa da qualidade de rastreamento que o ambiente suporta e dos requisitos de precisão do aplicativo, alguns números podem ajudá-lo a definir as expectativas. Em um ambiente corporativo, com iluminação adequada e recursos visíveis para rastreamento, um espaçamento de 10 metros entre os Marcadores de Espaço reduz o erro de acúmulo de 10-20 cm em 10 metros, para erros de milímetros (erro máximo l.t. 0,5 cm, 0,0 cm em pontos de extremidade).

Persistência

O recurso de Marcador de Espaço funciona em conjunto com a persistência remanescente do World Locking Tools. Há duas chamadas manuais para invocar o salvamento e o carregamento do script, e sinalizadores para salvamento e carregamento automatizados por sessão.

Quando o recurso de Salvamento Automático/AutoLoad estiver habilitado no World Locking Tools Manager, ele permitirá que o alinhamento espacial completo do mundo virtual para o mundo real seja restaurado nas sessões subsequentes.

Na prática, a persistência significa que uma única ou poucas sessões preliminares podem ser usadas para examinar adequadamente o ambiente físico e o alinhamento desse ambiente físico com o espaço de coordenadas de modelagem do Unity. Em seguida, as sessões subsequentes carregarão o ambiente virtual corretamente alinhado ao mundo real sem a necessidade de ação adicional do usuário.

Interpolação e extrapolação

Interpolação e extrapolação são técnicas para estimar valores de dados quando a medição direta não for feita. Os marcadores de espaço, conforme discutido até agora, são locais onde as medições foram feitas. As coordenadas virtuais são as coordenadas desejadas e as coordenadas físicas são coordenadas medidas nas quais queremos que as coordenadas virtuais apareçam.

O sistema executa a interpolação, mas não a extrapolação, conforme discutido abaixo. Em geral, a interpolação é mais segura e mais estável do que a extrapolação. A interpolação linear em trechos atenderá às necessidades da maioria dos aplicativos. A extrapolação é menos segura, e sua implementação ideal geralmente requer conhecimento no nível do aplicativo. Portanto, o aplicativo deve lidar com a extrapolação, conforme descrito abaixo.

Sem que o aplicativo adicione marcadores de extrapolação fora dos limites dos marcadores, o espaço é marcado exclusivamente pelo valor no marco de delimitação mais próximo. Se houver apenas dois marcadores, A e B, assim que o usuário passar de A para B, a anexação combina o alinhamento especificado por A e por B (interpolação). Porém, quando o usuário passa por B, a anexação bloqueia exatamente a especificada por B (extensão constante).

Interpolação

Na região 2D entre os marcadores, a localização espacial é interpolada linearmente. Se os marcadores de espaço forem posicionados de forma precisa e o erro de rastreamento for distribuído uniformemente pela região, a correção aplicada entre os marcadores de espaço será exata.

Vale ressaltar que a suposição de distribuição igual do erro é incorreta. No entanto, como uma aproximação, o modelo linear fornece ótimos resultados de correção.

Extrapolação

O sistema não fornece serviços de extrapolação internos e utiliza a extensão de valor constante fora da forma convexa dos marcadores de espaço. Essa aproximação é equivalente à presunção incorreta de que não há erro de dimensionamento fora dos marcadores de espaço fornecidos pelo aplicativo.

No entanto, se o aplicativo tiver conhecimento sobre a distribuição de erros ou estiver satisfeito com uma estimativa, ele poderá criar qualquer extrapolação desejada adicionando marcadores de espaço adicionais na periferia.

Exemplo de extrapolação

Imagine uma cena com quatro marcadores de espaço posicionados em um quadrado com bordas de 4 metros de comprimento.

Agora, digamos que o espaço real no qual o usuário se movimentará seja de 12 metros x 12 metros, com os marcadores físicos correspondentes aos quatro marcadores em torno do centro do espaço.

Se o aplicativo estiver satisfeito com uma aproximação de erro constante, ele terá todas as informações necessárias para adicionar quatro ou mais marcadores de espaço para fornecer cobertura em todo o espaço de 12x12m.

Os marcadores nos cantos do quadrado 4x4 serão rotulados de acordo com seus pontos cardeais: NE, NO, SO e SE. Também rotularemos as posições virtuais em cada ponto NEvirtual etc., e as posições físicas em cada ponto NEfísico etc.

Quatro pinos de espaço

Uma estratégia seria adicionar os pontos cardeais externos criando um quadrado de 12 metros x 12 metros ao redor do quadrado interno, adicionando mais quatro pontos cardeais, NEexterno, NOexterno, SOexterno e SEexterno. É simples calcular as posições físicas e virtuais de cada um. Usando NEexterno como exemplo:

virtualOuterNE = virtualNE + (virtualNE - virtualSW);
physicalOuterNE = physicalNE + (physicalNE - virtualSW);

Oito pinos de espaço

A criação de um espaço de extrapolação de 20x20 metros altera apenas a escala do Delta aplicado:

scale = (outerSize - innerSize) / innerSize / 2;
virtualOuterNE = virtualNE + (virtualNE - virtualSW) * scale;
physicalOuterNE = physicalNE + (physicalNE - virtualSW) * scale;

Com um TamanhoExterno de 20 m e um TamanhoInterno de 4 m, a escala seria 2.

Uma estratégia alternativa pode ser incluir oito pontos adicionais aos cantos, conforme mostrado abaixo. O cálculo dos novos locais de fixação em relação aos existentes é feito exatamente como mostrado acima. Tenha cuidado pois, embora a inclusão de marcadores adicionais geralmente melhore a estabilidade, isso não melhora a precisão necessariamente.

Doze pinos de espaço

Como alinhar um subconjunto da cena

A discussão até o momento refere-se ao AlignmentManager global, de propriedade e gerenciado pelo WorldLockingManager.GetInstance(). Conforme descrito anteriormente, isso marca o espaço global de coordenadas do Unity para recursos físicos em pontos de referência estratégicos.

No entanto, em certo momentos, o mesmo conceito deve ser aplicado a um subconjunto da cena.

Por exemplo, imagine um cenário no qual as anotações de dois automóveis devem ser carregadas. O posicionamento exato dos dois automóveis físicos não pode ser conhecido antecipadamente, uma vez que pode variar de acordo com o layout de diferentes revendedores. No entanto, assim que um dos veículos físicos foi implantado, as posições de todas as partes do componente em relação a essa implantação são conhecidas.

Nesse cenário, os Marcadores de Espaço podem ser usados para marcar o chassi virtual e as anotações para cada veículo de forma independente. A representação virtual de cada veículo pode ser configurada no Unity e mapeada para o veículo físico no runtime. Esse alinhamento pode ser manual usando a UX do MRTK ou automatizado usando códigos QR ou outra estratégia. Independentemente de como os dados da correspondência entre os pontos de referência virtuais e físicos são determinados, após serem alimentados no WLT através da API dos Marcadores de Espaço, o WLT manterá os objetos físicos e virtuais alinhados de maneira otimizada.

No caso do alinhamento do espaço de coordenada global, ele é feito manipulando o nó Ajuste (geralmente o pai do pai da câmera). Esse nó deve ser considerado reservado para uso do WLT. Qualquer outra adulteração dessa transformação resultará em um comportamento indefinido.

Da mesma forma, ao alinhar uma subárvore, o alinhamento precisa ter uma transformação na (sub)raiz da subárvore a ser alinhada. Qualquer adulteração externa dessa transformação resultará em um comportamento indefinido.

Antes que os espaços independentes sejam marcados, eles serão arrastados enquanto o espaço global é marcado. No entanto, depois que um espaço independente é marcado, ele é considerado fixo para o mundo físico e, portanto, as modificações subsequentes na anexação do espaço global ao mundo físico não o afetarão.

Confira também

Consulte também