繁体   English   中英

如何访问 HoloLens2 原点空间坐标系统

[英]How to access the HoloLens2 Origin SpatialCoordinateSystem

问题:我一直在尝试基于 2D 人脸 RGB 人脸检测在 Worldspace 中创建 3D position,类似于此 Microsoft 示例 我将 Unity 2020.3.16f1、MRTK 2.8.2 和 C# 用于 Unity 脚本。 我已经能够成功地将链接中显示的 C++ 代码转换为 C#。 最后一个问题是访问 HoloLens 2 原点 SpatialCoordinateSystem 以用于相机的 2D 坐标系和 3D 世界空间系统之间的转换。

此链接上的 SO question 提出了一个非常相似的问题,我已尝试使用SpatialLocator.GetDefault().CreateStationaryFrameOfReferenceAtCurrentLocation().CoordinateSystem()作为答案建议。 我在Unity的“Awake”方法中称这个function,以保证尽早设置,如下图。

    private void Awake()
{
   worldSpatialCoordinateSystem = SpatialLocator.GetDefault().CreateStationaryFrameOfReferenceAtCurrentLocation().CoordinateSystem;
}

问题是,如果用户的耳机在应用程序启动时移动,我注意到 3D 位置的偏移与应用程序启动时头部的方向/位置相称。 我已将问题缩小到一个事实,即 HL2 和 Unity 在调用 Awake 中的 function 之前设置了一个原点 SpatialCoordinateSystem,这说明了我所期望的和我所看到的之间的偏移。

我尝试过的:我也尝试过使用此处列出的其他一些解决方案。 我无法使用 UnityEngine.Windows.WebCam.PhotoCapture 因为我创建静态图像捕获的方式,并且(SpatialCoordinateSystem)Marshal.GetObjectForIUnknown(WorldManager.GetNativeISpatialCoordinateSystemPtr())似乎已被弃用且无法使用。 最后,我尝试了CreateStationaryFrameOfReferenceAtCurrentLocation(Vector3, Quaternion) ,并使用了当前 Camera.main position 和旋转的倒数,希望能够补偿偏移量,但它似乎不起作用(NumericsConversionExtensions 是 UnityEngine-to-System.Numerics转换在这里找到)。 该代码如下。

worldSpatialCoordinateSystem = SpatialLocator.GetDefault().CreateStationaryFrameOfReferenceAtCurrentLocation(NumericsConversionExtensions.ToSystem(Camera.main.transform.position*-1), 
        NumericsConversionExtensions.ToSystem(Quaternion.Inverse(Camera.main.transform.rotation))).CoordinateSystem;

我的问题:当用户在调用 Awake 之前移动头部时,是否有其他方法可以访问原点空间坐标或可能补偿偏移量?

我花了 3 天时间研究解决方案,并在询问 SO 1 小时后找到了一个。 对于那些来这里的人,请使用下面的代码。

using Microsoft.MixedReality.OpenXR;
worldSpatialCoordinateSystem = PerceptionInterop.GetSceneCoordinateSystem(Pose.identity) as SpatialCoordinateSystem;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM