实时密集视觉SLAM系统
github地址:
https://github.com/mp3guy/ElasticFusion

视觉SLAM(Simultaneous Localization and Mapping,同步定位与建图)系统是一种利用相机和其他传感器(如激光雷达)进行环境建模和位置定位的技术。在无需GPS信号的室内外环境中,SLAM系统能够帮助移动机器人或设备进行自主导航和地图构建。
SLAM系统的关键组成部分:
1. 传感器:通常包括相机、激光雷达(Lidar)、惯性测量单元(IMU)等,用于感知和测量环境。
2. 处理单元:用于处理传感器数据,执行算法以实现定位和建图。
3. 软件算法:SLAM算法是核心,能够处理传感器的输入,实现定位和地图的并行更新。

弹性融合
实时密集视觉 SLAM 系统能够捕获使用 RGB-D 相机探索的房间规模环境的全面密集全局一致的基于面元的地图。
Xorg 上的 Ubuntu 22.04、NVIDIA 驱动程序 510.73.05、CUDA 驱动程序 11.6、CUDA 工具包 11.5(基本上是 Ubuntu 存储库中的任何内容)。
sudo apt install -y cmake-qt-gui git build-essential libusb-1.0-0-dev libudev-dev openjdk-11-jdk freeglut3-dev libglew-dev libsuitesparse-dev zlib1g-dev libjpeg-dev
git clone https://github.com/mp3guy/ElasticFusion.git
cd ElasticFusion/
git submodule update --init
cd third-party/OpenNI2/
make -j8
cd ../Pangolin/
mkdir build
cd build
cmake .. -DEIGEN_INCLUDE_DIR=$HOME/ElasticFusion/third-party/Eigen/ -DBUILD_PANGOLIN_PYTHON=false
make -j8
cd ../../..
mkdir build
cd build/
cmake ..
2.我该如何使用它?
回购中有两个子项目:
Core是构建到共享库中的主引擎,您可以将其链接到其他项目并像 API 一样对待。
用于在实时传感器数据或记录的数据文件上运行系统的图形界面的工具。
从命令行启动可执行文件 ( ElasticFusion ) 时可以采用一堆参数。它们如下:
-cal :加载指定为fx fy cx cy的相机校准文件。
-l:处理指定的 .klg 日志文件。
-p:加载地面真实姿势以代替估计姿势。
-c:Surfel 置信度阈值(默认10)。
-d:深度处理的截止距离(默认3 m)。
-i:相对 ICP/RGB 跟踪权重(默认10)。
-ie:局部环路闭合残差阈值(默认5e-05)。
-ic:本地环路闭合内点阈值(默认35000)。
-cv:局部闭环协方差阈值(默认1e-05)。
-pt:全局闭环光度阈值(默认115)。
-ft:Fern 编码阈值(默认0.3095)。
-t:时间窗口长度(默认200)。
-s:在日志开始时跳过的帧。
-e : 切断日志的框架。
-f:翻转 RGB/BGR。
-icl :如果使用ICL-NUIM数据集,则启用此选项(翻转法线以考虑该数据的负焦距)。
-o:开环模式。
-rl:启用重定位。
-fs:如果处理日志以模拟实时,则跳过帧。
-q:完成日志后退出。
-fo:快速里程计(单级金字塔)。
-nso:在跟踪中禁用 SO(3) 预对齐。
-r:倒回并永远循环日志。
-ftf:进行逐帧 RGB 跟踪。
-sc:展示模式(最小 GUI)。
基本上默认情况下./ElasticFusion将尝试实时运行连接的华硕传感器。您可以使用 -l 参数提供 .klg 日志文件。您可以使用Logger1或Logger2捕获 .klg 格式的日志。
3. 如何使用Core API?
由 Core 构建的 libefusion.so 共享库是您想要链接的库。
要使用 Core API,请确保在源文件中包含头文件:
#include <ElasticFusion.h>
在程序开始时的某个地方初始化静态配置参数:
Resolution::getInstance(640, 480);
Intrinsics::getInstance(528, 528, 320, 240);
在创建 ElasticFusion 对象之前创建 OpenGL 上下文,因为 ElasticFusion 在内部使用 OpenGL。你可以用任何你想要的方式来做到这一点,使用 Pangolin 可能是最简单的,因为它是一个依赖项:
pangolin::Params windowParams;
windowParams.Set("SAMPLE_BUFFERS", 0);
windowParams.Set("SAMPLES", 0);
pangolin::CreateWindowAndBind("Main", 1280, 800, windowParams);
创建一个 ElasticFusion 对象并开始使用它:
ElasticFusion eFusion;
eFusion.processFrame(rgb, depth, timestamp, currentPose, weightMultiplier);
查看MainController.cpp的源代码以了解更多用法。
4. 数据集
我们提供了一个示例数据集,您可以使用 ElasticFusion 轻松运行该数据集,并可在此处下载。按如下方式启动它:
./ElasticFusion -l dyson_lab.klg

视觉SLAM系统获得的地图主要包含以下特点:
1. 稀疏性 :与激光雷达建图相比,视觉SLAM系统生成的地图通常较为稀疏,它主要依赖于图像中的特征点进行建图。
2. 环境语义信息 :视觉SLAM系统能够识别并保留环境中的语义信息,如物体、家具等。
3. 实时性 :视觉SLAM系统可以实时地更新地图和定位,适用于需要实时导航的场景。
4. 成本效益:视觉SLAM系统主要使用摄像头作为传感器,成本较低,适用于许多预算有限的工程项目。
5. 适应性 :视觉SLAM系统可以适应不同的环境,如室内、室外、大场景、小场景等。
然而,视觉SLAM系统生成的地图在精度上可能略低于激光雷达建图,对于一些对精度要求较高的应用场景,可能需要结合激光雷达或其他高精度传感器来进行优化。
实时密集视觉SLAM系统
github地址:
https://github.com/mp3guy/ElasticFusion
我们收集了10000+开源项目 点击 阅读原文

