基于OpenXR,Collabora推开源VI-SLAM AR/VR定位系统

Posted 青亭网-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于OpenXR,Collabora推开源VI-SLAM AR/VR定位系统相关的知识,希望对你有一定的参考价值。

XR最关键的难题之一就是定位,为了定位XR头显在现实世界中的位置和角度,厂商们采用了多种方案,比如机械传感器、惯性传感器、磁传感器、声学传感器等等。这些定位方式有一个共同的问题,那就是传感器不够完善,且会产生噪音。

拿IMU为例,它通过访问陀螺仪来测量角速度,访问加速计来测量线性加速度,也可能会用上磁力计。理论上讲,如果IMU的测量结果是完美的,那么它应该能提供定位AR/VR头显空间姿态的完整数据。然而,IMU的测量误差通常可达数百米,并不理想。为了抵消它的不准确性,AR/VR头显会结合多个传感器,利用智能融合算法来推算出准确性更高的姿态。

开源VI-SLAM方案

近年来,基于摄像头和IMU单元的视觉惯性定位(VI)在XR中得到广泛应用,比如WMR头显就采用两个或更多定位摄像头,而Quest等VR一体机通常采用四颗或更多摄像头,Index等PC VR也配备多颗摄像头。VI定位方案通过光学来捕捉周围的场景,以实现设备定位,其优势是将传感器集成在头显中,不需要外部基站,设置起来更加方便。

然而,光学6DoF定位通常是XR头显专有的,不同的厂商需要独立开发光学定位算法,没有现成的光学6DoF定位方案可直接使用。一些初创的XR厂商如果没有获得特殊许可,很难获得光学6DoF算法和开发经验。

于是,Collabora顾问软件工程师Mateo de Mayo便开发了一种开源的Vi-SLAM光学定位方案:Monado,该方案特点是基于OpenXR的开源XR运行时,可在移动端、PC端运行AR/VR应用,或是通过AR/VR头显的摄像头实现Inside-Out 6DoF定位。

据悉,Vi-SLAM是视觉惯性方案与SLAM的结合,使用了快速的IMU样本(200Hz)和慢速的相机图像捕捉(20Hz),其中IMU主要用于测量头显的内部运动,而相机则用于捕捉环境变化,以校正IMU测量数据。而SLAM则负责从初始姿态扫描场景,并实时创建地图,进行定位。通常,VI-SLAM地图由场景中的地标组成,通过三角测量法来定位。

视觉惯性定位好处是比纯SLAM方案速度更快,虽然准确性有所牺牲,但随着过去几十年技术发展,其性能、稳定性、准确性、应用场景、易用性都在提升,几乎每年都会出现新迭代的版本。

Monado驱动程序此前仅兼容RealSense和WMR定位方案,在结合上述SLAM/VIO方案后,可兼容更多头显定位系统,包括North Star、Valve Index、WMR、PS VR、HTC Vive Pro等等,还兼容Intel实感相机定位。

https://v.qq.com/txp/iframe/player.html?vid=g33704781k6

除了Inside-Out定位外,Monado还可以为AR/VR头显带来VST透视功能,以及手势识别功能。

原理方面,Monado结合AR/VR头显的摄像头和IMU数据来实现6DoF定位,此外它还结合了三种开源的SLAM/VIO解决方案:Kimera-VIO、ORB-SLAM3和Basalt。利用这三种SLAM/VIO方案,摄像头驱动的支持。

Monado和OpenXR

Monado项目获得了Collabora支持,基于OpenXR标准,可为常见AR/VR硬件提供多种用于追踪定位的工具和驱动,后来在去年5月,在Collabora实习的Mateo de Mayo将Monado与SLAM/VIO方案集成,实现了视觉惯性定位功能。

de Mayo曾测试三种SLAM/VIO系统,其中Kimera-VIO兼容配备单摄或双摄定位、IMU的头显,而ORB-SLAM3几乎兼容任何传感器方案,不管是无IMU的纯单目SLAM,还是全立体IMU-LSMA,不过该方案依赖于预先记录的数据。相比之下,第三个系统Basalt是其中速度最快的,可以更好的满足AR/VR对于实时定位的需求。此外,Basalt的源代码整体比较适合软件开发流程,有大量文档支持。

