Dela via


Blankstegsstift

De problem som ska lösas

Skalningsfelet

Även om den traditionella spatiala ankarmetoden för att justera Hologram med verkliga funktioner fungerar bra i liten skala, kämpar den när skalan växer för att omfatta mer än en mätare eller så.

Skalningsfel i huvudspårningsutrymme innebär att även om en rumslig fästpunkt håller ena änden av ett virtuellt objekt, som bara är några meter långt, perfekt justerat med en verklig funktion, kommer den andra änden sannolikt att feljusteras med en motsvarande verklig funktion. Den här feljusteringen beror på att avståndet som färdas genom huvudspårat utrymme tenderar att skilja sig från avståndet som färdas genom fysiskt utrymme med ett fel på +-10 %. Det faktiska felet är ofta mindre (det beror på många miljö- och enhetsegenskaper), men är vanligtvis betydande och växer utan gränser när projektets skala växer.

Med andra uttryckt, om en användare som bär en HoloLens går 10 meter i den verkliga världen, kommer avståndet som färdas i virtuellt utrymme, som rapporterats av huvudspåraren, att vara mellan 9 meter och 11 meter. Om användaren går 50 meter växer felet till +-5 meter. Ju längre användaren går, desto större blir felet.

Således kommer en 10-metersstråle (i modelleringsutrymme) med en slutpunkt perfekt justerad till nolländen av ett måttband i verkligt utrymme att ha den andra änden registrerad på måttbandet någonstans mellan 9 och 11 meter.

Av samma skäl kommer flera objekt, varje värld låst med spatiala fästpunkter, att vara olika avstånd isär i virtuellt utrymme än i verkligt utrymme.

Det godtyckliga koordinatsystemet

Det finns ett annat problem. Unity-koordinatsystemet i HoloLens är obestämt. Den baseras enbart på huvudställningen i början av programmet.

Den här godtyckligheten är inte ett problem för många uppgifter. Om målet är att kasta en stråle i rummets rumsliga mappning och placera ett hologram vid träffpositionen, är de numeriska värdena för träffpositionen irrelevanta.

På samma sätt spelar de absoluta koordinaterna för att placera ett UX-element ingen roll när UX-element dyker upp runt användaren, bara koordinaterna i förhållande till användaren.

Mer involverade scenarier kan dock kompliceras av det oförutsägbara koordinatsystemet. Om du läser in en stor samling objekt, till exempel en användares skrivbord eller ett helt kontorsrum, till virtuellt utrymme med en fast relation till fysiskt utrymme, krävs en kompenserande transformering för att justera modelleringsutrymmeobjekten med den huvudbaserade koordinatramen.

Den kompensationen görs ofta genom att koppla alla objekt till en enda Unity-transformering och justera den enskilda transformeringen så att de placerar och orienterar de virtuella objekten i linje med den verkliga världen.

På motsvarande sätt kan en enda transformering i kamerans hierarki användas för att justera kameran så att ett virtuellt objekt med önskade modelleringskoordinater visas överlagrat på den funktionen när användaren ser en verklig referenspunkt.

Lösningen

Funktionen Fäst utrymme åtgärdar båda dessa problem samtidigt. Det gör det genom att utnyttja både den världslåsta karaktären hos världens låsverktygs globala utrymme och godtyckligheten i det utrymmet.

Anpassa Unity-utrymmet till den verkliga världen

World Locking Tools i grunden ger ett stabilt världlåst koordinatsystem. Ett virtuellt objekt som placeras i World Locked Space som registrerats med en verklig funktion förblir registrerat med den verkliga funktionen över tid.

Men det finns ett oändligt antal utrymmen som uppfyller det målet. Faktum är att med tanke på ett världslåst utrymme ger omvandling av det genom godtycklig position och rotation ett annat lika giltigt världlåst utrymme.

Funktionen Fäst utrymme tillämpar en annan begränsning som tar bort den obestämda karaktären hos den världslåsande transformeringen.

Den begränsningen är att när du "nära" en blankstegsstift är den space pin-koden i ett världslåst utrymme samma som rymdstiftets pose i modelleringsutrymmet.

Överväg en kub i en Unity-scen som modelleras med globala koordinater för (0, 0, 1). När scenen läses in i HoloLens visas kuben 1 meter framför den första huvudställningen. Beroende på den första huvudställningen kan det finnas var som helst i det fysiska rummet.

