Segnaposto spaziatrice
I problemi da risolvere
Errore di scalabilità
Anche se l'approccio tradizionale di ancoraggio nello spazio per allineare Ologrammi con le funzionalità del mondo reale funziona molto bene su scala ridotta, si lotta quando la scala cresce per comprendere più di un metro o così via.
L'errore di scala nello spazio di tracciamento della testa significa che, anche se un ancoraggio spaziale mantiene una fine di un oggetto virtuale, ridimensionato solo pochi metri di lunghezza, perfettamente allineato a una funzionalità del mondo reale, l'altra estremità è probabilmente non allineata con una funzionalità del mondo reale corrispondente. Questo disallineamento è dovuto al fatto che la distanza attraversata dallo spazio a testa tende a differire dalla distanza attraversata dallo spazio fisico con un limite di errore pari a +-10%. L'errore effettivo è spesso minore (dipende da molte caratteristiche dell'ambiente e del dispositivo), ma in genere sarà significativo e crescerà senza limiti man mano che la scala del progetto cresce.
Mettere in un altro modo, se un utente indossa un HoloLens cammina 10 metri nel mondo reale, la distanza percorsa nello spazio virtuale, come segnalato dal tracker head, sarà compresa tra 9 metri e 11 metri. Se l'utente cammina 50 metri, l'errore cresce a +-5 metri. Più lontano l'utente cammina, maggiore è l'aumento dell'errore.
Pertanto, un raggio di 10 metri (nello spazio di modellazione) con un punto finale perfettamente allineato alla fine zero di una misura nastro nello spazio reale avrà l'altra estremità registrata alla misura nastro in un punto compreso tra 9 e 11 metri.
Per gli stessi motivi, più oggetti, ogni mondo bloccato usando ancoraggi nello spazio spaziale, sarà diverse distanze nello spazio virtuale rispetto allo spazio reale.
Sistema di coordinate arbitrario
C'è un'altra preoccupazione. Il sistema di coordinate Unity in HoloLens è indeterminato. Si basa esclusivamente sulla posizione della testa all'inizio dell'applicazione.
Questa arbitrarità non è un problema per molte attività. Se l'obiettivo è eseguire il cast di un raggio nel mapping spaziale della stanza e posizionare un ologramma nella posizione di hit, i valori numerici della posizione di hit sono irrilevanti.
Analogamente, quando si estraono elementi dell'esperienza utente intorno all'utente, le coordinate assolute per posizionare un elemento dell'esperienza utente non sono importanti, ma solo le coordinate relative all'utente.
Tuttavia, gli scenari più coinvolti possono essere complicati dal sistema di coordinate imprevedibile. Il caricamento di una grande raccolta di oggetti, ad esempio il desktop di un utente o un'intera sala ufficio, nello spazio virtuale con una relazione fissa con lo spazio fisico, richiede una trasformazione di compensazione per allineare gli oggetti dello spazio di modellazione con il frame di coordinate basato sulla testa.
Tale compensazione viene spesso eseguita associando tutti gli oggetti a una singola trasformazione Unity e modificando tale singola trasformazione in modo da posizionare e orientare gli oggetti virtuali in allineamento con il mondo reale.
Analogamente, una singola trasformazione nella gerarchia della fotocamera può essere usata per riallineare la fotocamera in modo che quando l'utente vede un punto di riferimento reale, un oggetto virtuale con le coordinate di modellazione desiderate apparirà sovrapposto a tale funzionalità.
La soluzione
La funzionalità di aggiunta dello spazio risolve entrambi questi problemi contemporaneamente. Lo fa sfruttando sia la natura bloccata dal mondo dello spazio globale degli strumenti di blocco mondiale, sia l'arbitrarità di tale spazio.
Allineamento dello spazio Unity con il mondo reale
World Locking Tools al suo centro fornisce un sistema di coordinate stabile bloccato al mondo. Un oggetto virtuale inserito in World Locked Space registrato con una funzionalità reale rimarrà registrato con tale funzionalità del mondo reale nel tempo.
Ma ci sono un numero infinito di spazi che soddisfano tale obiettivo. Infatti, dato uno spazio bloccato al mondo, trasformandolo in base a qualsiasi posizione arbitraria e rotazione produce un altro spazio ugualmente valido bloccato a livello mondiale.
La funzionalità Pin spaziatrice applica un altro vincolo che rimuove la natura indeterminato della trasformazione di blocco globale.
Questo vincolo è che quando "vicino" un segnaposto spaziatrice, la posizione di tale pin spaziale nello spazio bloccato dal mondo sarà la stessa della posizione del pin spaziale nello spazio di modellazione.
Si consideri un cubo in una scena unity modellata a coordinate globali di (0, 0, 1). Quando la scena viene caricata in HoloLens, il cubo apparirà 1 metro davanti alla posizione iniziale della testa. A seconda della posizione iniziale della testa, che potrebbe trovarsi ovunque nella stanza fisica.
Il pin spazio consente di bloccare il cubo in una funzionalità reale nella stanza, ad esempio l'angolo di una scrivania specifica. A differenza del blocco del cubo con un ancoraggio spaziale, il segnaposto spaziatrice sposta l'intero spazio unity in modo che il cubo sia allineato all'angolo della scrivania. Ad esempio, altri elementi desktop modellati in relazione al cubo in Unity verranno distribuiti correttamente nel desktop reale.
Risoluzione dell'errore di scalabilità
Mentre un singolo pin spazio rimuove l'indeterminazione della relazione tra la coordinata virtuale e il mondo reale, non risolve l'errore di scala.
Ovvero, mentre potrebbe aver spostato l'origine in una posizione fisica allineata e orientamento, camminare 10 metri nel mondo reale potrebbe ancora spostare l'utente solo 9 metri nello spazio virtuale.
Per questo motivo, più pin di spazio forniscono la soluzione completa. Quando l'utente è vicino a un pin di spazio specifico, il mondo verrà allineato in base a tale pinna spaziatrice. Gli altri pin spaziali saranno disallineati, ma essendo più distanti, che in genere si rivelano accettabili e spesso impercettibili.
Quando l'utente si sposta tra puntini di spazio, un'interpolazione uniforme riduce al minimo l'errore di scala in qualsiasi punto nello spazio. Con una densità adeguata di punti di riferimento, il disallineamento delle caratteristiche virtuali e del mondo reale viene ridotto all'ordine di errore del tracker head.
Anche se la densità necessaria dei pin di spazio dipende sia dalla qualità di rilevamento dei supporto ambientale che dai requisiti di precisione dell'applicazione, alcuni numeri potrebbero aiutare a impostare le aspettative. In un ambiente ufficio, con un'illuminazione adeguata e caratteristiche visibili da tenere traccia, una spaziatura di 10 metri tra pin spaziali riduce l'errore da un accumulo di 10-20 cm oltre 10 metri, fino a errori millimetri (errore massimo l.t. 0,5 cm, errore 0,0 cm agli endpoint).
Persistenza
La funzionalità Space Pin funziona in combinazione con il resto della persistenza di World Locking Tools. Esistono entrambe le chiamate manuali per richiamare il salvataggio e il caricamento dallo script e i flag per il salvataggio e il caricamento automatizzati per sessione.
Se abilitata, la funzionalità AutoSave/AutoLoad in World Locking Tools Manager consentirà il ripristino dell'allineamento spaziale completo del mondo virtuale al mondo reale nelle sessioni successive.
In pratica, la persistenza significa che un singolo o piccolo numero di sessioni preliminari può essere usato per stabilire un'analisi adeguata dell'ambiente fisico e l'allineamento dell'ambiente fisico con lo spazio di coordinate di modellazione di Unity. Le sessioni successive caricheranno quindi l'ambiente virtuale correttamente allineato al mondo reale senza ulteriori azioni dell'utente necessarie.
Interpolazione ed estrapolazione
L'interpolazione e l'estrapolazione sono entrambe tecniche per stimare i valori dei dati in cui non è stata eseguita alcuna misurazione diretta. I pin di spazio, come illustrato finora, sono posizioni in cui sono state effettuate le misurazioni. Le coordinate virtuali sono le coordinate desiderate e le coordinate fisiche sono coordinate misurate in cui devono essere visualizzate tali coordinate virtuali.
Il sistema esegue l'interpolazione, ma non l'estrapolazione, come illustrato di seguito. In generale, l'interpolazione è più sicura e più stabile dell'estrapolazione. L'interpolazione lineare a fasi fornita soddisfa la maggior parte delle esigenze delle applicazioni. L'estrapolazione è meno sicura e la sua implementazione ideale richiede in genere conoscenze a livello di applicazione. L'applicazione deve quindi gestire l'estrapolazione come descritto di seguito.
Senza l'applicazione che aggiunge puntini di estrapolazione, all'esterno dei limiti dei pin lo spazio viene bloccato esclusivamente dal valore al limite più vicino. Se sono presenti solo due puntini, A e B, quando l'utente passa da A a B, l'allineamento specificato da A e quello specificato da B (interpolazione). Ma quando l'utente passa B, il blocco di blocco viene applicato esattamente a quello specificato da B (estensione costante).
Interpolazione
Nell'area 2D tra pin, la localizzazione spaziale viene interpolata in modo lineare. Se i pin di spazio vengono posizionati in modo accurato e l'errore di rilevamento viene distribuito uniformemente nell'area, la correzione applicata tra i puntini di spazio sarà esattamente corretta.
Va sottolineato qui che il presupposto di una distribuzione di errori uguale non è esattamente corretto. Tuttavia, come approssimazione, il modello lineare fornisce risultati di correzione eccellenti.
Estrapolazione
Il sistema non fornisce alcun servizio di estrapolazione predefinito, utilizzando un'estensione di valore costante all'esterno dello scafo convesso dei pin spaziali. Questa approssimazione equivale a presumere, in modo errato, che non vi sia alcun errore di scala all'esterno dei pin di spazio forniti dall'applicazione.
Tuttavia, se l'applicazione ha informazioni sulla distribuzione degli errori o è soddisfatta di una stima, può creare qualsiasi estrapolazione desiderata aggiungendo più puntini di spazio nella periferia.
Esempio di estrapolazione
Si consideri una scena con quattro puntini di spazio, posizionati in un quadrato con bordi lunghi 4 metri.
Si supponga ora che lo spazio effettivo in cui l'utente si muoverà è di 12 metri x 12 metri, con i marcatori fisici corrispondenti ai quattro puntini che circondano il centro dello spazio.
Se l'applicazione è soddisfatta di un'approssimazione costante degli errori, ha tutte le informazioni necessarie per aggiungere quattro o più pin di spazio per fornire copertura sull'intero spazio di 12x12m.
I pin verranno etichettati agli angoli del quadrato 4x4 in base alle relative direzioni cardinali, NE, NW, SW e edizione Standard. Verranno etichettate anche le posizioni virtuali in ogni punto virtualNE e così via, e le posizioni fisiche in ogni punto fisico e così via.
Una strategia consiste nell'aggiungere punti cardinali esterni creando un quadrato di 12 metri x 12 metri che circonda il quadrato interno, aggiungendo altri quattro punti cardinali, outerNE, outerNW, outerSW e outer edizione Standard. Le posizioni virtuali e fisiche di ognuna di queste sono semplici da calcolare. Prendendo outerNE, ad esempio:
virtualOuterNE = virtualNE + (virtualNE - virtualSW);
physicalOuterNE = physicalNE + (physicalNE - virtualSW);
La creazione di uno spazio di estrapolazione di 20x20 metri modifica solo la scala del delta applicato:
scale = (outerSize - innerSize) / innerSize / 2;
virtualOuterNE = virtualNE + (virtualNE - virtualSW) * scale;
physicalOuterNE = physicalNE + (physicalNE - virtualSW) * scale;
Con un outerSize di 20 m e un innerSize di 4 m, la scala sarebbe 2.
Una strategia alternativa potrebbe essere quella di aggiungere altri otto punti oltre agli angoli, come illustrato di seguito. Il calcolo delle nuove posizioni dei pin da quelle esistenti è esattamente come sopra. Attenzione che, anche se è vero che l'aggiunta di più pin in genere migliora la stabilità, non migliora necessariamente l'accuratezza.
Allineamento di un subset della scena
La discussione riguarda finora AlignmentManager globale, di proprietà e gestita da WorldLockingManager.GetInstance(). Come descritto in precedenza, questo aggiunge l'intero spazio di coordinate unity globale alle funzionalità fisiche in punti di riferimento strategici.
Tuttavia, ci sono momenti in cui si applica lo stesso concetto a un subset della scena.
Si consideri, ad esempio, uno scenario in cui le annotazioni per due automobili devono essere caricate. La posizione esatta delle due automobili fisiche non può essere nota in anticipo, in quanto potrebbe variare in base al layout di diverse concessionarie. Tuttavia, una volta che uno dei veicoli fisici è stato distribuito, le posizioni di tutte le parti del componente relative a tale posizione di distribuzione sono note.
In questo scenario è quindi possibile usare i pin di spazio per aggiungere lo chassis virtuale e le annotazioni per ognuno dei veicoli in modo indipendente. L'intera rappresentazione virtuale di ogni veicolo può essere configurata in Unity e quindi mappata al veicolo fisico in fase di esecuzione. Questo allineamento potrebbe essere manuale usando l'esperienza utente MRTK o automatizzato usando codici a matrice o qualsiasi altra strategia. Indipendentemente dal modo in cui vengono determinati i dati della corrispondenza tra punti di riferimento virtuali e fisici, una volta inseriti nel WLT tramite l'API Puntini spazi, WLT manterrà gli oggetti virtuali e fisici allineati in modo percettivo.
Nel caso di allineamento dello spazio delle coordinate globali, l'allineamento avviene modificando il nodo Regolazione (in genere l'elemento padre dell'elemento padre della fotocamera). Tale nodo deve essere considerato riservato per l'uso di WLT. Qualsiasi altra manomissione di tale trasformazione comporterà un comportamento indefinito.
Analogamente, quando si allinea un sottoalbero, l'allineamento deve essere proprietario di una trasformazione, nella radice (sotto)radice del sottoalbero da allineare. Qualsiasi manomissione esterna con tale trasformazione comporterà un comportamento indefinito.
Prima che gli spazi indipendenti vengano aggiunti, verranno trascinati lungo quando lo spazio globale viene bloccato. Tuttavia, una volta aggiunto uno spazio indipendente, viene considerato aggiunto al mondo fisico e quindi le successive modifiche all'aggiunta dello spazio globale al mondo fisico non ne influiranno.