多亏了Basalt模块,现在Monado可以在Linux上的一个完全开源的软件堆栈上跟踪OpenXR应用程序。

设备集成

为了将SLAM/VIO与Monado集成,开发者需要创建足够灵活的SLAM定位接口,目的是允许每个SDK将输入和输出管道开放给Monado进行定位。

Monado中的中央SLAM定位器可读取AR/VR头显的摄像头、IMU数据,同时也兼容RealSense D455深度感知相机模组。RealSense D455特点是支持3D传感,可测量场景深度,可以很好的定位。Sense D455不仅打在了RGB摄像头,也搭载了IMU来改善移动时深度感知效果。

此外,de Mayo还与WMR驱动程序开发者合作,为其扩展对SLAM定位的支持。现阶段,WMR定位效果不如RealSense驱动好,而且Monado还是一个开源方案,未来经过更多迭代后,可能会更好的商品化。参考:Collabora

Unity XRUnity开发OpenXR

Unity开发OpenXR

介绍OpenXR相关依赖插件

OpenXR

OpenXR是一种免版税的开放标准,可提供对增强现实 (AR) 和虚拟现实 (VR)(统称为 XR)平台和设备的高性能访问。

OpenXR Plugin

OpenXR 是由 Khronos 开发的开放、免版税标准,旨在通过允许开发人员针对各种 AR/VR 设备来简化 AR/VR 开发。 使用此插件在 XR Plug-in Management 中启用 OpenXR。

XR Interaction Toolkit

XR Interaction Toolkit包是一个高级的、基于组件的交互系统,用于创建 VR 和 AR 体验。 它提供了一个框架,使 Unity 输入事件中的 3D 和 UI 交互可用。 该系统的核心是一组基本的 Interactor 和 Interactable 组件,以及将这两种类型的组件联系在一起的 Interaction Manager。 它还包含帮助组件,您可以使用这些组件来扩展绘制视觉效果和挂钩您自己的交互事件的功能。

XR Plugin Management

XR Plugin Management提供对 XR 插件的简单管理的软件包。管理 XR 插件的加载、初始化、设置和构建支持并提供帮助。Project Settings中 XR Plug-in Management 使用 XR 插件管理包来帮助简化 XR 插件生命周期管理,并可能通过 Unity 统一设置系统为用户提供构建时 UI。

安装OpenXR相关依赖插件

Package Manager

在编辑器中,您可以通过以下菜单访问 Package Manager window :Window > Package Manager.
通过 Package Manager window 菜单栏 Packages 下拉菜单选择 Unity Registry (显示 Unity 包注册表上的所有包)
搜索 XR 下载相关插件包

在安装XR Plugin Management后,会弹出提醒(使用新的输入系统包,并禁用旧的输入系统API,然后重启),直接选择YES

Unity VR 模板

创建项目时选择 VR 模板项目会自动为项目添加相关包如:XR Interaction Toolkit、XR Plugin Management 等

配置OpenXR相关依赖插件

XR Plug-in Management:
XRManagerSettings - 这是一个可用于管理 XRLoader 实例及其生命周期的 ScriptableObject。
XRLoader - 这是所有加载程序都应该派生的基类。 它提供了 XRManagerSettings 可用于管理生命周期的基本 API,以及可用于从 Loader 请求特定子系统的简单 API。
XRConfigurationData - 这是一个允许在统一设置窗口中托管构建和运行时设置的属性。 所有实例都显示在统一设置窗口中的顶级 XR 条目下,使用脚本中提供的名称作为属性的一部分。 管理包使用 EditorBuildSettings 配置对象 API(与属性中提供的密钥一起存储)来维护和管理构建设置的一个实例的生命周期。 您可以通过从 EditorBuildSettings 检索与所选键(在属性中设置)关联的实例来访问配置设置实例。
XRPackageInitializationBase - 从中派生的帮助类简化了包初始化。 帮助创建包的 XRLoader 的默认实例和安装包时的默认设置。 初始化只运行一次,你不应该依赖用户自己创建指定的实例。
XRBuildHelper - 抽象类可用于处理一些关于将设置从编辑器移动到运行时的样板。 如果您从此类派生并指定适当的设置类型,则系统将该类型的设置从 EditorUserBuildSettings 移动到 PlayerSettings,以便系统可以在运行时使用它们。
XRGeneralSettings - 包含适用于所有 XR 插件而不是任何单个提供程序的设置。
Samples folder - 包含 XR Plug-in Management 所有部分的实现。 您可以将此文件夹复制到您的项目或包中,以根据您的需要开始实施 XR Plug-in Management。

