文章目录
- Openvslam 学习报告
- 什么是Openvslam
- 概念
- 特点
- 安装和运行OpenVSLAM
- 克隆源代码
- 安装依赖库
- 测试(环境已经安装成功)
- 运行
- 运行失败的总结
- 运行成功
- 系统设计
- 模块和函数接口
- 调用流程
- 流程图
- 参考资料
Openvslam 学习报告
什么是Openvslam
概念
OpenVSLAM(Visual SLAM)是一个开源的视觉定位与地图构建(Visual Simultaneous Localization and Mapping,Visual SLAM)库。它旨在通过使用单目相机、双目相机、RGB-D相机或者其他传感器,实现实时的相机定位和地图构建。Visual SLAM 是一种技术,可以使机器(例如机器人、车辆或者无人机)在未知环境中通过感知视觉信息,实时地进行定位和建立地图。使开发者能够利用相机捕获的图像数据来定位相机自身并创建环境地图。它结合了特征提取、特征匹配、姿态估计、地图构建等核心技术,以实现准确和实时的相机定位和地图构建。
特点
- 多传感器的支持
- 实时性能
- 开源
- 易用
安装和运行OpenVSLAM
克隆源代码
git clone https://github.com/lp-research/openvslam
安装依赖库
- 安装Ubuntu系统依赖
sudo apt update -y
sudo apt upgrade -y --no-install-recommends
# basic dependencies
sudo apt install -y build-essential pkg-config cmake git wget curl unzip
# g2o dependencies
sudo apt install -y libatlas-base-dev libsuitesparse-dev
# OpenCV dependencies
sudo apt install -y libgtk-3-dev
sudo apt install -y ffmpeg
sudo apt install -y libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libavresample-dev
# eigen dependencies
sudo apt install -y gfortran
# other dependencies
sudo apt install -y libyaml-cpp-dev libgoogle-glog-dev libgflags-dev# (if you plan on using PangolinViewer)
# Pangolin dependencies
sudo apt install -y libglew-dev
- 安装Eigen矩阵库
cd /Desktop/study/dir
wget -q http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2
tar xf 3.3.4.tar.bz2
rm -rf 3.3.4.tar.bz2
cd eigen-eigen-5a0156e40feb
mkdir -p build && cd build
cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local \..
make -j4
sudo make install
- 安装OpenCV库
cd /Desktop/study/dir
wget -q https://github.com/opencv/opencv/archive/3.4.0.zip
unzip -q 3.4.0.zip
rm -rf 3.4.0.zip
cd opencv-3.4.0
mkdir -p build && cd build
cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local \-DENABLE_CXX11=ON \-DBUILD_DOCS=OFF \-DBUILD_EXAMPLES=OFF \-DBUILD_JASPER=OFF \-DBUILD_OPENEXR=OFF \-DBUILD_PERF_TESTS=OFF \-DBUILD_TESTS=OFF \-DWITH_EIGEN=ON \-DWITH_FFMPEG=ON \-DWITH_OPENMP=ON \..
make -j4
sudo make install
- 安装DBoW2
cd /Desktop/study/dir
git clone https://github.com/shinsumicco/DBoW2.git
cd DBoW2
mkdir build && cd build
cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local \..
make -j4
sudo make install
- 安装g2o
cd /Desktop/study/dir
git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
git checkout 9b41a4ea5ade8e1250b9c1b279f3a9c098811b5a
mkdir build && cd build
cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local \-DCMAKE_CXX_FLAGS=-std=c++11 \-DBUILD_SHARED_LIBS=ON \-DBUILD_UNITTESTS=OFF \-DBUILD_WITH_MARCH_NATIVE=ON \-DG2O_USE_CHOLMOD=OFF \-DG2O_USE_CSPARSE=ON \-DG2O_USE_OPENGL=OFF \-DG2O_USE_OPENMP=ON \..
make -j4
sudo make install
- 安装Pangolin库
cd /Desktop/study/dir
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
git checkout ad8b5f83222291c51b4800d5a5873b0e90a0cf81
mkdir build && cd build
cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local \..
make -j4
sudo make install
- 编译源码
cd /Desktop/study/openvslam
mkdir build && cd build
cmake \-DBUILD_WITH_MARCH_NATIVE=ON \-DUSE_PANGOLIN_VIEWER=ON \-DUSE_SOCKET_PUBLISHER=OFF \-DUSE_STACK_TRACE_LOGGER=ON \-DBOW_FRAMEWORK=DBoW2 \-DBUILD_TESTS=ON \..
make -j4
测试(环境已经安装成功)
运行
运行失败的总结
爆红是我改过代码之后的输出。可能是爆内存了。听取老师的建议后我租了服务器。并且通过查阅资料,发现可以使用Docker一键安装。
运行成功
$ docker pull celinachild/openvslam:latest$ docker run --gpus all -it --ipc=host --net=host --privileged -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw -e NVIDIA_DRIVER_CAPABILITIES=all celinachild/openvslam# for mapping
$ ./run_video_slam -v ./orb_vocab/orb_vocab.dbow2 -m ./aist_living_lab_1/video.mp4 -c ./aist_living_lab_1/config.yaml --no-sleep --map-db map.msg# for localization
$ ./run_video_localization -v ./orb_vocab/orb_vocab.dbow2 -m ./aist_living_lab_2/video.mp4 -c ./aist_living_lab_2/config.yaml --no-sleep --map-db map.msg
系统设计
OpenVSLAM的整体系统设计可以概括为以下几个关键方面:
- 相机模型和传感器输入:OpenVSLAM支持多种不同类型的相机模型和传感器输入,包括单目、双目、RGB-D相机等。
- 特征提取和跟踪:OpenVSLAM使用视觉特征来进行定位和建图。特征提取和跟踪模块负责检测图像中的关键点,并在连续帧之间跟踪这些特征点。
- 视觉里程计:这个模块负责计算相机在连续帧之间的运动估计,以确定相机的位置和姿态。
- 回环检测:OpenVSLAM包括回环检测模块,用于识别在不同时间点拍摄的相似帧,并纠正可能的漂移。
- 建图:建图模块将特征点和运动估计转化为地图,用于表示环境的三维结构。
- 优化:优化模块用于全局地图优化,以提高定位的准确性和地图的一致性。
- 可视化和输出:OpenVSLAM还包括可视化工具和输出模块,以便于用户查看定位和地图结果。
模块和函数接口
OpenVSLAM的代码基本上按照上述系统设计分为多个模块,每个模块包含多个函数和类。以下是一些主要模块和它们的功能:
- FeatureExtractor 模块:负责特征点提取。
- Initializer 模块:执行初始化操作,例如初始化视觉里程计。
- Tracking 模块:执行相机的跟踪和定位。
- LoopDetector 模块:用于检测回环。
- Map 模块:管理地图的结构,包括关键帧和地图点。
- Optimizer 模块:执行全局地图优化。
- System 模块:系统的核心,协调各个模块的运行。
调用流程
OpenVSLAM的调用流程通常涉及以下步骤:
- 初始化OpenVSLAM系统,选择相机类型和配置。
- 提供传感器输入,如图像序列或相机数据流。
- 执行特征提取和跟踪,计算视觉里程计。
- 在运行中,回环检测模块可能会触发来检测回环。
- 定期执行全局地图优化,以提高地图的一致性和定位精度。
- 输出定位结果和地图数据,以便可视化或后续应用。
流程图
参考资料
lp-research/openvslam: OpenVSLAM Fork for LP-Research (github.com)
zm0612/openvslam-comments: openvslam的注释版代码 (github.com)
https://hub.docker.com/r/celinachild/openvslam
https://arxiv.org/abs/1910.01122 (论文:OpenVSLAM: A Versatile Visual SLAM Framework)
ChatGPT (openai.com)