• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
openvslam开发(一)ubuntu18-20s安装openvslam
 
 
 

 

参考教程

官网安装

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
posted on 2021-01-05 23:13  MKT-porter  阅读(161)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3