自研多模态追踪算法 PICO 为「手柄小型化」找到新思路

作者:张韬、林泽一 、闻超 、赵洋

研发背景

作为头戴的追踪配件,VR手柄可以通过HMD(头戴显示设备)的inside-out光学追踪定位原理,计算出手柄的空间运动轨迹,同时结合6轴传感器实现6DoF空间定位。与此同时,结合手柄控制器的物理按键、马达反馈、摇杆等,用户还能获得逼真、细腻的触觉反馈,进一步增强虚拟现实人机交互的能力以及沉浸感,这也是目前无手柄方案所难以实现的。

目前主流VR手柄的追踪技术方案,包括光学追踪、自追踪和电磁追踪方案。

304e1fbcf7c4ce82b9a4e5c2e3981c1e.png

因精度高、功耗低、成本低,光学追踪是目前最主流的VR手柄追踪方式。为了保证IR灯(红外灯)不易受遮挡,通常手柄本体上都带有一个明显凸起的追踪光环。

但为了顺应VR设备小型化得趋势,提升用户携带的便利性,并提供更自然的交互方式,PICO取消了手柄上的追踪光环,选择在手柄本体有限区域内布置少量的IR灯。

Centaur多模态融合算法架构

更小的手柄、更少的IR灯,也意味着更频繁的遮挡。如何解决遮挡情况下的手柄追踪问题,则是PICO研发团队面临的关键课题

基于团队在光学追踪与裸手追踪方面的技术积累,PICO创新性地提出了一套基于神经网络的多模态手柄追踪架构,其融合了惯性测量单元(IMU)、光学传感器和手部图像信息。在手柄被遮挡的情况下,裸手追踪能够提供更加精准的观测,同时手柄又能为手部追踪提供准确预测,两者深度融合、相互辅助。

裸手追踪

由于手柄的遮挡,通常裸手视觉特征并不明显,这也常常会引发追踪失效。针对该难点,裸手算法团队创新性地提出Down-Top的端到端6DoF追踪算法,通过有效利用多目时序的全局上下文信息,一次性准确且稳定地预测手柄位姿信息,能够在手柄追踪失效时,及时提供鲁棒的6DoF位姿。

1. 模型背景

目前普遍的裸手追踪算法是基于Top-Down结构,即基于Detection模型检测出手部的bounding-box框,再利用bounding-box框将手部抠选出来,如下图所示:

1c84d8832eaaef584c465d4a7463e1b6.png

该结构可以获得更高的精度,但是在平举、自然垂下等特殊动作场景中,由于小手柄遮挡或离得较远等原因,手部放大之后模糊的地方较多,如下图所示:

43543e2609a93914c026228eb0b06e21.jpeg5f9a4e5ce87157e87b539883b77de11c.jpeg

这种情况下,Top-Down的结构就很难检测出手腕点的位置,从而导致解算失败和手柄失效。但Down-Top的结构,则可以帮助PICO从大图中的手臂、身体等信息,判断手腕点的位置。

2. 模型结构图
c0c93d1fb4ff9f197fa517af783406ef.png
3. 评测结果

从使用Top-Down模型结构和Down-Top模型结构在平举和垂下等场景中的实验结果中,可以发现,使用Down-Top方案,能够在精度相近的情况下,获得更高的检出率:36%->93%。

Top-Down

386583023554f664c21b89c5bcf44b08.png

Down-Top

a070ef6bbdb7b7717c69275a5d5228aa.png

融合算法

1. 全新挑战

传统光学追踪方案,依赖手柄上一个显著突出的物理结构(即追踪光环),来确保手柄在各种各样的握持角度和位置条件下,都有足够的LED灯点可以被定位摄像头观测到。多个LED光点在图像上的2D位置被确定后,则可以进行PNP解算,辅以手柄内高帧率的IMU,则可以获得精确的手柄高频定位结果,从而为用户提供准确、流畅的追踪体验。

d93dcf41d3d6f2c9e71df9b626b85e04.png

PICO 4 手柄

88b84b79ec1582205176abaad3f125d7.png

Quest 2手柄

