Partilhar via


Pinos espaciais

Os problemas a resolver

O erro de escala

Embora a abordagem de âncora espacial tradicional para alinhar Hologramas com recursos do mundo real funcione muito bem em uma pequena escala, ela luta à medida que a escala cresce para abranger mais de um metro ou mais.

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

Dito de outra forma, se um usuário usando um HoloLens andar 10 metros no mundo real, a distância percorrida no espaço virtual, conforme relatado pelo rastreador de cabeça, será entre 9 metros e 11 metros. Se o usuário andar 50 metros, o erro cresce para +-5 metros. Quanto mais o usuário caminha, maior o erro cresce.

Assim, um feixe de 10 metros (no espaço de modelagem) com um ponto final perfeitamente alinhado com a extremidade zero de uma fita métrica no espaço real terá a outra extremidade registrada para a fita métrica em algum lugar entre 9 e 11 metros.

Pelas mesmas razões, múltiplos objetos, cada mundo bloqueado usando âncoras espaciais, estarão a distâncias diferentes no espaço virtual do que no espaço real.

O sistema de coordenadas arbitrárias

Há uma outra preocupação. O sistema de coordenadas Unity no HoloLens é indeterminado. Baseia-se apenas na posição da cabeça no início da aplicação.

Esta arbitrariedade não é um problema para muitas tarefas. Se o objetivo é lançar um raio no mapeamento espacial da sala e colocar um holograma na posição de acerto, então os valores numéricos da posição de acerto são irrelevantes.

Da mesma forma, ao aparecer elementos UX ao redor do usuário, as coordenadas absolutas para colocar um elemento UX não importam, apenas as coordenadas relativas ao usuário.

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

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

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

A solução

O recurso Space Pinning aborda esses dois problemas ao mesmo tempo. Fá-lo aproveitando tanto a natureza bloqueada pelo mundo do espaço global World Locking Tools como a arbitrariedade desse espaço.

Alinhando o espaço Unity com o mundo real

World Locking Tools em seu núcleo fornece um sistema de coordenadas bloqueado mundo estável. Um objeto virtual colocado no World Locked Space registrado com um recurso do mundo real permanecerá registrado com esse recurso do mundo real ao longo do tempo.

Mas há um número infinito de espaços que satisfazem esse objetivo. Na verdade, dado um espaço bloqueado pelo mundo, transformá-lo por qualquer posição e rotação arbitrárias produz outro espaço bloqueado pelo mundo igualmente válido.

O recurso Space Pin aplica outra restrição que remove a natureza indeterminada da transformação de bloqueio do mundo.

Essa restrição é que, quando "perto" de um Pino Espacial, a pose desse Pino Espacial no espaço bloqueado pelo mundo será a mesma que a pose do Pino Espacial no espaço de modelagem.

Considere um cubo em uma cena Unity modelada em coordenadas globais de (0, 0, 1). Quando a cena é carregada no HoloLens, o cubo aparecerá 1 metro à frente da pose inicial da cabeça. Dependendo da pose inicial da cabeça, isso pode ser em qualquer lugar da sala física.

O Space Pin permite que esse cubo seja bloqueado para um recurso do mundo real na sala, por exemplo, o canto de uma mesa específica. Ao contrário de bloquear o cubo com uma âncora espacial, o Pino de Espaço move a totalidade do espaço Unity de tal forma que o cubo está alinhado com o canto da mesa. Assim, por exemplo, outros itens da área de trabalho modelados em relação ao cubo no Unity serão dispersos adequadamente pela área de trabalho real.

Corrigir o erro de escala

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

Ou seja, embora possa ter movido a origem para um mundo físico alinhado posição e orientação, andar 10 metros no mundo real ainda pode mover apenas o usuário 9 metros no espaço virtual.

Para isso, vários Pinos de Espaço fornecem a solução completa. Quando o usuário estiver perto de um Pino Espacial específico, o mundo será alinhado de acordo com esse Pino Espacial. Os outros Space Pins estarão desalinhados, mas sendo mais distantes, isso geralmente se mostra aceitável, e muitas vezes impercetível.

À medida que o usuário se move entre Pinos de espaço, uma interpolação suave minimiza o erro de escala em qualquer ponto no espaço. Com uma densidade adequada de Pinos de Espaço como pontos de referência, o desalinhamento de recursos do mundo real e virtual é reduzido à ordem de erro do rastreador de cabeça.

Embora a densidade necessária de Pinos de Espaço dependa da qualidade de rastreamento que o ambiente suporta e dos requisitos de precisão do aplicativo, alguns números aqui podem ajudar a definir expectativas. Em um ambiente de escritório, com iluminação adequada e recursos visíveis para rastrear, um espaçamento de 10 metros entre os Pinos de Espaço reduz o erro de um acúmulo de 10-20 cm ao longo de 10 metros, até erros milimétricos (erro máximo l.t. 0,5 cm, erro de 0,0 cm nos pontos finais).

Persistência

O recurso Space Pin funciona em conjunto com o resto da persistência do World Locking Tools. Há chamadas manuais para invocar o salvamento e o carregamento do script e sinalizadores para salvar e carregar automaticamente por sessão.

Quando ativado, o recurso AutoSave/AutoLoad no World Locking Tools Manager permitirá que o alinhamento espacial completo do mundo virtual com o mundo real seja restaurado nas sessões subsequentes.

