簡體   English   中英

SpatialCoordinateSystem.TryGetTransformTo() 從網絡攝像頭到 Unity 空間在 HoloLens 2 上的非初始分離空間環境中失敗

[英]SpatialCoordinateSystem.TryGetTransformTo() from Webcam to Unity space fails in a non-initial, separated spatial environment on HoloLens 2

關於從 HoloLens 2 網絡攝像頭空間轉換到 Unity+MRTK+OpenXR 應用程序中的當前 Unity 場景空間的轉換矩陣,我有一個非常具體的問題。 目標是在 Unity 空間中通過Windows.Media.Capture獲取與相機幀相關的精確相機姿勢。

我的環境:

  • 統一 2021.3.8。
  • MRTK v2.8.2
  • 混合現實 OpenXR 插件 v1.6.0

為了獲得矩陣,我首先收到一個Windows.Perception.Spatial.SpatialCoordinateSystem實例 ( unityReferenceCoordinateSystem ),通過 MR OpenXR插件表示 Unity 空間,如下所述:

using Windows.Perception.Spatial;
using Microsoft.MixedReality.OpenXR;

SpatialCoordinateSystem unityReferenceCoordinateSystem = PerceptionInterop.GetSceneCoordinateSystem(Pose.identity) as SpatialCoordinateSystem;

我從MediaFrameReaderWindows.Media.Capture.Frames.MediaFrameReference獲取的相機幀實例中獲取相機空間( cameraCoordinateSystem

MediaFrameReference mediaFrame; // acquired camera frame
SpatialCoordinateSystem cameraCoordinateSystem = mediaFrame.CoordinateSystem;

最后,我通過使用SpatialCoordinateSystem.TryGetTransformTo()獲得所需的變換矩陣,如您在我的完整方法中所見:

using Microsoft.MixedReality.Toolkit;

public bool TryGetCameraToUnityMatrix(out Matrix4x4 cameraToUnity)
{
    // (obtain MediaFrameReader, acquire a camera frame and obtain 
    // unityReferenceCoordinateSystem and cameraCoordinateSystem as described above)
    
    System.Numerics.Matrix4x4? camToUnitySysMatrix = cameraCoordinateSystem.TryGetTransformTo(unityReferenceCoordinateSystem);

    if (!camToUnitySysMatrix.HasValue)
    {
        return false;
    }

    cameraToUnity = camToUnitySysMatrix.Value.ToUnity();
    return true;
}

到目前為止一切正常 - 直到我將 HoloLens 帶入另一個空間環境,該環境未連接到應用程序啟動時存在的環境。

描述以下場景應該清楚我的意思:

  1. 在 HL2 上啟動應用程序
  2. 按照描述獲取cameraToUnity矩陣 --> 工作正常
  3. 將 HL 設置為待機
  4. Go到另一個房間,HL的空間意識不知道這兩個房間之間的聯系
  5. 喚醒 HL 並打開(仍在運行的)應用程序。
  6. 獲取cameraToUnity矩陣。 -->失敗:
    camToUnitySysMatrix.HasValue返回 false(即使 arguments unityReferenceCoordinateSystemcameraCoordinateSystem是 null。)
  7. 再次將 HL 設置為待機狀態
  8. Go 回到app最初啟動的初始環境
  9. 喚醒 HL 並打開(仍在運行的)應用程序。
  10. 按照描述獲取cameraToUnity矩陣 --> 再次正常工作! camToUnitySysMatrix再次具有有效值)

我還確保在更改環境后重新調用unityReferenceCoordinateSystem = PerceptionInterop.GetSceneCoordinateSystem(Pose.identity)並且 MediaFrameReader 也從新的MediaFrameReader實例MediaCapture實例化。

但顯然,如果在非初始空間環境中嘗試,兩個 SpatialCoordinateSystems 之間的轉換似乎會失敗。

關於如何解決這個問題的任何想法?

更新

可在此處找到用於重現此問題的最小 Unity 示例項目: https://github.com/pjaydev/trygettransformto-so

平時,用戶應佩戴HoloLens設備,並在移動和操作時保持開啟狀態,讓設備充分了解環境。 而且HoloLens對使用的場地大小也有一定的要求,如果房間太小,HoloLens可能無法正常工作。 如果您對此問題感到困惑或對業務有影響,您可以通過aka.ms/HLSupport提交工單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM