Pinos de Espaço

Os problemas a resolver

O erro de dimensionamento

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

Erro de dimensionamento no espaço de controlo da cabeça significa que, mesmo que uma âncora espacial mantenha uma extremidade de um objeto virtual, dimensionada com apenas alguns metros de comprimento, perfeitamente alinhada com uma funcionalidade do mundo real, é provável que a outra extremidade esteja desalinhada com uma funcionalidade do mundo real correspondente. Este desalinhamento deve-se ao facto de a distância percorrida pelo espaço controlado pela cabeça ser diferente da distância percorrida pelo 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 utilizador que usa um HoloLens anda 10 metros no mundo real, a distância percorrida no espaço virtual, como relatado pelo controlador principal, será entre 9 metros e 11 metros. Se o utilizador andar 50 metros, o erro aumenta para +-5 metros. Quanto mais longe o utilizador andar, maior o erro aumenta.

Assim, um feixe de 10 metros (em espaço de modelação) com um ponto final perfeitamente alinhado com a extremidade zero de uma banda medida em espaço real terá a outra extremidade registada na medida da banda algures entre 9 e 11 metros.

Pelos mesmos motivos, vários objetos, cada mundo bloqueado com âncoras espaciais, estarão a distâncias diferentes no espaço virtual do que no espaço real.

O sistema de coordenadas arbitrário

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

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

Da mesma forma, ao aparecer elementos UX à volta do utilizador, as coordenadas absolutas para colocar um elemento UX não importam, apenas as coordenadas relativas ao utilizador.

No entanto, cenários mais envolvidos podem ser complicados pelo sistema de coordenadas imprevisível. Carregar uma grande coleção de objetos, por exemplo, o ambiente de trabalho de um utilizador ou uma sala de escritórios inteira, para um espaço virtual com uma relação fixa com o espaço físico, requer alguma transformação compensatória para alinhar os objetos de espaço de modelação com a moldura de coordenada baseada na cabeça.

Essa compensação é muitas vezes feita anexando todos os objetos a uma única transformação do Unity, ajustando essa única transformação à posição e orientando os objetos virtuais em alinhamento com o mundo real.

De forma equivalente, uma única transformação na hierarquia da câmara pode ser utilizada para realinhar a câmara para que, quando o utilizador estiver a ver um ponto de referência do mundo real, um objeto virtual com as coordenadas de modelação pretendidas apareça sobreposto nessa funcionalidade.

A solução

A funcionalidade Afixação de Espaço resolve ambos estes problemas de uma só vez. Fá-lo tirando partido da natureza mundialmente bloqueada do espaço global das World Locking Tools e da arbitrariedade desse espaço.

Alinhar o espaço do Unity com o mundo real

O World Locking Tools, na sua essência, fornece um sistema de coordenadas bloqueado pelo mundo estável. Um objeto virtual colocado no Espaço Bloqueado Mundial registado com uma funcionalidade do mundo real permanecerá registado com essa funcionalidade 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 protegido pelo mundo, transformá-lo por qualquer posição arbitrária e rotação produz outro espaço igualmente válido bloqueado pelo mundo.

A funcionalidade Afixar Espaço aplica outra restrição que remove a natureza indeterminada da transformação que bloqueia o mundo.

Essa restrição é que, quando "perto" de um Pino de Espaço, a pose desse Pino de Espaço no espaço protegido pelo mundo será a mesma que a pose do Pin de Espaço no espaço de modelação.

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

O Pin de Espaço permite que esse cubo seja bloqueado para uma funcionalidade do mundo real na sala, por exemplo, o canto de uma secretária específica. Ao contrário de bloquear o cubo com uma âncora espacial, o Pino de Espaço move todo o espaço do Unity de modo a que o cubo esteja alinhado com o canto da secretária. Assim, por exemplo, outros itens de ambiente de trabalho modelados em relação ao cubo no Unity serão dispersos corretamente pelo ambiente de trabalho real.