Med pin-koden för utrymme kan kuben låsas till en verklig funktion i rummet, till exempel hörnet på ett visst skrivbord. Till skillnad från att låsa kuben med ett rumsligt fästpunkt flyttar Space Pin hela Unity-utrymmet så att kuben är i linje med skrivbordshörnan. Så till exempel kommer andra skrivbordsobjekt som modelleras i förhållande till kuben i Unity att spridas korrekt över det verkliga skrivbordet.

Åtgärda skalningsfelet

Även om en enda blankstegsstift tar bort indeterminacy för relationen mellan den virtuella koordinaten och den verkliga världen, åtgärdas inte skalningsfel.

Det innebär att även om det kan ha flyttat ursprunget till en fysisk världsjusterad position och orientering, kan promenader 10 meter i den verkliga världen fortfarande bara flytta användaren 9 meter i virtuellt utrymme.

För detta tillhandahåller flera blankstegsstift den fullständiga lösningen. När användaren är nära en specifik blankstegsstift justeras världen enligt den blankstegsstiftet. De andra blankstegsstiften kommer att vara feljusterade, men är mer avlägsna, som i allmänhet visar sig vara acceptabla och ofta omärkbara.

När användaren rör sig mellan blankstegsstift minimerar en smidig interpolering skalningsfelet vid en viss punkt i utrymmet. Med en tillräcklig densitet av Space Pins som referenspunkter reduceras feljusteringen av verkliga och virtuella funktioner till ordningen för head tracker-fel.

Även om den nödvändiga densiteten för space pins beror på både spårningskvaliteten omgivningsstöd och precisionskraven för programmet, kan vissa siffror här hjälpa till att ställa in förväntningar. I en kontorsmiljö, med tillräcklig belysning och synliga funktioner att spåra, minskar ett avstånd på 10 meter mellan Space Pins fel från en ackumulering på 10-20 cm över 10 meter, ner till millimeterfel (maxfel l.t. 0,5 cm, 0,0 cm fel vid slutpunkter).

Bevarande

Funktionen Space Pin fungerar tillsammans med resten av World Locking Tools beständighet. Det finns både manuella anrop för att anropa spara och läsa in från skript och flaggor för automatisk besparing och inläsning per session.

När funktionen AutoSpara/Autolast är aktiverad i World Locking Tools Manager kan den virtuella världens fullständiga rumsliga anpassning till den verkliga världen återställas vid efterföljande sessioner.

I praktiken innebär beständighet att ett enskilt eller litet antal preliminära sessioner kan användas för att upprätta en lämplig genomsökning av den fysiska miljön och anpassning av den fysiska miljön med Unitys koordinatutrymme för modellering. Efterföljande sessioner läser sedan in den virtuella miljön korrekt anpassad till den verkliga världen utan ytterligare användaråtgärder.

Interpolering och extrapolering

Interpolation och extrapolering är båda metoder för att uppskatta datavärden där ingen direkt mätning har gjorts. Blankstegsstiften, som vi har diskuterat hittills, är platser där mätningar har gjorts. De virtuella koordinaterna är önskade koordinater och de fysiska koordinaterna mäts koordinater som vi vill att de virtuella koordinaterna ska visas på.

Systemet utför interpolering, men inte extrapolering, enligt beskrivningen nedan. I allmänhet är interpolering säkrare och stabilare än extrapolering. Den linjära interpolation som tillhandahålls kommer att uppfylla de flesta programbehov. Extrapolering är mindre säkert och den idealiska implementeringen kräver vanligtvis kunskap på programnivå. Det är därför kvar för programmet att hantera extrapolering enligt beskrivningen nedan.

Utan att programmet lägger till extrapoleringsstift fästs utrymmet exklusivt utanför stiftens gränser av värdet vid närmaste gräns. Om det bara finns två stift, A och B, så när användaren flyttar från A till B blandas fästningen mellan den justering som anges av A och den som anges av B (interpolering). Men när användaren skickar B låss fästningen till exakt det som anges av B (konstant tillägg).

Interpolation

I 2D-regionen mellan stift interpoleras den rumsliga lokaliseringen linjärt. Om blankstegsstiften är korrekt placerade och spårningsfelet fördelas jämnt över regionen blir korrigeringen mellan blankstegsstiften exakt korrekt.

Det bör betonas här att antagandet om lika felfördelning exakt inte är korrekt. Men som en uppskattning ger den linjära modellen utmärkta korrigeringsresultat.

Extrapolering