但去掉光环后,追踪算法则面临较大挑战。由于LED只能够被稀疏的布置于手柄本体的几个区域,且更少的数量和更易被遮挡的情况,也导致摄像头经常性地只能观测到有限的红外灯,甚至是零个。此时算法仅依赖IMU的惯性递推解算,并不能长时间提供稳定可靠的定位信息。

PICO算法团队经过多轮探索预研后,创新提出了融合惯性测量单元(IMU)、光学传感器和手部图像信息的多模态融合方案。该方案基于手势识别和手柄光学追踪的互补性,完美地解决了上述的一系列挑战和难点。团队将其命名为Centaur多模态融合算法。

2. Centaur多模态融合算法的构成

Centaur多模态融合算法将视觉信息和惯性信息进行融合,进而得到手柄位姿及速度的最优估计,并提供给上层应用层。融合算法构成如下图所示:

5faf12ebb79c1cfdc2c659f33656ae4c.png

图中各模块的功能:

  • 多个Global-Shutter IR camra布置在头戴四周,正常曝光帧能够采集到人手的特征,低曝光帧则能够在抑制大部分环境光照干扰时获取到手柄中的LED位置。

  • 一个IMU模块布置在手柄内部,提供手柄运动时的加速度和角速率信息。

  • 3-DOF模块借助纯IMU数据估计手部的旋转信息。

  • 基于深度学习手势检测及追踪模块(AI-based hand detection & tracking),通过有效利用多目时序的全局上下文信息,准确预测手柄的位姿信息。

  • 光学定位模块(Led detection / matching & pose estimation),使用3-DOF提供的姿态和LED在手柄上的分布等先验信息,通过智能匹配机制确定图像光斑和led灯的匹配关系,得到手柄位姿的单帧估计值。

  • 多帧融合滤波器(Multi-State-ESKF),将得到的手部位姿、手柄IMU数据、LED光学估计位姿及LED匹配关系等信息进行融合计算,得到高精度、高帧率的手柄位置、旋转及速度信息,并更新给系统接口,供上层应用使用。

3. 追踪与融合

当算法首次运行,或处于3DOF状态时,由于没有连续追踪产生的时序先验信息,因此需要Bootstrap from scratch的初始化方案。在LED及手势两种信息的加持下,初始化算法相比传统光学定位也做了相应的升级,并运行LED初始化和手势初始化两种算法,最先解出正确初始状态的算法将使用手柄初始位姿及速度初始化融合滤波器,从而显著改善各种握姿下手柄初始化的速度和成功率。

而当算法初始化完成并进入追踪状态时,算法流程又如下图所示:

6e754686d6ae27cec37237d4445c3de2.png
  • Step 1. 当一个新的图像帧到来时,基于滑窗中的历史帧状态,利用IMU数据进行惯性递推解算,得到新图像帧的状态预测值。

  • Step 2. 基于预测的手柄位姿能在当前帧图像中得到手柄LED或手部特征的预测位置,下面具体分类描述:

    • 针对正常曝光帧: 采用上文所述的Down-Top的网络结构,直接得到手腕关节6DOF的位姿结果,使用“手柄-手腕”对齐关系转换成手柄位姿,添加为一个位姿观测,作为当前帧的约束。

    • 针对低曝光帧: 在区域中检测得到LED光斑的2D位置。基于最近邻匹配算法,将预测的2D点集与检测得到的2D点集进行匹配。使用PNP solver得到手柄位姿估计,将位姿结果和2D匹配结果都添加到观测factor,作为当前帧约束。

  • Step 3. 最终的融合算法采用了Multi-State ESKF方案,采取了松耦合/紧耦合结合的模式,对追踪效果有显著改善的同时节省计算量并保证稳定性。

