Share via


空格釘選

要解決的問題

小數位數錯誤

雖然將全像投影與真實世界功能對齊的傳統空間錨點方法在小型規模上很適合,但隨著縮放比例成長以包含超過計量,則難以運作。

頭部追蹤空間中的縮放錯誤表示,即使空間錨點保留虛擬物件的一端,大小只有數公尺,且完全符合真實世界特徵,另一端可能與對應的真實世界特徵不一致。 這種不對齊是因為經過頭部追蹤空間的距離通常會與透過實體空間移動的距離不同,且錯誤界限為 +-10%。 實際錯誤通常較不 (取決於許多環境和裝置特性) ,但通常會相當重要,而且隨著專案的規模成長而沒有界限而成長。

另一種方式是,如果使用者戴著 HoloLens 在真實世界中執行 10 公尺,則虛擬空間中移動的距離將會介於 9 公尺和 11 公尺之間。 如果使用者逐步執行 50 公尺,則錯誤會成長為 +-5 公尺。 使用者越遠,錯誤就越大。

因此,模型空間中的 10 公尺柱形 () 一個端點與實際空間中磁帶量值的零端完美對齊,將會在 9 到 11 公尺之間的某處向磁帶量值註冊另一端。

基於相同的原因,使用空間錨點鎖定的每一個世界都會與實際空間中的距離不同。

任意座標系統

有另一個考慮。 HoloLens 中的 Unity 座標系統不確定。 它只以應用程式開頭的頭部姿勢為基礎。

此任意性不是許多工作的問題。 如果目標是將光線轉換成會議室的空間對應,並將全像投影放在點擊位置,則點擊位置的數值無關。

同樣地,在使用者周圍快顯 UX 元素時,放置 UX 元素的絕對座標並不重要,只有相對於使用者的座標。

不過,無法預測的座標系統可能會讓更多相關的案例變得複雜。 將大型物件集合載入到與實體空間有固定關聯之虛擬空間中,例如使用者的桌面或整個辦公室空間,需要一些補償轉換,才能讓模型空間物件與前端座標框架對齊。

該補償通常是藉由將所有物件附加至單一 Unity 轉換,並調整該單一轉換來定位虛擬物件,並將虛擬物件對齊真實世界。

同樣地,相機階層中的單一轉換可以用來重新製作相機,如此一來,當使用者看到真實世界參考點時,具有所需模型座標的虛擬物件就會出現在該功能上。

解決方案

空間釘選功能可同時解決這兩個問題。 其作法是利用世界鎖定工具全域空間的世界鎖定本質,以及該空間的任意性。

對齊 Unity 空間與真實世界

世界鎖定工具的核心提供穩定的世界鎖定座標系統。 放置於以真實世界功能註冊之世界鎖定空間中的虛擬物件,將會隨著時間持續向該真實世界功能註冊。

但有無限數目的空間滿足該目標。 事實上,假設有一個世界鎖定的空間,由任何任意位置和旋轉來轉換它,就會產生另一個同樣有效的世界鎖定空間。

空間釘選功能會套用另一個條件約束,以移除世界鎖定轉換的不確定本質。

該條件約束是當「接近」空間釘選時,該空間釘選在世界鎖定空間中的姿勢會與模型空間中空間釘選的姿勢相同。

假設 Unity 場景中的 Cube 模型化為全域座標, (0、0、1) 。 當場景載入 HoloLens 時,立方體會在初始頭部姿勢前面顯示 1 公尺。 視初始頭部姿勢而定,這可能是實體房間中的任何位置。

空間釘選可讓立方體鎖定到會議室中的真實世界功能,例如特定桌面的角落。 不同于使用空間錨點鎖定 Cube,空間釘選會移動整個 Unity 空間,讓立方體與桌面角落對齊。 因此,例如,相對於 Unity 中 Cube 建立模型的其他桌面專案會適當分散到實際桌面上。

解決縮放錯誤

雖然單一空間釘選會移除虛擬座標與真實世界之間的關聯性不確定,但無法解決縮放錯誤。

也就是說,雖然原點可能已將原點移至實體世界對齊的位置和方向,但真實世界中的 10 公尺仍可能只移動使用者虛擬空間中的 9 公尺。

為此,多個空格釘選可提供完整的解決方案。 當使用者接近任何特定的空間釘選時,世界將會根據該空格圖釘對齊。 其他空間釘選將會不對齊,但較遠,這通常證明是可接受的,而且通常無法辨識。

當使用者在空格釘選之間移動時,平滑插補會將空間中任何指定點的縮放錯誤降到最低。 使用足夠的空間釘選密度做為參考點,真實世界和虛擬特徵的對齊錯誤會減少到前端追蹤器錯誤的順序。

雖然空間釘選的必要密度取決於環境支援的追蹤品質,以及應用程式的精確度需求,但這裡的某些數位可能有助於設定預期。 在辦公室環境中,有足夠的光源和可見功能可追蹤,空間釘選之間的間距為 10 公尺,可減少 10-20 公釐超過 10 公尺的累積 (錯誤,減少到最大錯誤 l.t.0.5 公分,0.0 公分,端點) 發生 0.0 公分錯誤。

持續性