Resolver o erro de dimensionamento

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

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 utilizador 9 metros no espaço virtual.

Para tal, vários Pins de Espaço fornecem a solução completa. Quando o utilizador estiver próximo de qualquer Pin de Espaço específico, o mundo será alinhado de acordo com esse Pin de Espaço. Os outros Pinos espaciais serão desalinhados, mas estando mais distantes, isso geralmente se revela aceitável, e muitas vezes imperceptível.

À medida que o utilizador se move entre Os Pinos de Espaço, uma interpolação suave minimiza o erro de dimensionamento em qualquer ponto no espaço. Com uma densidade adequada de Pinos de Espaço como pontos de referência, o desalinhamento do mundo real e das funcionalidades virtuais é reduzido à ordem do erro do controlador principal.

Embora a densidade necessária dos Pins de Espaço dependa da qualidade de controlo que o ambiente suporta e dos requisitos de precisão da aplicação, alguns números aqui podem ajudar a definir expectativas. Num ambiente de escritório, com iluminação adequada e características visíveis para controlar, um espaçamento de 10 metros entre Pinos de Espaço reduz o erro de uma acumulação de 10-20 cm acima de 10 metros, até erros de milímetros (erro máximo l.t. erro de 0,5 cm, erro de 0,0 cm nos pontos finais).

Persistência

A funcionalidade Afixar Espaço funciona em conjunto com o resto das Ferramentas de Bloqueio Do Mundo. Existem chamadas manuais para invocar guardar e carregar a partir do script e sinalizadores para guardar e carregar automaticamente por sessão.

Quando ativada, a funcionalidade Guardar Automaticamente/Carregar Automaticamente no World Locking Tools Manager 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 um único ou pequeno número de sessões preliminares podem ser utilizadas para estabelecer uma análise adequada do ambiente físico e o alinhamento desse ambiente físico com o espaço de coordenadas de modelação do Unity. As sessões subsequentes carregarão o ambiente virtual corretamente alinhado com o mundo real sem que seja necessária mais ação do utilizador.

Interpolação e extrapolação

A interpolação e a extrapolação são ambas técnicas para estimar valores de dados em que não foi feita qualquer medição direta. Os pinos de espaço, conforme discutido até agora, são localizações onde foram feitas medidas. As coordenadas virtuais são as coordenadas pretendidas e as coordenadas físicas são coordenadas medidas às quais queremos que essas coordenadas virtuais apareçam.

O sistema realiza a interpolação, mas não a extrapolação, conforme abordado abaixo. Em geral, a interpolação é mais segura e estável do que a extrapolação. A interpolação linear em forma de peça fornecida irá satisfazer a maioria das necessidades das aplicações. A extrapolação é menos segura e a sua implementação ideal geralmente requer conhecimento ao nível da aplicação. Por conseguinte, cabe à aplicação processar a extrapolação, conforme descrito abaixo.

Sem a aplicação adicionar pinos de extrapolação, fora dos limites dos pinos, o espaço é afixado exclusivamente pelo valor no limite mais próximo. Se existirem apenas dois pinos, A e B, à medida que o utilizador se move de A para B, a afixação combina entre o alinhamento especificado por A e o especificado por B (interpolação). Mas quando o utilizador passa B, a afixação bloqueia exatamente a especificada 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 controlo for distribuído uniformemente pela região, a correção aplicada entre os pinos de espaço estará exatamente correta.

É de salientar aqui que a suposição de distribuição de erros iguais não está exactamente 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 incorporado, utilizando uma extensão de valor constante fora do casco convexo de pinos espaciais. Esta aproximação é equivalente a assumir, incorretamente, que não existe nenhum erro de dimensionamento fora dos pinos de espaço fornecidos pela aplicação.