4. Centuar多模态融合算法收益
  • 下图为仅有 3 颗 LED 灯时手柄静止状态下的追踪效果,多帧紧耦合比单帧松耦合的结果更加精确,追踪更加稳定,波动显著减小

    • 光学观测的抖动非常明显,±3sigma范围约为「x轴16mm,y轴4mm,z轴25mm」。实际动作是放在头戴正前下方,露出三颗红外灯并保持静止,因此深度方向上(xz)误差显著大于与深度正交方向(y)上的误差。

    • 松耦合eskf对光学观测抖动有抑制作用,三轴向抖动范围压到「x轴6mm,y轴2.5mm,z轴9mm左右」,但速度估计波动仍有10mm/s。

    • 多帧紧耦合的结果是最好的,轨迹明显更平滑,抖动范围约「x轴2mm,y轴1mm,z轴3mm左右」,速度抖动范围3mm/s左右,相比原Filter各项误差指标大约有3倍收益。

e3998d3e4073b26abed53b829063c70e.png
  • 当做翻手动作,彻底遮挡所有LED时,算法融合手势定位信息与IMU信息,能够保持手柄的追踪状态与追踪精度,在各种场景下均能切换自如,丝滑操作。

  • 为了验证追踪效果,PICO团队还进行了极客玩家的极限测试,在运动健身、音游等需要快速甩动手柄的场景下,PICO多模态融合算法,都能准确且稳定地追踪手部和手柄的位置、姿态。

494b7727c70fe1f0953b415f5044af53.png

PICO 无灯环小手柄

自研同步多相机系统

数据采集与自动标注

PICO数据实验室构建了多模态的同步相机系统,不仅能获得大量且高精度的数据信息,也为技术和产品的研发奠定了坚实基础。该系统硬件方面包括工业 RGB 相机阵列,结构光扫描仪,光学动捕相机系统,以及 VR 头戴,软件方面包括点云注册、时空间标定、手势手柄自动标注等,数据采集与自动标注流程包含采集前的准备和数据采集作业,其中数据采集作业又分为两个阶段。

baa527e152456830618cc9514984f05e.png

左:同步相机系统;右:带光球的 VR 头戴

  • 采集前的准备

我们采用结构光扫描仪获取手柄和 IR 光球表面的密集点云获得了光球到手柄模型的转换关系。我们还将光球绑定到了 tag 标定板上,通过观测标定板获得了包括 VR 头戴在内的传感器参数;对于各个传感器的时间线,我们采用两种方式来对齐:一是侵入式地共用外部时钟信号,二是通过快速舞动头戴设备,从而获得 VR 头戴轨迹和与其绑定的光球轨迹来进行时、空间对齐。

f2b17177a2ba49502be7aeae879f3df9.jpeg

采集前,结构光扫描及注册

ef7fc4db22a2576b3ba6181152d31044.png

阶段一,采集手和手柄空间关系

600d0e83bf689d159a29ef8014ea09a6.png

阶段二,手柄跟踪及手势标签

  • 数据采集作业

    • 第一步,以多视角的图像作为输入,使用自研的手部姿态标注算法获得关键点位置。在这一环节中,为保持数据的高精度,我们提出了基于解耦表示的手势姿态估计算法。我们构建了 2D 视觉空间和 3D 节点空间,并通过迭代的方式不断优化手部姿态。同时,为了解决数据标注冷启动时训练数据来源的问题,我们还设计了多视角自监督的框架。相关算法已发表于 ICCV2023 会议中

    • 第二步,在获得不同视角观测的手部姿态后,我们融合多视角信息。通过使用三角化方法,通过 RANSAC 获取多视角融合后的 3D 手部姿态。在此基础上,再结合每个手部关键点的置信度进行微调优化。

    • 第三步,以上一步获得的 3D 手部关键点为目标,综合考虑骨骼位置、运动速度、手部关节的旋转、手势和手柄之间的碰撞关系等多种约束,对前序的结果进行优化。至此,我们获得了手的关键点以及手和手柄的相对位置关系

    • 第一阶段:相机系统同步采集工业相机和 VR 头戴相机的图像,并同时采集光学动捕相机捕捉的标志点坐标。

  • 第二阶段,被采集者保持手相对手柄姿势不变,在不同场景中挥动手柄获得其轨迹。