Systemet tillhandahåller ingen inbyggd extrapoleringstjänst, med konstant värdeförlängning utanför det konvexa skrovet på rymdstift. Den här uppskattningen motsvarar att anta, felaktigt naturligtvis, att det inte finns något skalningsfel utanför programmets tillhandahållna blankstegsstift.

Men om programmet har kunskap om felfördelningen eller är nöjd med en uppskattning kan det skapa valfri extrapolering genom att lägga till fler blankstegsstift i periferin.

Exempel på extrapolering

Överväg en scen med fyra blankstegsstift, placerade i en fyrkant med kanter 4 meter långa.

Låt oss nu säga att det faktiska utrymmet som användaren kommer att flytta runt i är 12 meter x 12 meter, med de fysiska markörer som motsvarar de fyra stiften som omger mitten av utrymmet.

Om programmet är uppfyllt med en konstant felövernärmning har det all information som krävs för att lägga till fyra eller fler blankstegsstift för att ge täckning över hela utrymmet på 12x12 m.

Vi ska märka stiften i hörnen på 4x4-kvadraten med deras kardinalriktningar, NE, NW, SW och SE. Vi ska också märka de virtuella positionerna vid varje punkt virtualNE osv. och de fysiska positionerna vid varje fysiskT NÄTVERK osv.

Fyra blankstegsstift

En strategi skulle vara att lägga till yttre kardinalpunkter som skapar en 12 meter x 12 meter kvadrat som omger den inre fyrkanten genom att lägga till ytterligare fyra kardinalpunkter, yttreNE, yttreNW, yttreSW och yttreSE. De virtuella och fysiska positionerna för var och en av dessa är enkla att beräkna. Tar outerNE till exempel:

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

Åtta blankstegsstift

Om du skapar ett extrapoleringsutrymme på 20 x 20 meter ändras bara skalan för deltat som tillämpas:

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

Med en outerSize på 20 m, och en innerSize på 4 m, skulle skalan vara 2.

En alternativ strategi kan vara att lägga till ytterligare åtta punkter utöver hörnen enligt nedan. Att beräkna de nya stiftplatserna från de befintliga är exakt som ovan. Observera att även om det är sant att lägga till fler stift i allmänhet förbättrar stabiliteten, förbättrar det inte nödvändigtvis noggrannheten.

Tolv blankstegsstift

Justera en delmängd av scenen

Diskussionen hittills gäller den globala AlignmentManager, som ägs och hanteras av WorldLockingManager.GetInstance(). Som tidigare beskrivits fäster detta hela det globala Unity-koordinatutrymmet på fysiska funktioner vid strategiska referenspunkter.

Det finns dock tillfällen när samma koncept tillämpas på en delmängd av scenen.

Tänk dig till exempel ett scenario där anteckningar för två bilar ska läsas in. Den exakta placeringen av de två fysiska bilarna kan inte vara känd i förväg, eftersom den kan variera beroende på layouten för olika återförsäljare. Men när ett av de fysiska fordonen har distribuerats är positionerna för alla komponentdelar i förhållande till den distributionsställningen kända.

I det här scenariot kan sedan space pins användas för att fästa det virtuella chassit och anteckningarna för vart och ett av fordonen oberoende av varandra. Hela den virtuella representationen av vart och ett av fordonen kan konfigureras i Unity och sedan mappas till det fysiska fordonet vid körning. Den här justeringen kan vara manuell med MRTK UX eller automatiserad med QR-koder eller någon annan strategi. Oavsett hur data i korrespondensen mellan virtuella och fysiska referenspunkter bestäms kommer WLT att hålla de virtuella och fysiska objekten justerade på ett perceptuellt optimerat sätt när de matas till WLT via API:et space pins.

Vid justering av det globala koordinatutrymmet sker justeringen genom att ändra noden Justering (vanligtvis överordnad till kamerans överordnade). Noden bör betraktas som reserverad för WLT:s användning. All annan manipulering av den transformeringen resulterar i odefinierat beteende.

På samma sätt måste justeringen äga en transformering vid (under)roten för underträdet som ska justeras när du justerar ett underträd. Eventuell extern manipulering av den transformeringen resulterar i odefinierat beteende.

Innan de oberoende blankstegen fästs dras de med när det globala utrymmet fästs. Men när ett oberoende utrymme har fästs anses det vara fäst på den fysiska världen, så efterföljande ändringar av fästningen av det globala utrymmet till den fysiska världen kommer inte att påverka det.

Se även

Se även