OpenXR Plugin:
添加 OpenXR Plugin 包时在 Assets 文件夹下生成 XR 文件夹
Open XR Loader No Pre Init - OpenXR 加载程序继承于 XRLoader
Open XR Loader - OpenXR 加载程序继承于 XRLoader
Open XR Package Settings -

XR Interaction Toolkit:
添加 XR Interaction Toolkit 包时在 Assets 文件夹下生成 XR 文件夹

会有个Debugger -XR Interaction Debugger
XR Interaction Debugger 窗口显示场景中所有输入设备、交互对象和交互器的自上而下视图。 它还显示了它们彼此之间的关系以及它们的父交互管理器。 要打开此窗口,请从 Unity 的主菜单转到 Window > Analysis > XR Interaction Debugger。

如果在导入 XR Interaction Toolkit 后导致com.unity.xr.openxr发生错误,可能是引用没生成,重启 Unity 就好。

Windows XR Plugin
提供对 Unity XR SDK 的实施和支持,从而允许集成和使用 Windows Mixed Reality 设备。

Oculus XR Plugin
为 Oculus 设备提供显示和输入支持。

Project Settings 下 XR Plug-in Management:
在目标平台,勾选OpenXR,

点击感叹号,提醒增加至少1个 Interaction Profile文件;

点击Edit,此时进入 OpenXR 相关的 feature 设置,选择 OculusTouch Controller profile

安装PicoXR SDK

下载PICO Unity Integration SDK

Unity XR SDK v2.x 系列是底层和接口重构后的长期维护版本,支持Neo3、PICO4全系列设备。开发 Neo3、PICO4游戏及应用,建议使用2.x 系列SDK。 旧版SDK,Unity XR Platform SDK (Legacy)以及PicoVR Unity SDK(Deprecated)已经下架,推荐使用UnityXR SDK。

官网下载地址 https://developer-cn.pico-interactive.com/sdk

当前最新版:PICO Unity Integration SDK v211

Package Manager 导入 SDK

在编辑器中,您可以通过以下菜单访问 Package Manager window :Window > Package Manager.
通过 Package Manager window 菜单栏 “+” 下拉菜单选择 Add package form disk(从本地加载package)

在打开的对话框中,选择SDK文件夹下的package.json文件后点击打开

不想写了 跳转去看把
Unity关于Oculus Quest2 入门开发:(一)Unity配置Oculus Quest2开发环境
https://blog.csdn.net/weixin_43750989/article/details/114642711

Unity关于Oculus Quest2 入门开发:(三)基于XR Interaction Toolkit0.10.0开发交互功能之传送篇
https://blog.csdn.net/weixin_43750989/article/details/114671959

实战分享1:如何使用华为VR Glass 6dof 基于 OpenXR@ unity 开发VR游戏/应用
https://blog.csdn.net/weixin_46470246/article/details/123719141

【实战分享2】:如何基于OpenXR@ unity + 华为VR Glass 6dof & Quest 开发跨平台VR游戏/应用
https://blog.csdn.net/weixin_46470246/article/details/123752868

Unity开发OpenXR |(三)使用 OpenXR 添加一个运动系统,实现传送、抓取功能 的简单VR示例场景 的全过程详细教程
https://cloud.tencent.com/developer/article/1945445

以上是关于基于OpenXR,Collabora推开源VI-SLAM AR/VR定位系统的主要内容,如果未能解决你的问题,请参考以下文章

内网docker安装collabora

Unity VR开发教程 OpenXR+XR Interaction Toolkit 手部动画

Unity开发OpenXR | OpenXR是什么?一文带你全面了解OpenXR的相关知识,上车收藏不迷路

Unity开发OpenXR | OpenXR是什么?一文带你全面了解OpenXR的相关知识,上车收藏不迷路

Unity XRUnity开发OpenXR

Docker Nextcloud 无法加载 Collabora Online - 请稍后再试