通过光球与手柄之间、阶段一获得的手和手柄之间的空间关系,以及阶段二采集的光球轨迹,就能获得手势、手柄在采集空间中的轨迹。另一方面,通过光球与头戴之间的空间关系与阶段二跟踪获得的光球轨迹,就能将手势、手柄投影到头戴相机中获得数据标签了。

总结

PICO研发团队始终致力于为全球用户创造优质的XR技术和产品体验。手柄小型化设计是XR交互方案设计中的创新性和突破性进展,而PICO自研的Centaur多模态追踪算法,不仅让「手柄小型化」完成了技术突破并成功落地,也为后续的人机交互设计提供了新的思路和可能性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/139363.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(六)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 这个部分主要是前端方面的。 1、在Navbar.vue显示右上角的图标栏里增加一项显示消息提醒的组件 <el-…

【PyTorch攻略(2/7)】 加载数据集

一、说明 PyTorch提供了两个数据原语&#xff1a;torch.utils.data.DataLoader和torch.utils.data.Dataset&#xff0c;允许您使用预加载的数据集以及您自己的数据。数据集存储样本及其相应的标签&#xff0c;DataLoader 围绕数据集包装一个可迭代对象&#xff0c;以便轻松访问…

c++STL案列一评委打分

案例描述 有5名选手:选手ABCDE&#xff0c;10个评委分别对每一名选手打分&#xff0c;去除最高分&#xff0c;去除评委中最低分&#xff0c;取平均分 实现步骤 1.创建五名选手&#xff0c;放到vector中 2.遍历vector容器&#xff0c;取出来每一个选手&#xff0c;执行for循环…

autosar 诊断入门

AUTOSAR (汽车开放系统架构) 是一个国际汽车行业的开放和标准化的软件架构。它的主要目标是为了创建一种独立于硬件的软件架构&#xff0c;以提高汽车电子系统的模块化和可重用性。 AUTOSAR架构主要分为两个部分&#xff1a;AUTOSAR Runtime Environment (RTE) 和 AUTOSAR Soft…

第一百五十一回 自定义组件综合实例:游戏摇杆二

文章目录 内容回顾实现方法位置细节示例代码我们在上一章回中介绍了如何实现 游戏摇杆相关的内容,本章回中将继续介绍这方面的知识.闲话休提,让我们一起Talk Flutter吧。 内容回顾 我们在上一章回中介绍了游戏摇杆的概念以及实现方法,并且通过示例代码演示了实现游戏摇杆的…

用flask框架flask-sock和websocket创建一个自己的聊天界面

