参考教程
官网安装
https://openvslam.readthedocs.io/en/master/installation.html
官网失效最新地址
https://github.com/zm0612/openvslam-comments?tab=readme-ov-file
硬件环境
1 笔记本联想y7000
- 显卡1050ti
- cuda10.2
- opencv4.5
- ubuntu18.05
- python3.6
2英伟达系列嵌入式板子 jetson nx 3500人民币 (nx都可以 那么jetson tx2 和Jetson Xavier NX 5000人民币多那个 肯定也可以)
我使用的目前为止官方系统 JetPack-4.4,自带库版本
- cuda10.2
- Tensort7
- OPENCV4.1.1
- numpy==
1.16.1
- protobuf-3.8.0
- python3.6.9
- onnx==1.4.1
安装过程
安装前先到最后看下可能遇到的问题。
依赖库
- Eigen : version 3.3.0 or later.
- g2o : Please use the latest release. Tested on commit ID 9b41a4e.
- SuiteSparse : Required by g2o.
- DBoW2 : Please use the custom version of DBoW2 released in https://github.com/shinsumicco/DBoW2.
- yaml-cpp : version 0.6.0 or later.
- OpenCV : version 3.3.1 or later.
0.依赖安装
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 #请注意官网libyaml-cpp-dev 直接在这里安装了但是版本很低,需要用源码安装 #sudo apt install -y libyaml-cpp-dev libgoogle-glog-dev libgflags-dev sudo apt install -y libgoogle-glog-dev libgflags-dev # (if you plan on using PangolinViewer) # Pangolin dependencies sudo apt install -y libglew-dev # (if you plan on using SocketViewer) # Protobuf dependencies sudo apt install -y autogen autoconf libtool # Node.js curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt install -y nodejs #官网到此结束了 下面是网友额外的安装,怕少东西自己也可以装下 sudo apt-get install -y libopenblas-dev sudo apt-get install -y --no-install-recommends libboost1.58-all-dev sudo apt-get install -y libx11-dev sudo apt-get install -y libgl1-mesa-dev sudo apt-get install libglu1-mesa-dev sudo apt-get install -y freeglut3-dev sudo apt-get install -y doxygen wget https://nchc.dl.sourceforge.net/project/glew/glew/2.1.0/glew-2.1.0.tgz --no-check-certificate tar -xzvf glew-2.1.0.tgz cd glew-2.1.0/ make -j2 sudo make install sudo ln -s /usr/lib64/libGLEW.so.2.1 /usr/lib/libGLEW.so.2.1
sudo apt install libcanberra-gtk-module libcanberra-gtk3-module
下面开始,每个库都要下在压缩包,自己找个地方存起来
-1 conda
如果装了先注销
重新开终端编译
0.安装cmake-gui(还是最好装下)
方法一:版本较老,但省事,版本过低可能导致后面编译失败(c++11新特性什么的)
先装cmake:sudo apt-get install cmake
再装cmake-gui:sudo apt-get install cmake-qt-gui
运行:cmake-gui
2.安装更高版本的cmake,cmake官网地址。
将 cmake-3.21.6.tar.gz 解压
tar -zxvf cmake-3.21.6.tar.gz
(1)将原来版本的cmake执行文件删除
打开终端输入
cd /usr/bin/
sudo rm cmake
(2)安装 cmake-3.21.6
切换到cmake-3.21.6 文件夹下,打开终端输入
./configure
make
sudo make install
再次查看当前版本,打开终端输入
cmake --version
1. Eigen安装(最新3.3.7)
wget -q https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.bz2 tar xf eigen-3.3.7.tar.bz2 rm -rf eigen-3.3.7.tar.bz2 cd eigen-3.3.7 mkdir -p build && cd build cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ .. make -j4 make install
1-2安装ceres(非必要)
https://www.cnblogs.com/gooutlook/p/16309889.html
2 安装opencv
直接装opencv4吧
电脑装了多个版本的opencv,且没有直接 make install ,手动给定opencv路径
https://i.cnblogs.com/posts/edit;postId=17723350
https://i.cnblogs.com/posts/edit;postId=17679960
注销原有的查找opencv,手动指定,修改后
#设置opencv安装路径 set(CMAKE_PREFIX_PATH "/home/dongdong/1sorftware/1work/opencv/opencv455/install") find_package(OpenCV REQUIRED COMPONENTS core imgcodecs videoio features2d calib3d highgui) include_directories(${OpenCV_INCLUDE_DIRS}) #find_package(OpenCV 3.3.1 QUIET # COMPONENTS # core imgcodecs videoio features2d calib3d highgui) #if(NOT OpenCV_FOUND) # find_package(OpenCV 4.0 REQUIRED # COMPONENTS # core imgcodecs videoio features2d calib3d highgui) # if(NOT OpenCV_FOUND) # message(FATAL_ERROR "OpenCV >= 3.3.1 not found") # endif() #endif() message(STATUS "Use OpenCV ${OpenCV_VERSION}")
3 DBoW2 依赖opencv
cd /path/to/working/dir #安装作者自己的DBoW2 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 make install
手动找到自己opencv安装的位置
openvslam用不了 opencv4.5
#set( CMAKE_PREFIX_PATH "/home/dongdong/1sorftware/1work/opencv/opencv349/install") set(OpenCV_DIR "/home/dongdong/1sorftware/1work/opencv/opencv349/install/share/OpenCV") find_package(OpenCV REQUIRED) #将会尝试找到系统中安装的 OpenCV 库的任何可用版本,默认启用所有可用的组件。 include_directories(${OpenCV_INCLUDE_DIRS})
4 g2o
不能下载最新版本,可能因为太新编译slam会报错
2020版就不会报错
卸载老版本
1:删除g2o的头文件,位于/usr/local/include/g2o下 sudo rm -r /usr/local/include/g2o 2:删除g2o的库文件,位于/usr/local/lib下 sudo rm -r /usr/local/lib/libg2o* 3:删除g2o的可执行文件,位于/usr/local/bin下 sudo rm -r /usr/local/bin/g2o*
https://codeload.github.com/RainerKuemmerle/g2o/zip/refs/tags/20200410_git
https://github.com/RainerKuemmerle/g2o/tags
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 -j8 make install
设置 -DBUILD_WITH_MARCH_NATIVE=ON 在编译 g2o 和 openvslam 这样的项目时,通常用于启用特定于主机 CPU 架构的优化。这个选项告诉编译系统使用当前主机的 CPU 架构(通过 -march=native 参数),以最大化性能和效率。 g2o g2o 是一个用于图优化的 C++ 库,特别是在视觉 SLAM(Simultaneous Localization and Mapping)中广泛使用。图优化问题通常涉及大量的数学计算和矩阵运算,这些运算可以受益于 CPU 的特定指令集和优化。 当你设置 -DBUILD_WITH_MARCH_NATIVE=ON 时,CMake 会在生成 Makefile 或其他构建系统时使用 -march=native 编译选项。这会告诉编译器利用当前 CPU 提供的最新指令集和硬件优化,以提高程序的性能。 openvslam openvslam 是一个开源的视觉 SLAM 系统,用于实时定位与地图构建。与 g2o 类似,它也依赖于高效的数学计算和矩阵操作。 同样地,通过设置 -DBUILD_WITH_MARCH_NATIVE=ON,你可以确保 openvslam 在编译时充分利用当前系统的 CPU 功能,从而提高实时 SLAM 运行的效率和响应速度。 注意事项 可移植性和兼容性: 虽然启用 -march=native 可以提高性能,但生成的二进制文件可能对特定的 CPU 架构依赖较强。这意味着在将程序移植到不同架构的计算机时,可能需要重新编译或者考虑关闭此选项以确保兼容性。 版本一致性: 确保所使用的 g2o 和 openvslam 版本与你的硬件架构兼容,并且理解启用 -DBUILD_WITH_MARCH_NATIVE=ON 可能会对程序的性能和可移植性产生的影响。 综上所述,设置 -DBUILD_WITH_MARCH_NATIVE=ON 通常用于希望在特定硬件上最大化性能的项目,但在考虑到可移植性和兼容性时,需要权衡利弊。
5安装yaml-cpp
手动到网页
https://github.com/jbeder/yaml-cpp/tags
下载压缩包
这里需要在CMakeLists.txt
开启fPIC选项,即需要把160行左右行改为:
set(yaml_cxx_flags "-Wall ${GCC_EXTRA_OPTIONS} -fPIC -pedantic -Wno-long-long ${yaml_cxx_flags}")
如图所显示
然后编译
cd yaml-cpp mkdir build && cd build cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ .. make -j2 sudo make install sudo ldconfig -v
6 如何可视化
有两种模式安装
6-1PangolinViewer 软件查看
不能装太新的,否则报错
删除已有的库和头文件
cd Pangolin/build make clean sudo make uninstall
下载指定版本
https://github.com/stevenlovegrove/Pangolin/tags
mkdir build && cd build cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ .. make -j4 make install
6-2 socket.io-client-cpp 网页模式查看
安装依赖 Protobuf.
# for Ubuntu 18.04 (or later) sudo apt install -y libprotobuf-dev protobuf-compiler
或者源码编译安装
wget -q https://github.com/google/protobuf/archive/v3.6.1.tar.gz tar xf v3.6.1.tar.gz cd protobuf-3.6.1 ./autogen.sh ./configure \ --prefix=/usr/local \ --enable-static=no make -j4 make install
安装SocketViewer
强烈建议到官网手动下载源码最新压缩包代替git命令行下载。
cd /path/to/working/dir git clone https://github.com/shinsumicco/socket.io-client-cpp.git cd socket.io-client-cpp git submodule init git submodule update mkdir build && cd build cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DBUILD_UNIT_TESTS=OFF \ .. make -j4 make install
3编译OPENVSLAM
下载工程
git clone https://github.com/xdspacelab/openvslam
如果没有安装OPENCV到系统
手动添加
#set( CMAKE_PREFIX_PATH "/home/dongdong/1sorftware/1work/opencv/opencv349/install") set(OpenCV_DIR "/home/dongdong/1sorftware/1work/opencv/opencv349/install/share/OpenCV") find_package(OpenCV REQUIRED) #将会尝试找到系统中安装的 OpenCV 库的任何可用版本,默认启用所有可用的组件。 include_directories(${OpenCV_INCLUDE_DIRS})
如果是 PangolinViewer,-DUSE_PANGOLIN_VIEWER=ON
and -DUSE_SOCKET_PUBLISHER=OFF
.
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=OFF \ .. make -j4
如果是SocketViewer -DUSE_PANGOLIN_VIEWER=OFF
and -DUSE_SOCKET_PUBLISHER=ON
.
cd /path/to/openvslam mkdir build && cd build cmake \ -DBUILD_WITH_MARCH_NATIVE=ON \ -DUSE_PANGOLIN_VIEWER=OFF \ -DUSE_SOCKET_PUBLISHER=ON \ -DUSE_STACK_TRACE_LOGGER=ON \ -DBOW_FRAMEWORK=DBoW2 \ -DBUILD_TESTS=ON \ .. make -j4
安装
sudo make install
安装成功测试
./run_kitti_slam -h
问题
问题0-1网友的代码报错
去掉一个c
问题0-2
Getting error: 'shared_ptr' in namespace 'std' does not name a type
头文件加入
#include <memory>
问题0-3
error: ‘runtime_error’ is not a member of ‘std’
加入
#include <stdexcept>
问题1 solve error: ‘setprecision’ is not a member of ‘std’
// ---solve error: ‘setprecision’ is not a member of ‘std’--- #include <iostream> #include <iomanip> #include <limits> using namespace std; // ---solve end---
问题2 yaml-cpp带来的问题
ymal在后期opencvslam编译时候报错,调库的问题
官网要求本版
但是官网提供的安装方式
apt install -y libyaml-cpp-dev
默认最新也才是0.52不满足起码0.6的要求。
需要从源码自己编译
git clone https://github.com/jbeder/yaml-cpp cd yaml-cpp mkdir build && cd build cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ .. make -j2 sudo make install sudo ldconfig -v
但是,直接命令行git下载的不是最新的代码
git clone https://github.com/jbeder/yaml-cpp
需要手动到网页
https://github.com/jbeder/yaml-cpp/tags
下载压缩包
这里需要在CMakeLists.txt
开启fPIC选项,即需要把160行左右行改为:
set(yaml_cxx_flags "-Wall ${GCC_EXTRA_OPTIONS} -fPIC -pedantic -Wno-long-long ${yaml_cxx_flags}")
如图所显示
重新编译即可。
下一篇讲解下基本使用
官方系统 JetPack-4.4,自带库版本
- cuda10.2
- Tensort7
- OPENCV4.1.1
- numpy==
1.16.1
- protobuf-3.8.0
- python3.6.9
- onnx==1.4.1