OpenXR+Runtime:Monado Realsense SLAM Tracker解析

先抛出个大问题:
如何实现VIO(visual-inertial odometry)设备使用Monado外接SLAM算法?

这是一个庞大的问题
要实现OpenXR–Monado Runtime–SLAM这条通路在具体VIO device上落地非一朝一夕

通过源码以及Collabora团队的博客可以看到,Monado已在多个硬件设备上进行了适配
但是也仅限于在Linux环境里

运行示例 (SLAM-VIO Tracking for Monado OpenXR):
左上:RealSense D455 (data source)
右上:Basalt SLAM
左下:OpenXR application

 Monado目前对VIO(视觉惯性里程计)设备的适配主要有:
  索尼:PSMV,PSVR
  微软:WinMR
  Intel:Realsense

PSMV,PSVR是Outside-In
WinMR,Realsense是Inside-Out

Visual-inertial tracking for Monado
从Collabora今年4月5号发布的这篇博客可以看到:

1.Monado为了支持外接SLAM算法,对比研究了如今比较流行的三个开源SLAM系统

   (1).Kimera-VIO:有商业许可
           非常有前途的VIO系统,支持一个(单目)或两个(立体)相机和IMU一起操作,
           但是并没有得到good result
           (不清楚是没有调通还是没有得到太好的result)

   (2).ORB-SLAM3: 没有商业许可
           SLAM理论实现的第三次迭代,评价很高,当今最为流行。
           可以在几乎任何传感器配置下运行,从纯单目(无IMU)SLAM 到全立体IMU SLAM,
           实测结果可用,tracking运行良好

   (3).Basalt:有商业许可
          主要支持立体声配置,足够灵活,速度惊人,非常适合 XR 等实时应用程序。
          ORB-SLAM3 也不错,但ORB-SLAM3的强项似乎在于处理预先记录的数据集。
          Basalt 不仅速度非常快,源代码逻辑清晰,是软件工程思想的良好体现

另外还有ProSLAM、OpenVINS、RTAB-Map 和 HybVIO暂时没有进行研究。

2.通过研究三个SLAM算法,monado实现了一个标准头文件:slam_tracker.hpp

  (1).这个标准头文件将这些SLAM算法与Monado进行集成

  (2).每个SLAM系统都需要对该头文件实现一个Adapter
  这个Adapter衔接Monado和SLAM系统内每一个package pipeline的input和output

  (3).在实现过程中,需要具备系统pipelines的状态控制和一些队列机制的知识

  (4).在Monado中,一个核心SLAM Tracker类负责与Adapter交互,
  并实现通用的额外功能(例如,姿势预测)

  (5).流程打通后
  只需Camera和 IMU 硬件的驱动程序将其数据流传输给SLAM Tracker类就行了

流程图如下:
OpenXR+Runtime:Monado Realsense SLAM Tracker解析_第1张图片

3.RealSense驱动程序的实现,比WinMR要好一些
  (可能也是因为RealSense比WinMR设备要更简单一些) 

 左: Samsung Odyssey+
 右: Intel RealSense D455

OpenXR+Runtime:Monado Realsense SLAM Tracker解析_第2张图片

废话不多说了
下面就以一张较为粗略的代码流程图呈现 Realsense 在Monado中是如何衔接外部SLAM的

以后非必要不再以贴代码的方式来呈现了
上图简洁又明了,逻辑也一目了然 

从流程图中可以看到
最终会走到一个比较重要的函数:t_slam_create( )

这个函数里包含了slam_tracker具体实现的重要参数、结构体、函数和基本步骤
下面再上一张t_slam_create( )函数的详解图:

Monado中设备衔接外部SLAM的代码还涉及到具体设备的驱动程序,
以及其他一些较为复杂的实现逻辑

目前看源码跟到的也只是其中很小的一部分,
后续还会持续跟踪,逐步完善补充

你可能感兴趣的:(xr,算法,ai,c++,android)