WebSocket 协议在10年前就已经标准化了(在2011年&#xff0c;你能相信吗?)所以我相信你不需要介绍。但是如果你不熟悉它&#xff0c;WebSocket 是 HTTP 协议的一个扩展&#xff0c;它在客户端和服务器之间提供了一个永久的、双向的通信通道&#xff0c;在这里双方可以实时地发…

Spring Security :一【权限管理概述、Spring Security 认证与授权】

文章目录 Spring Security一、权限管理概述1.1.什么是认证1.2 什么是授权1.3 授权的数据模型RBAC1.3.1 基于角色的访问控制1.3.2 基于资源的访问控制 1.4 权限管理框架1.4.1 Apache Shiro1.4.2 Spring Security1.4.3 Shiro 和 Spring Security 比较 二、Spring Security 认证与…

Redis学习 - 了解Redis(三)

1. 什么是缓存击穿、缓存穿透、缓存雪崩&#xff1f; 1.1 缓存穿透问题 先来看一个常见的缓存使用方式&#xff1a;读请求来了&#xff0c;先查下缓存&#xff0c;缓存有值命中&#xff0c;就直接返回&#xff1b;缓存没命中&#xff0c;就去查数据库&#xff0c;然后把数据库…

SpringCloud Alibaba 整合Sentinel的基本使用

文章目录 一、什么是Sentinel二、Sentinel 的主要特性1. 流量控制&#xff1a;2. 熔断降级&#xff1a;3. 实时监控&#xff1a;4. 规则配置&#xff1a;5. 集成方便&#xff1a; 三、Sentinel 分为哪几部分:1. 核心库&#xff08;Java 客户端&#xff09;2. 控制台&#xff08…

2023 第十二届中国智能产业高峰论坛 - 文档大模型的未来展望

目录 前言文档图像分析识别与理解中的技术挑战 文档图像分析识别与理解的研究主题文档图像分析与预处理文档解析与识别版面分析与还原文档信息抽取与理解AI安全知识化&存储检索和管理 多模态大模型在文档图像处理中的应用多模态的GPT-4在文档图像上的表现多模态的Google Ba…

IntelliJ IDEA学习总结(3)—— IntelliJ IDEA 常用快捷键(带动图演示)

一、构建/编译 Ctrl + F9:构建项目 该快捷键,等同于菜单【Build】—>【Build Project】 执行该命令后,IntelliJ IDEA 会编译项目中所有类,并将编译结果输出到out目录中。IntelliJ IDEA 支持增量构建,会在上次构建的基础上,仅编译修改的类。 Ctrl + Shift + F9:重新编…

【C++心愿便利店】No.6---C++之拷贝构造函数

文章目录 一、拷贝构造函数的引入二、拷贝构造函数 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到我的乱七八糟小星球&#x1f31d; &#x1f4cb;专栏&#xff1a;C 心愿便利店 &#x1f511;本章内容&#xff1a;拷贝构造函数 记得 评…

Spring boot easyexcel 实现复合数据导出、按模块导出

场景&#xff1a; 导出数据为1对多的复合数据一个模块是一条数据&#xff0c;直接填充数据无法实现 如图&#xff1a; 红框内为一条数据(1对多)&#xff0c;下方箭头指向为第二条数据如果直接填充&#xff0c;只能填充第一条&#xff0c;第二条就没办法了。由于多行都包含许多&…

安卓玩机搞机----不用刷第三方官改固件即可享受“高级设置”的操作 ChiMi安装使用步骤

很多玩友特别喜欢第三方作者修改的带有高级设置的官改包。因为他可以随意修改系统里面的有关设置选项。包括但不限于修改状态栏 显示日期 秒等等的操作。 第三方带高级设置的官改 一般官改带高级设置的类似与 今天给大家分享下不用刷这些官改包即可享受高级设置的操作。 红米…

2023上海工博会,正运动展位现场直击(二)

9月21日&#xff0c;上海工博会已经成功开展了2天&#xff0c;热度仍旧不减&#xff0c;正运动技术展位6.1H-E261不仅吸引了大量工业自动化专业人士&#xff0c;而且也为他们呈现了一系列令人印象深刻的产品和运动控制解决方案。其中&#xff0c;高性能软硬件产品引发了广泛关注…

数据结构入门-14-排序

一、选择排序 1.1 选择排序思想 先把最小的元素拿出来 剩下的&#xff0c;再把最小的拿出来 剩下的&#xff0c;再把最小的拿出来 但是这样 空间复杂度是O(n) 优化一下&#xff0c;希望原地排序 1.1.2 选择原地排序 索引i指向0的位置 索引j指向i1的元素 j 后面的元素遍历&…

使用香橙派学习Linux udev的rules 并实现U盘的自动挂载

在之前编程首先语音刷抖音的博文里提到过udev&#xff0c;现在回顾一下&#xff1a; 什么是udev&#xff1f; udev是一个设备管理工具&#xff0c;udev以守护进程的形式运行&#xff0c;通过侦听内核发出来的uevent来管理/dev目录下的设备文件。udev在用户空间运行&#xff0c;…

macOS Sonoma 14 RC2(23A344)/Ventura13.6/Monterey 12.7 三版系统同时更新

macOS Sonoma 14 RC2&#xff08;23A344&#xff09;/macOS13.6/macOS 12.7 同时更新

冯诺伊曼体系结构和操作系统

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析3 目录 &#x1f449;&#x1f3fb;一、冯诺依曼体系结构概念常见的输入设备和输出设备内…

【数据结构】二叉树之堆的实现

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;数据结构 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、二叉树的顺序结构 &#x1f4d2;1.1顺序存储 &#x1f4d2;1.2堆的性质…