基于openxr,collabora推开源vi-slamar/vr定位系统

青亭网- 青亭网-     2023-04-02     374

关键词:

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开发openxr|openxr是什么?一文带你全面了解openxr的相关知识,上车收藏不迷路

文章目录OpenXROpenXR出现的背景标准化有何好处Khronos百度百科Khronos相关标准OpenXR概念行业行情总结OpenXR“OpenXR”旨在标准化各种VR/AR平台上的设备和应用程序之间的规范。它由KhronosGroup制定,KhronosGroup是一个由VR/AR相关公司组... 查看详情

unity开发openxr|使用openxr制作一款《保龄球demo》加深对controller控制器的理解使用

查看详情

unity开发openxr|使用openxr制作一款简单vr示例场景的全过程详细教程,包含两个实战案例。

文章目录 查看详情

unity开发openxr|使用openxr添加一个运动系统,实现传送抓取功能的简单vr示例场景的全过程详细教程

文章目录 查看详情

内网docker安装collabora

...术A本机IP:192.168.1.110,虚拟机地址IP:192.168.33.145dockerpullcollabora/codedockerrun-t-d-p0.0.0.0:9980:9980-e'domain=192\\.168\\.1\\.110|192\\.168\\.33\\.145'-e"username=admin"-e"password=123456"--restartalways... 查看详情

unity开发openxr|使用openxr制作一款简单vr示例场景的全过程详细教程,包含两个实战案例。(代码片段)

文章目录📢前言🎬OpenXR|使用OpenXR制作一个简单VR示例场景的全过程详细教程🏳️‍🌈打开UnityHub新建一个Unity项目🏳️‍🌈添加XRPluginManagment🏳️‍🌈配置安卓版本🏳️‍🌈导入XRInterac... 查看详情

unityvr开发教程openxr+xrinteractiontoolkit手部动画(代码片段)

...d5;第三步:编写脚本控制手部动画(版本一:基于InputSystem,推荐做法)📕第三步:编写脚本控制手部动画(版本二:基于XRInputSubsystem)📕第四步:调整场景往期回顾:UnityVR开... 查看详情

unity使用openxr和xrinteractiontoolkit开发htcvive(vivecosmos)(代码片段)

Unity使用OpenXR和XRInteractionToolkit开发HTCVive(ViveCosmos)提示:作者是Unity2020.3以上版本做的开发。开发VR程序需要安装Steam,SteamVR,(ViveCosmos,需要再安装VIVEPORT,VIVEConsole)OpenXR控制设备(头盔,手柄)通信。XR... 查看详情

unityvr开发教程openxr+xrinteractiontoolkitui

...📕改变射线发射的位置往期回顾:UnityVR开发教程OpenXR+XRInteractionToolkit(一)安装和配置UnityVR开发教程OpenXR+XRInteractionToolkit(二)手部动画UnityVR开发教程OpenXR+XRInteractionToolkit(三)转向和移动UnityVR开发教程OpenXR+XRInter... 查看详情

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

】DockerNextcloud无法加载CollaboraOnline-请稍后再试【英文标题】:DockerNextcloudFailedtoloadCollaboraOnline-pleasetryagainlater【发布时间】:2021-01-0716:10:27【问题描述】:我有这个错误信息:加载CollaboraOnline失败-请稍后重试当我尝试打开文件... 查看详情

vr/ar标准委员会成立,宣布全新的标准openxr

Khronos集团在今天早些时候宣布了开放VR/AR标准委员会——OpenXR工作组。这一组织也将会由世界领头羊VR/AR公司的代表组成。而宣布的公司中包括:Facebook子公司Oculus、valve、unity、Epic、三星和谷歌,但是并不包含HTC的子公司Vive。Vi... 查看详情

unityvr开发教程openxr+xrinteractiontoolkit传送(代码片段)

...📕美化传送射线的方法往期回顾:UnityVR开发教程OpenXR+XRInteractionToolkit(一)安装和配置UnityVR开发教程OpenXR+XRInteractionToolkit(二)手部动画UnityVR开发教程OpenXR+XRInteractionToolkit(三)转向和移动上一篇教程中,我们学... 查看详情

按钮文本推开 Firefox 中的填充

】按钮文本推开Firefox中的填充【英文标题】:ButtontextpushesawaythepaddinginFirefox【发布时间】:2012-05-2903:08:43【问题描述】:标记:<inputtype="button"value="randomtextrandomtextrandomtextrandomtextrandomtext"style="padding-left:20px;text-align:left; 查看详情

如何使动态高度 UILabel 将其他元素推开?

】如何使动态高度UILabel将其他元素推开?【英文标题】:HowtomakeadynamicheightUILabelpushotherelementsoutofitsway?【发布时间】:2014-10-2718:52:31【问题描述】:所以我有一个UILabel,它正在从数据库中获取动态数量的内容。它获得的内容越... 查看详情

5小时推开spark的大门,打卡有奖

大家伙,我是一条~欢迎大家和我一起学习《5小时推开spark的大门》,本篇是导航篇,主要介绍课程内容及安排。本课程意在帮助学习Spark的同学入门,通过基本概念+实际案例+核心原理的讲解让大家简单快速... 查看详情

Three.js - 推开然后在“鼠标移动”上恢复元素位置

】Three.js-推开然后在“鼠标移动”上恢复元素位置【英文标题】:Three.js-Pushawayandthenrestoreelementspositionon"mousemove"【发布时间】:2016-06-2913:35:24【问题描述】:大家好,我正在Three.js开发一个项目,用户可以在其中hover镶嵌... 查看详情

Angular2 *ngFor 推开元素的动画

】Angular2*ngFor推开元素的动画【英文标题】:Angular2*ngForanimationofpushedawayelements【发布时间】:2017-07-1114:07:18【问题描述】:我看过很多关于进入或离开元素的动画教程(下图中的“新元素”),但其余元素(元素1和2)通常只是... 查看详情

从基于源的索引转换为基于目标的索引

】从基于源的索引转换为基于目标的索引【英文标题】:ConvertingfromSource-basedIndicestoDestination-basedIndices【发布时间】:2016-08-3123:35:07【问题描述】:我在一些C代码中使用AVX2指令。VPERMD指令采用两个8整数向量a和idx,并通过基于idx... 查看详情