XIVO在存储数据(此处来自RealSense D435i传感器)或实时流上以140FPS运行,延迟大约为1-7ms,具体取决于硬件。它从已标定地相机输入视频帧和从IMU进行惯性测量,并输出具有属性特征和相机6自由度位姿的稀疏点云。它执行相机和IMU之间相对姿势的自动校准以及时间戳对齐。此处提供了更多演示,这篇论文介绍了该方法。XIVO不执行事后细化(集束调整,位姿图优化),但可以轻松添加为后处理。
XIVO是一个视觉惯性里程计/建图的开源仓库。它是Corvis [Jones et al.,Tsotsos et al.]的简化版本,专为教学目的而设计,并结合了里程计(传感器平台的相对运动),局部建图(相对于最古老的可见特征的参考帧的位姿)和全局建图(相对于全局坐标系的位姿,包括回环检测和全局重定位,这个特性存在于Corvis中,尚未包含在XIVO中)。
Corvis针对速度进行了优化,能在商用笔记本电脑上以200 FPS的速度运行,而XIVO优先考虑可读性,以140 FPS的速度运行。XIVO融合了Corvis的大部分核心功能,包括当前位置的3D结构,作为短期记忆;它执行自动标定(相机相对于IMU的位姿和时间戳移位)。它要求相机具有标定的内参,可以在使用Corvis或XIVO之前使用任何开源软件包(如OpenCV)获得。Corvis和XIVO需要时间戳,可以通过ROS驱动程序完成。有关如何格式化数据以供实时使用的详细信息,请参阅ROS消息接口(imu,image)。
我们提供了几种记录序列,并能够以批处理模式离线运行XIVO,以便与其他方法进行比较。注意,这些方法中的一些以非因果方式操作,通过相对于关键帧执行批量优化,或者以滑动窗口模式,引入捕获延迟。XIVO是因果关系,仅处理收到的最后一个图像帧。视觉更新的延迟(捕获瞬间和执行状态更新之间的时间间隔)大约为7毫秒,具体取决于所使用的硬件。基于惯性测量的更新取决于集成方案,默认选择约为1ms。
Corvis自2005年以来一直在开发[Jones et al.],其贡献者包括Eagle Jones [ijrr11],Konstantine Tsotsos [icra15]和Xiaohan Fei [cvpr17,eccv18,icra19]。如果您使用此代码或提供的任何数据集,请引用[Fei et al.]致谢。
虽然SLAM产生的“地图”由稀疏的属性点特征组成,但只能用于定位,其属性足以在图像中进行检测,而XIVO已被用作语义建图的组件[Dong et al.,Fei等人],场景由物体组成,以密集的表面为界。可以在此处找到使用XIVO进行语义建图的研究代码。
此处省略,请参看原文。
该软件在Ubuntu 16.04和18.04上使用编译器g++ 7.4.0构建和测试。移植到不同平台相对容易,但在此仓库中未解决。
依赖关系包含在thirdparty
目录中。
要在Ubuntu 18.04中构建,请在项目的根目录中执行build.sh
脚本。
有关该软件的详细用法,请参阅wiki。
当前实现支持两种执行模式:
此处描述了图像序列和文本文件的格式。这里描述了ROS消息的格式(imu,image)。
我们提供Tango平台记录的几个序列。以VGA(640×480)的尺寸和30Hz的频率记录图像,并以200Hz的频率记录惯性测量。您可以在此处下载序列作为压缩文件(.tar.gz)或ROS bag(.bag)。
将数据作为压缩的.tar.gz
文件下载后,将其解压缩到您选择的目录中,并将环境变量$DATAROOT
设置为该目录,如下所示:
export DATAROOT=/DIRECTORY/OF/YOUR/CHOICE
注意:$DATAROOT
目录应包含以此处描述的格式构建的数据集。
从项目根目录,运行带有由data9_workbench
序列选项-cfg cfg / vio.json
指定的配置的估计器(选项-seq data9_workbench
),该序列位于目录$DATAROOT
(选项-root $DATAROOT
)中,如下所示:
bin/vio -cfg cfg/vio.json -root $DATAROOT -seq data9_workbench -out out_state -dataset xivo
估计状态保存到输出文件out_state
。
有关应用程序的详细用法,请参阅应用程序源文件src/app/vio.cpp
开头定义的标志。
我们使用glog进行系统日志记录。如果要将运行时信息记录到文本文件以供日后检查,请首先创建一个用于保存日志的目录.
mkdir /YOUR/LOG/DIRECTORY/HERE
然后运行带有前缀的估计器来指定日志目录:
GLOG_log_dir=/YOUR/LOG/DIRECTORY/HERE bin/vio -cfg cfg/vio.json -root $DATAROOT -seq data9_workbench -out out_state -dataset xivo
注意:默认情况下,为了运行速度,通过在src/CMakeLists.txt
中设置add_definitions(-DGOOGLE_STRIP_LOG = 1)
来关闭日志。要启用日志,只需注释掉该行并重新构建。
有关glog的更多详细信息,请参阅此处的教程。
默认情况下,如果您的操作系统没有安装ROS,则不会构建系统的ROS节点。
但是,如果要使用支持ROS的系统,则需要先安装ROS(请参阅此处的说明),然后在生成 makefile 时打开BUILD_ROSNODE
选项:在项目根目录的build
目录中,执行以下操作:
cmake .. -DBUILD_ROSNODE=ON
接下来使用make
以构建ROS支持。
1.在项目根目录中,source build/devel/setup.zsh
。如果使用另一个shell,例如bash/sh,则分别source相应的shell脚本(setup.bash / setup.sh)。
2.执行roslaunch node/launch/xivo.launch
启动ros节点,订阅/imu0
和/cam0/image_raw
话题。
3.在另一个终端,播放您选择的rosbag,即rosbag play /PATH/TO/YOUR/ROSBAG
。
通过pybind11包装估计器的一些公共接口,提供了一个简单的python绑定。查看pybind11/pyxivo.cpp
以获取python中的可用接口。使用pybind11,如果要将更多C ++实现的接口暴露给python,则相对容易。
脚本/pyxivo.py
中提供了使用Python绑定的示例,它演示了python中的估计器创建,数据加载和可视化。
要运行演示,请在项目根目录中执行:
python scripts/pyxivo.py -cfg cfg/phab.json -root $DATAROOT -seq data9_workbench -dataset xivo -use_viewer
命令行选项或多或少与C ++可执行文件相同。有关详细用法,您可以查看脚本scripts/pyxivo.py
开头定义的选项。注意,您可能需要通过在项目根目录中执行以下命令来安装一些python依赖项:
pip install -r requirements.txt
我们根据ATE(绝对轨迹误差),RPE(相对位姿误差)和计算成本,在公开可用的数据集上,对其他表现最佳的开源实现,即OKVIS [Leutenegger et al.],VINS-Mono [Qin et al.]和ROVIO [Bloesch et al.],对我们系统的性能进行基准测试。我们的实现在计算成本的一小部分上实现了可比较的精度。在配备Intel Core i7 CPU @ 3.6 GHz的台式PC上,我们的系统以低CPU消耗率运行在140 Hz左右。作为对比,OKVIS和VINS-Mono的运行频率约为20 Hz,ROVIO的运行频率约为60 Hz。通过更好地利用CPU缓存和内存,可以进一步提高系统的运行时间。
OKVIS和VINS-Mono是基于优化的,这意味着它们以迭代方式在关键帧上运行,这通常导致更准确的姿态估计,代价是更高的延迟和计算成本。ROVIO和XIVO都是基于滤波的,这在计算成本方面是因果关系并且少得多。然而,它们产生的位姿估计与基于优化的方法相当。
此外,OKVIS运行立体(双目?)图像,而其他三种方法仅使用单目图像。
我们在配备Intel Core i7 CPU @ 3.6 GHz的台式机上对OKVIS,VINS-Mono,ROVIO和XIVO的运行时间进行了基准测试。下表显示了特征处理和状态更新模块的运行时间。
ROVIO是一种“直接”方法,可跳过特征匹配步骤,并直接将光度误差用作EKF更新步骤中的创新术语(innovation term)。由于它使用迭代扩展卡尔曼滤波器(IEKF)进行状态更新,因此它比我们基于EKF的方法慢。
OKVIS和VINS-Mono(用关键帧标记)在关键帧上执行迭代非线性最小二乘以进行状态估计,因此在状态更新步骤中要慢得多。
我们在两个公开可用的数据集上比较了我们系统在ATE和RPE方面的表现:TUM-VI和EuRoC。我们以最高性能开源实现的计算成本的一小部分实现了可比较的位姿估计精度。
下表显示了可获得真值(ground-truth)的6个室内序列的性能。OKVIS,VINS-Mono和ROVIO的数据取自TUM-VI基准论文。可以在misc/run_all.sh
中找到XIVO的评估脚本。
EuRoC数据集的基准测试结果即将推出。
该软件是UC Regents的财产,仅供研究之用。根据这些条款和条件,它不提供任何明示或暗示的保证。如需商业用途,请联系加州大学洛杉矶分校TDG。
如果您使用此代码的任何部分或提供的数据集,请通过引用以下内容来致谢此存储库:
@article{fei2019geo,
title={Geo-supervised visual depth prediction},
author={Fei, Xiaohan and Wong, Alex and Soatto, Stefano},
journal={IEEE Robotics and Automation Letters},
volume={4},
number={2},
pages={1661–1668},
year={2019},
publisher={IEEE}
}
Github:https://github.com/ucla-vision/xivo