No entanto, se a aplicação tiver conhecimento da distribuição de erros ou estiver satisfeita com uma estimativa, pode criar qualquer extrapolação pretendida ao adicionar mais pinos de espaço na periferia.

Exemplo de extrapolação

Considere uma cena com quatro pinos de espaço, colocados num quadrado com margens de 4 metros de comprimento.

Agora, digamos que o espaço real em que o utilizador se vai mover é de 12 metros x 12 metros, com os marcadores físicos correspondentes aos quatro pinos que rodeiam o centro do espaço.

Se a aplicação estiver satisfeita com uma aproximação constante de erros, terá todas as informações necessárias para adicionar quatro ou mais pinos de espaço para fornecer cobertura sobre todo o espaço de 12x12m.

Vamos etiquetar os pinos nos cantos do quadrado 4x4 pelas suas direções cardinal, NE, NW, SW e SE. Também vamos etiquetar as posições virtuais em cada ponto virtualNE, etc., e as posições físicas em cada ponto físicoNE, etc.

Quatro pinos de espaço

Uma estratégia seria adicionar pontos cardinal externos criando um quadrado de 12 metros x 12 metros ao redor do quadrado interno, adicionando mais quatro pontos cardinal, outerNE, outerNW, outerSW e outerSE. As posições virtuais e físicas de cada uma destas posições são simples de calcular. Tomando outerNE, por exemplo:

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

Oito pinos de espaço

Criar um espaço de extrapolação de 20x20 metros só altera a escala do delta aplicado:

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

Com um tamanho exterior 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 dos cantos, conforme mostrado abaixo. A computação das novas localizações de pinos a partir das existentes é exatamente igual à anterior. Tenha em atenção que, embora seja verdade que adicionar mais pinos geralmente melhora a estabilidade, não melhora necessariamente a precisão.

Doze pinos de espaço

Alinhar um subconjunto da cena

O debate até agora diz respeito ao AlignmentManager global, propriedade e gerido pelo WorldLockingManager.GetInstance(). Conforme descrito anteriormente, isto afixa todo o espaço de coordenadas global do Unity a funcionalidades físicas em pontos de referência estratégicos.

No entanto, há alturas 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 colocação exata dos dois automóveis físicos não pode ser conhecida antecipadamente, uma vez que pode variar de acordo com o esquema de diferentes concessionárias. No entanto, uma vez implementado um dos veículos físicos, são conhecidas as posições de todas as partes dos componentes relativamente a essa posição de implementação.

Neste cenário, os Pinos de Espaço podem ser utilizados para afixar o chassis e anotações virtuais para cada um dos veículos de forma independente. Toda a representação virtual de cada um dos veículos pode ser configurada no Unity e, em seguida, mapeada para o veículo físico no runtime. Este alinhamento pode ser manual com o MRTK UX ou automatizado com códigos QR ou qualquer outra estratégia. Independentemente da forma como os dados da correspondência entre pontos de referência virtuais e físicos são determinados, uma vez fornecidos ao WLT através da API de Pins de Espaço, o WLT manterá os objetos virtuais e físicos alinhados de forma perceptualmente otimizada.

No caso de alinhar o espaço de coordenadas global, o alinhamento ocorre ao manipular o nó Ajuste (geralmente o principal do elemento principal da câmara). Esse nó deve ser considerado reservado para utilização do WLT. Qualquer outra adulteração dessa transformação resultará num comportamento indefinido.

Da mesma forma, ao alinhar uma subárvore, o alinhamento tem de ser proprietário de uma transformação, na (sub)raiz da subárvore a alinhar. Qualquer adulteração externa dessa transformação resultará num comportamento indefinido.

Antes de os espaços independentes serem afixados, serão arrastados à medida que o espaço global é afixado. No entanto, quando um espaço independente é afixado, é considerado afixado ao mundo físico, pelo que as modificações subsequentes à afixação do espaço global no mundo físico não o afetarão.

Ver também

Consulte também