#vision #slam #odometry #rgbd

bin+lib visual-odometry-rs

Rust中的视觉里程计(vors)

1个不稳定版本

0.1.0 2019年3月25日

机器人类别中排名第118

MPL-2.0 许可证

115KB
2K SLoC

Rust中的视觉里程计(vors)

该仓库提供名为visual-odometry-rs的库(Rust中的"crate"),简称vors,以及名为vors_track的二进制程序,用于相机跟踪("视觉里程计")。

该程序适用于遵循TUM RGB-D数据集格式的数据集。它大约有一百行代码(见src/bin/vors_track.rs),基于此处提供的visual-odometry-rs crate构建。

一旦克隆了这个仓库,可以直接使用cargo运行二进制程序vors_track,如下所示

cargo run --release --bin vors_track -- fr1 /path/to/some/freiburg1/dataset/associations.txt

有关运行二进制程序vors_track的数据集要求的更多信息,请查看mpizenberg/rgbd-tracking-evaluation

该库围绕四个基本命名空间组织

  • core:: 核心模块,用于计算梯度、候选点、相机跟踪等。
  • dataset:: 处理特定数据集的辅助模块。目前仅提供TUM RGB-D兼容数据集的模块。
  • math:: 提供诸如so3、se3的李代数和迭代优化器特质等未由nalgebra提供的功能的基本数学模块。
  • misc:: 用于互操作性、可视化和其他尚未适合其他地方的辅助模块。

库使用示例

API使用的自包含示例位于examples/目录中。那里还有一个readme文件,其中包含有关这些示例的更详细说明。

功能和视觉

目前,vors为直接RGB-D相机跟踪提供了一个视觉里程计框架。从头开始设置这一切花费了很多时间和精力,但我认为它已经足够成熟,可以以现在的形式共享。然而,请注意,API正在快速发展。我的希望是,在不久的将来,我们可以通过在研究扩展和平台可用性方面开展工作来扩大这个项目的范围。

示例研究扩展

  • 使用视差搜索进行深度初始化,以兼容RGB(无深度)相机。
  • 在残差中添加一个光度项来解释自动曝光变化。
  • 添加自动光度学和/或几何相机标定。
  • 构建一个类似于DSO的滑动窗口关键帧优化,以减少漂移。
  • 集成回环和位姿图优化,以拥有一个稳健的vSLAM系统。
  • 与IMU融合以提高跟踪并减少尺度漂移。
  • 将滚动快门(在大多数相机中)建模为优化问题。
  • 扩展到立体相机。
  • 扩展到全景相机。

示例平台扩展

  • 制作一个C FFI,以便能够在具有C驱动程序的系统(kinect、realsense等)上运行。
  • 使用WebAssembly将其移植到Web上。
  • 将其移植到ARM,以便在嵌入式系统和手机上运行。

背景故事

最初,这个存储库作为Rust中计算机视觉的个人实验沙盒。例如,请参阅我关于rust 论坛Reddit频道的原始问题。事实证明,我一开始有些吃力,但后来非常喜欢Rust的方式,与C++相比。

正如其名所示,现在的重点是视觉里程计,特别是直接视觉里程计的最近研究领域。Waterloo自动驾驶车辆实验室的这些讲义提供了合理的介绍。

特别地,这个项目最初旨在通过使用Rust编程语言的所有优点来改进J. Engel等人的DSO工作,包括

  • 在不牺牲代码可读性的情况下提高性能
  • 没有内存错误,并且代码安全性和可靠性更高
  • 友好的工具生态系统,没有依赖性问题,基本上是一行编译和运行
  • 最佳工具,用于使用WebAssembly移植到Web上
  • 用于移植到嵌入式系统的资源和指导
  • 美好的社区

许可(MPL-2.0)

此源代码形式受Mozilla公共许可证第2.0版本的条款约束。如果没有与文件一起分发MPL副本,您可以在此获得一个:http://mozilla.org/MPL/2.0/

贡献

欢迎所有形式的贡献,最好首先作为github issues

  • 问题
  • 文档
  • 测试
  • 基准
  • 功能

如果对源代码做出贡献,则需要使用rustfmtclippy。要运行clippy

touch src/lib.rs; cargo clippy --release --all-targets --all-features

依赖关系

~17MB
~180K SLoC