实时密集视觉 SLAM 系统能够仅使用低成本的商用 RGB-D 传感器即可实时生成数百米范围内的高质量全局一致的点和网格重建。
如果您在自己的任何活动中使用我们的系统,请引用这些作品中最合适的作品(按照我们的偏好顺序):
- 具有体积融合的实时大规模密集 RGB-D SLAM, T. Whelan、M. Kaess、H. Johannsson、MF Fallon、JJ Leonard 和 JB McDonald,IJRR '14
- 用于大规模密集 RGB-D SLAM 的基于变形的环路闭合, T. Whelan、M. Kaess、JJ Leonard 和 JB McDonald,IROS '13
- 用于密集 RGB-D 映射的鲁棒实时视觉里程计, T. Whelan、H. Johannsson、M. Kaess、JJ Leonard 和 JB McDonald,ICRA '13
- Kintinious:空间扩展 KinectFusion、 T. Whelan、M. Kaess、MF Fallon、H. Johannsson、JJ Leonard 和 JB McDonald、RSS RGB-D Workshop '12
- 用于绘制环境图的方法和系统, T. Whelan、M. Kaess、JJ Leonard 和 JB McDonald,US 9412173 B2
- Ubuntu 14.04、15.04 或 16.04(尽管许多其他 Linux 发行版也可以正常工作)
- CMake
- OpenGL
- CUDA >= 7.0
- OpenNI2
- 稀疏套件
- 本征
- 促进
- 兹库
- 库文件
- 开放式计算机视觉
- DLib @330bdc10576f6bcb55e0bd85cd5296f39ba8811a
- DBoW2 @ 4a6eed2b3ae35ed6837c8ba226b55b30faaf419d
- DLoopDetector @84bfc56320371bed97cab8aad3aa9561ca931d3f
- 是
- 聚己内酯
- 穿山甲
首先,将nVidia 的官方 CUDA 存储库添加到您的 apt 源中,然后运行以下命令从官方存储库中提取大多数依赖项:
sudo apt-get install -y cmake-qt-gui git build-essential libusb-1.0-0-dev libudev-dev openjdk-7-jdk freeglut3-dev python-vtk libvtk-java libglew-dev cuda-7-5 libsuitesparse-dev openexr
这就是事情变得非常糟糕的地方。由于库不断更改其 API 和包含内容,因此在几个 Ubuntu 版本之间创建实际上持续几个月以上的构建过程非常困难。以下是针对 Ubuntu 14.04、15.04 和 16.04 的单独说明。
14.04
从此 PPA 安装 PCL 1.7:
sudo add-apt-repository -y ppa:v-launchpad-jochen-sprickerhof-de/pcl sudo apt-get update sudo apt-get install -y libpcl-all
然后按顺序从源代码安装OpenCV、DLib、DBoW2、DLoopDetector、iSAM和Pangolin 。
为什么必须从源代码安装 OpenCV?因为 Ubuntu 存储库中的版本没有 DBoW2 中使用的 SURF 描述符所需的非自由模块。另外,强烈建议您使用以下选项构建 OpenCV(特别是使用 Qt5 构建它可能会带来很多痛苦):
cmake -D BUILD_NEW_PYTHON_SUPPORT=OFF -D WITH_OPENCL=OFF -D WITH_OPENMP=ON -D INSTALL_C_EXAMPLES=OFF -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D WITH_QT=OFF -D WITH_OPENGL=OFF -D WITH_VTK=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF ..
如果您在构建 Pangolin 时遇到问题,请使用以下 CMake 命令禁用 ffmpeg 支持:
cmake .. -DAVFORMAT_INCLUDE_DIR=""
完成后,您将拥有构建 Kintinously 所需的一切。
15.04
15.04 PCL 位于官方仓库中:
sudo apt-get install -y libpcl-dev yasm libvtk5-qt4-dev
15.04 存储库中的 PCL 版本不包含 OpenNI2。您应该构建 Occipital 维护版本,可在此处获取。
和往常一样,ffmpeg 在 15.04 中把事情搞砸了。您需要自己构建 ffmpeg,否则 OpenCV 将无法构建。为什么必须从源代码安装 OpenCV?因为 Ubuntu 存储库中的版本没有 DBoW2 中使用的 SURF 描述符所需的非自由模块。为什么不能使用OpenCV3?因为 DBoW 将无法构建。为什么不能在 OpenCV 的构建中禁用 ffmpeg?因为如果没有构建视频模块,DBoW将会失败。构建并安装 ffmpeg,如下所示:
git clone git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg/
git reset --hard cee7acfcfc1bc806044ff35ff7ec7b64528f99b1
./configure --enable-shared
make -j8
sudo make install
sudo ldconfig
然后使用以下选项构建OpenCV :
cmake -D BUILD_NEW_PYTHON_SUPPORT=OFF -D WITH_OPENCL=OFF -D WITH_OPENMP=ON -D INSTALL_C_EXAMPLES=OFF -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D WITH_QT=OFF -D WITH_OPENGL=OFF -D WITH_VTK=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF ..
最后,按顺序从源代码构建DLib、DBoW2、DLoopDetector、iSAM和Pangolin 。如果您在构建 Pangolin 时遇到问题,请使用以下 CMake 命令禁用 ffmpeg 支持:
cmake .. -DAVFORMAT_INCLUDE_DIR=""
之后,您将能够构建 Kintinous。
16.04
15.04 的说明将正常工作,除非您无法使用 PCL 的 apt 版本,因为有人搞砸了 vtk。因此,如果您从 apt 安装了它,请确保完全清除/删除它,然后手动构建它;
sudo apt-get install g++ cmake cmake-gui doxygen mpi-default-dev openmpi-bin openmpi-common libflann-dev libeigen3-dev libboost-all-dev libvtk5-qt4-dev libvtk6.2 libvtk5-dev libqhull* libusb-dev libgtest-dev git-core freeglut3-dev pkg-config build-essential libxmu-dev libxi-dev libusb-1.0-0-dev graphviz mono-complete qt-sdk openjdk-7-jdk openjdk-7-jre git clone https://github.com/PointCloudLibrary/pcl.git cd pcl mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_GPU=OFF -DBUILD_apps=OFF -DBUILD_examples=OFF .. make -j8 sudo make install sudo ldconfig
之后,Kintinious 应该可以毫无问题地链接。
可以理解的是,构建所有依赖项似乎相当复杂。如果您在全新安装的 Ubuntu 14.04 或 15.04 上运行build.sh脚本,请输入 sudo 密码几次,然后等待几分钟,所有依赖项都会下载并安装,并且应该正确构建所有内容。除了全新安装之外,这还没有经过任何测试,因此如果您已经安装了一些依赖项,我建议您谨慎使用它。
有四个构建目标:
- libutil.a是一小组实用程序类。
- libfrontend.a是主要的跟踪和融合组件。
- libbackend.a包含三角剖分、闭环和变形组件。
- Kintinous是一个用于运行系统的可执行 GUI。
从命令行启动时,GUI ( Kintinously ) 可以采用一堆参数。它们如下:
- -c:加载由以下任一指定的相机校准文件:
- OpenCV 格式的 height_intrinsics 矩阵(以 .yml、.xml 结尾),或
- 包含 [fx fy cx cy] 或 [fx fy cx cy wh] 的文本文件
- -l:处理指定的 .klg 日志文件。
- -v:加载 DBoW 词汇文件。
- -p:加载地面真实姿势以代替估计姿势。
- -gpu:设置 CUDA 应使用哪个 GPU。
- -n:要处理的帧数。
- -t:体积移动的体素阈值(默认14)。
- -cw:提取切片时删除低于此阈值的体素(默认8)。
- -lt:禁止在最后一个时间段(默认30秒)内关闭循环。
- -s:融合体积的大小(默认6 m)。
- -dg:变形姿势采样率(默认0.8 m)。
- -il:RANSAC 的内部阈值(默认0.35)。
- -it:位姿图优化的剩余阈值(默认10)。
- -sm:静态模式(禁用音量切换)。
- -f:翻转 RGB/BGR。
- -od:执行在线变形(闭环所需)。
- -m:启用网格生成。
- -no:禁用提取切片的重叠。
- -nos:保存地图时删除重叠。
- -r:仅使用 RGB 跟踪。
- -ri:使用 ICP+RGB 组合跟踪。
- -d:启用动态立方体定位。
- -dc:禁用按角度进行颜色加权。
- -fl:子采样姿态图以加快闭环速度。
- -fod:启用快速里程计。
本质上默认情况下./Kintinously将尝试实时运行连接的华硕传感器。您可以使用 -l 参数提供 .klg 日志文件。您可以使用Logger1或Logger2捕获 .klg 格式的日志。
我们提供了一个示例数据集,您可以使用 Kintinously 轻松运行该数据集,并可在此处下载。按如下方式启动它:
./Kintinuous -s 7 -v ../vocab.yml.gz -l loop.klg -ri -fl -od
仅允许非商业目的使用此存储库中的代码以及构成 Kintinously 软件的文件中的所有代码。除非明确说明,否则适用于此存储库中的代码的完整条款和条件在 LICENSE.txt 文件和http://www.cs.nuim.ie/research/vision/data/kintinously/code.php中有详细说明。通过访问此存储库,您同意遵守这些条款。
如果您希望将此代码用于商业目的,请发送电子邮件至[email protected]。
版权所有 (C) 2015 爱尔兰国立梅努斯大学和麻省理工学院。
硬件要求是什么?
快速的 nVidia GPU (1TFLOPS+)和快速的 CPU(类似于 i5)。如果您想使用非 nVidia GPU,那您就不走运了。
前端跑得很快,但是地图好像落后了
这是因为你的 CPU 速度很慢。后端完全在 CPU 上运行,并且必须处理从前端提取的每个点。这意味着如果您的地图非常大,或者您移动得非常快,后端可能无法跟上。此外,在启用循环闭合时打开网格划分会占用大量 CPU 资源,但快速的现代处理器将实时处理此问题。
我保存了地图,如何查看?
下载Meshlab,它可以读取 .ply 文件。如果您只保存点云,则需要使用 PCL 的查看器来查看 .pcd 文件。
地图不断损坏 - 跟踪失败 - 闭环不正确/不起作用
首先,如果您正在实时运行并且不处理日志文件,请确保达到 30Hz,这很重要。其次,您无法极快地移动传感器,因为这违反了投影数据关联背后的假设。除此之外,您可能正在使用 primesense,这意味着您会遭受运动模糊、相机不同步和滚动快门的困扰。所有这些都会因快速运动而加剧并阻碍跟踪性能。
如果你没有得到闭环并且期望得到一些闭环,或者得到错误的闭环,那么你就会受到 DBoW 的摆布。您可以调整一些与之相关的参数,但总的来说,您受到基于外观的地点识别的典型限制的限制。随意拼接在不同的地方识别方法。顺便说一句,ElasticFusion更适合非常循环的全面扫描,这可能更适合您的应用程序。
如果您在循环闭合期间注意到一些奇怪的切片效果,请减小体积大小或通过减小-dg参数来提高变形中姿势采样的速率。
有ROS桥/节点吗?
不会。事实上,如果您安装了 ROS,您可能会遇到一些真正可怕的构建问题。
这似乎不像视频/论文中那样有效
为了开源该系统,进行了大量的重构,包括重写许多功能以避免某些许可证。尽管在此过程中非常小心,但有可能引入了性能回归但尚未被发现。