Na prática, persistência significa que um único ou pequeno número de sessões preliminares pode ser usado para estabelecer uma varredura adequada do ambiente físico e o alinhamento desse ambiente físico com o espaço de coordenadas de modelagem de Unity. As sessões subsequentes carregarão o ambiente virtual corretamente alinhado com o mundo real, sem a necessidade de mais ações do usuário.

Interpolação e extrapolação

A interpolação e a extrapolação são ambas técnicas para estimar valores de dados onde não foi feita uma medição direta. Os pinos espaciais, como 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 essas coordenadas virtuais apareçam.

O sistema realiza interpolação, mas não extrapolação, como discutido abaixo. Em geral, a interpolação é mais segura e estável do que a extrapolação. A interpolação linear por partes fornecida irá satisfazer as necessidades da maioria das aplicações. A extrapolação é menos segura, e sua implementação ideal geralmente requer conhecimento no nível da aplicação. Por conseguinte, resta ao pedido tratar a extrapolação conforme descrito abaixo.

Sem que a aplicação adicione pinos de extrapolação, fora dos limites dos pinos o espaço é fixado exclusivamente pelo valor no limite mais próximo. Se houver apenas dois pinos, A e B, então, à medida que o usuário se move de A para B, a fixação se mistura entre o alinhamento especificado por A e o especificado por B (interpolação). Mas quando o usuário passa B, então a fixação bloqueia exatamente o especificado por B (extensão constante).

Interpolação

Na região 2D entre pinos, a localização espacial é linearmente interpolada. Se os pinos de espaço forem colocados com precisão e o erro de rastreamento estiver distribuído uniformemente pela região, a correção aplicada entre os pinos de espaço será exatamente correta.

Deve-se enfatizar aqui que a suposição de distribuição igual de erros não é exatamente correta. No entanto, como aproximação, o modelo linear fornece excelentes resultados de correção.

Extrapolação

O sistema não fornece nenhum serviço de extrapolação integrado, usando extensão de valor constante fora do casco convexo de pinos espaciais. Essa aproximação equivale a assumir, incorretamente, é claro, que não há nenhum erro de escala fora dos pinos 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 pode criar qualquer extrapolação desejada adicionando mais pinos de espaço na periferia.

Exemplo de extrapolação

Considere uma cena com quatro pinos de espaço, colocados em um quadrado com bordas de 4 metros de comprimento.

Agora, digamos que o espaço real em que o usuário estará se movendo é de 12 metros x 12 metros, com os marcadores físicos correspondentes aos quatro pinos que cercam o centro do espaço.

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

Vamos rotular os pinos nos cantos do quadrado 4x4 por suas direções cardeais, NE, NW, SW e SE. Também rotularemos as posições virtuais em cada ponto virtualNE etc., e as posições físicas em cada ponto physicalNE etc.

Quatro pinos de espaço

Uma estratégia seria adicionar pontos cardeais externos criando um quadrado de 12 metros x 12 metros ao redor do quadrado interno, adicionando mais quatro pontos cardeais, outerNE, outerNW, outerSW e outerSE. As posições virtuais e físicas de cada um deles é simples de calcular. Tomando outerNE por 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 apenas altera a escala do delta aplicado:

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

Com um tamanho externo de 20 m, e um tamanho interno de 4 m, a escala seria 2.

Uma estratégia alternativa pode ser adicionar mais oito pontos além das curvas, como mostrado abaixo. Calcular os novos locais de pinos a partir dos existentes é exatamente como acima. Esteja ciente de que, embora seja verdade que a adição de mais pinos geralmente melhora a estabilidade, isso não necessariamente melhora a precisão.

Doze pinos de espaço

Alinhando um subconjunto da cena

A discussão até agora pertence ao AlignmentManager global, de propriedade e gerenciado pelo WorldLockingManager.GetInstance(). Como descrito anteriormente, isso fixa todo o espaço de coordenadas da Unidade global a recursos físicos em pontos de referência estratégicos.

No entanto, há momentos em que se aplica o mesmo conceito a um subconjunto da cena.

Por exemplo, considere um cenário em que as anotações de dois automóveis devem ser carregadas. A localização exata dos dois automóveis físicos não pode ser conhecida com antecedência, pois pode variar de acordo com o layout de diferentes concessionárias. No entanto, uma vez que um dos veículos físicos tenha sido implantado, as posições de todas as partes componentes em relação a essa postura de implantação são conhecidas.

Nesse cenário, então, os Pins de Espaço podem ser usados para fixar o chassi virtual e as anotações de cada um dos veículos de forma independente. Toda a representação virtual de cada um dos veículos pode ser configurada em Unity e, em seguida, mapeada no veículo físico em tempo de execução. Este alinhamento pode ser manual usando MRTK UX ou automatizado usando códigos QR ou qualquer outra estratégia. Independentemente de como os dados da correspondência entre pontos de referência virtuais e físicos são determinados, uma vez alimentados para o WLT através da API Space Pins, o WLT manterá os objetos virtuais e físicos alinhados de uma maneira percetivamente otimizada.

No caso de alinhar o espaço de coordenadas globais, o alinhamento acontece manipulando o nó de 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 comportamento indefinido.

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

Antes que os espaços independentes sejam fixados, eles serão arrastados à medida que o espaço global for fixado. No entanto, uma vez que um espaço independente é fixado, ele é considerado fixado ao mundo físico, e, portanto, modificações subsequentes na fixação do espaço global ao mundo físico não o afetarão.

Consulte também

Veja também