空間釘選功能會與世界鎖定工具的其餘持續性一起運作。 同時有手動呼叫從腳本叫用儲存和載入,以及針對每個會話自動儲存和載入的旗標。

啟用時,世界鎖定工具管理員上的 AutoSave/AutoLoad 功能將允許在後續會話上還原虛擬世界與真實世界的完整空間對齊。

實際上,持續性表示單一或少量的初步會話可用來建立實體環境的適當掃描,以及該實體環境的對齊方式與 Unity 的模型座標空間。 後續的會話會接著載入與真實世界正確對齊的虛擬環境,而不需要進一步的使用者動作。

插補和推斷

插補和外推都是用來估計未進行直接測量之資料值的技術。 到目前為止所討論的空間針腳是已進行測量的位置。 虛擬座標是所需的座標,而實體座標是我們想要顯示這些虛擬座標的測量座標。

系統會執行插補,但不會推斷,如下所述。 一般而言,插補比推斷更安全且更穩定。 提供的分次線性插補將會滿足大部分應用程式的需求。 推斷較不安全,而且理想的實作通常需要應用層級的知識。 因此,應用程式會保留以處理外推,如下所述。

若沒有應用程式新增外推針腳,空間的界限外,空間會以最接近界限的值獨佔方式釘選。 如果只有兩個針腳 A 和 B,則當使用者從 A 移至 B 時,釘選會混合 A 所指定的對齊方式,以及 B (插補點所指定的) 。 但是當使用者傳遞 B 時,釘選鎖定會完全鎖定 B (常數延伸模組所指定的) 。

插補

在針腳之間的 2D 區域中,空間當地語系化會以線性方式插補。 如果正確放置空間針腳,且追蹤錯誤平均分散于區域,則空間針腳之間套用的更正會完全正確。

此處應該強調,假設相等錯誤分佈完全不正確。 不過,線性模型是近似值,可提供絕佳的更正結果。

推斷

系統不會提供任何內建推斷服務,使用空間針腳凸殼外的常數值延伸。 這個近似值相當於假設應用程式提供的空間針腳之外沒有縮放錯誤。

不過,如果應用程式知道錯誤分佈,或滿意估計值,則可以藉由在周邊新增更多空間釘選來建立所需的任何推斷。

外推範例

假設有四個空間釘選的場景,放在 4 公尺長邊緣的方形中。

現在,假設使用者將移動的實際空間是 12 公尺 x 12 公尺,實體標記對應到空間中心周圍的四個針腳。

如果應用程式滿意常數誤差近似值,則其具有新增四個以上的空間針腳所需的所有資訊,以提供整個 12x12m 空間的涵蓋範圍。

我們將依據基數方向、NE、NW、SW 和 SE,將 4x4 方塊角落的針腳加上標籤。 我們也會將每個點 virtualNE 等的虛擬位置加上標籤,以及每個點 physicalNE 等的實體位置。

四個空格針腳

其中一個策略是新增四個以上的基數點、outerNE、outerNW、outerSW 和 outerSE,以建立 12 公尺 x 12 公尺正方形周圍。 其中每一個虛擬和實體位置都很容易計算。 例如,採用 outerNE:

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

八個空間針腳

建立 20x20 公尺的外推空間只會變更套用的差異縮放比例:

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

當 outerSize 為 20 m,而 innerSize 為 4 公尺時,小數位數會是 2。

替代策略可能是除了邊角之外,還新增了八個點,如下所示。 從現有釘選位置計算位置與上面完全相同。 請注意,雖然新增更多針腳通常會改善穩定性,但不一定能改善精確度。

十二個空間針腳

對齊場景的子集

到目前為止的討論與 WorldLockingManager.GetInstance () 所擁有的全域 AlignmentManager 有關。 如先前所述,這會將整個全域 Unity 座標空間釘選到策略參考點的實體特徵。

不過,有時候將相同的概念套用至場景的子集。

例如,假設有一個案例會載入兩輛汽車的注釋。 這兩部實體汽車的確切位置無法事先得知,因為它可能會根據不同轉銷商的配置而有所不同。 不過,一旦部署其中一個實體車輛,就會知道與該部署姿勢相關的所有元件元件位置。

在此案例中,空間針腳可用來個別釘選每個車輛的虛擬底座和注釋。 每個車輛的整個虛擬表示都可以在 Unity 中設定,然後在執行時間對應到實體車輛。 此對齊方式可能是手動使用 MRTK UX 或使用 QR 代碼或任何其他策略進行自動化。 不論虛擬和實體參考點之間的對應資料如何決定,一旦透過空間釘選 API 將 WLT 饋送至 WLT,WLT 就會以感知優化的方式保持虛擬和實體物件對齊。

在對齊全域座標空間的情況下,對齊方式是操作調整節點 (相機父系) 的父系。 該節點應該視為保留供 WLT 使用。 任何其他竄改該轉換都會導致未定義的行為。

同樣地,對齊子樹時,對齊需要擁有轉換,才能在子樹的 (子樹根) 對齊。 任何外部竄改該轉換都會導致未定義的行為。

在釘選獨立空格之前,它們會隨著釘選全域空間一起拖曳。 不過,一旦釘選獨立空間,就會將其視為釘選到實體世界,因此後續修改將全域空間釘選到實體世界將不會影響它。

另請參閱

另請參閱