构建Open REALM项目详细步骤

参考:

在WSL-Ubuntu18.04下,安装OpenREALM过程及遇到的问题和解决办法 - LesPlumes - 博客园

在WSL-Ubuntu20.04下,安装OpenCV-3过程以及遇到的问题和相应的解决办法 - LesPlumes - 博客园

openrealm配置-CSDN博客

OpenREALM在Ubuntu20.04下的部署方案-CSDN博客

OpenREALM环境搭建-CSDN博客

Ubuntu18.04安装OpenREALM_openrealm ubuntu-CSDN博客

https://github.com/laxnpander/OpenREALM

一.源码安装CMake-3.18.4

OpenREALM要求CMake版本在3.15以上。

安装CMake-3.18.4:

sudo apt install build-essential libssl-dev
wget https://github.com/Kitware/CMake/releases/download/v3.18.4/cmake-3.18.4.tar.gz
tar -zxvf cmake-3.18.4.tar.gz
cd cmake-3.18.4
./bootstrap
make
sudo make install

二.安装OpenCV-3.3.1

1.安装CUDA和依赖环境

sudo apt-get install nvidia-cuda-toolkit
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

2.安装gcc-6和g++-6,并将其设置为当前选项。

  下载gcc:

sudo apt-get install gcc-6 g++-6

  完成后可输入  ls /usr/bin/gcc*与ls /usr/bin/g++*  查看系统装有的gcc与g++版本。

  装了gcc-6之后,指定gcc-6进行编译:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 100

  更新默认的gcc版本配置:

sudo update-alternatives --config gcc

  指定g++-6进行编译:

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 100

  更新默认的g++版本配置:

sudo update-alternatives --config g++

3.源码安装OpenCV-3.3.1(注意!!必须带有 opencv_contrib ):

  这里用gcc-6和g++-6是因为后面用的是CUDA-9进行编译,所以GCC与G++的版本保持为6即可。

安装opencv-3.3.1参考我的另一篇博客:

Ubuntu安装不同版本的opencv,并任意切换使用-CSDN博客

三.安装OpenVSLAM

依赖环境:CUDA-9、OpenCV-3.3.1、Pangolin-0.5

注意:该版本是OpenREALM作者修改过的版本,安装其他版本的OpenVSLAM可能会导致OpenREALM无法正常运行。

1.安装依赖库

sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libx11-dev libxmu-dev libglu1-mesa-dev libgl2ps-dev libxi-dev g++ libzip-dev libpng12-dev libcurl4-gnutls-dev libfontconfig1-dev libsqlite3-dev libglew*-dev libssl-dev
sudo apt-get install glew-utils
sudo apt install libglew-dev

运行sudo apt-get install libx11-dev libxmu-dev libglu1-mesa-dev libgl2ps-dev libxi-dev g++ libzip-dev libpng12-dev libcurl4-gnutls-dev libfontconfig1-dev libsqlite3-dev libglew*-dev libssl-dev的时候报错:

解决:

sudo apt update
sudo apt-get install libglewmx-dev

然后再继续运行下面两条命令即可:

sudo apt-get install glew-utils
sudo apt install libglew-dev

2.安装Pangolin-0.5

  到GitHub上下载Pangolin-0.5源码(链接:Pangolin-0.5

文件夹改名字为Pangolin

cd Pangolin
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make -j6
sudo make install

3.编译安装G2O 

cd ~ && mkdir g2o && cd g2o
git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
git init
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 \
    -DG2O_USE_CHOLMOD=OFF \
    -DG2O_USE_CSPARSE=ON \
    -DG2O_USE_OPENGL=OFF \
    -DG2O_USE_OPENMP=ON \
    ..
    
make -j4
sudo make install

如果不按照,运行下面第四步的

cmake -DUSE_PANGOLIN_VIEWER=ON -DINSTALL_PANGOLIN_VIEWER=ON -DUSE_SOCKET_PUBLISHER=OFF -DUSE_STACK_TRACE_LOGGER=ON -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON ..

的时候,会报错,显示找不到g2o:

CMake Error at src/openvslam/CMakeLists.txt:10 (find_package):
  By not providing "Findg2o.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "g2o", but
  CMake did not find one.

  Could not find a package configuration file provided by "g2o" with any of
  the following names:

    g2oConfig.cmake
    g2o-config.cmake

  Add the installation prefix of "g2o" to CMAKE_PREFIX_PATH or set "g2o_DIR"
  to a directory containing one of the above files.  If "g2o" provides a
  separate development package or SDK, be sure it has been installed.


-- Configuring incomplete, errors occurred!
See also "/home/leaf1804/openvslam/build/CMakeFiles/CMakeOutput.log".
See also "/home/leaf1804/openvslam/build/CMakeFiles/CMakeError.log".

4.安装OpenVSLAM

所有命令:

git clone https://github.com/laxnpander/openvslam.git
cd openvslam/
git submodule init && git submodule update

mkdir build && cd build

cmake -DUSE_PANGOLIN_VIEWER=ON -DINSTALL_PANGOLIN_VIEWER=ON -DUSE_SOCKET_PUBLISHER=OFF -DUSE_STACK_TRACE_LOGGER=ON -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON ..

make -j6
sudo make install

下面分步运行: 

可以到GitHub上下载OpenVSLAM源码(链接:openvslam

我是使用命令下载OpenVSLAM的,执行:

git clone https://github.com/laxnpander/openvslam.git
cd openvslam/
git submodule init && git submodule update

 执行完git submodule init && git submodule update后,打开\openvslam\.git\config,将 https://github.com/OpenVSLAM-Community/FBoW.git 修改为:https://github.com/stella-cv/FBoW.git

  然后再执行下面的命令。

mkdir build && cd build

cmake -DUSE_PANGOLIN_VIEWER=ON -DINSTALL_PANGOLIN_VIEWER=ON -DUSE_SOCKET_PUBLISHER=OFF -DUSE_STACK_TRACE_LOGGER=ON -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON ..

cmake 报错1:

CMake Error at CMakeLists.txt:100 (find_package):
  Could not find a configuration file for package "OpenCV" that is compatible
  with requested version "4.0".

  The following configuration files were considered but not accepted:

    /usr/share/OpenCV/OpenCVConfig.cmake, version: 3.2.0

-- Configuring incomplete, errors occurred!
See also "/home/leaf1804/openvslam/build/CMakeFiles/CMakeOutput.log".
See also "/home/leaf1804/openvslam/build/CMakeFiles/CMakeError.log".

解决:由于系统有两个Opencv,所以,在/home/leaf1804/openvslam/CMakeLists.txt里面加上下面这段话,指定opencv版本 

再次运行

cmake -DUSE_PANGOLIN_VIEWER=ON -DINSTALL_PANGOLIN_VIEWER=ON -DUSE_SOCKET_PUBLISHER=OFF -DUSE_STACK_TRACE_LOGGER=ON -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON ..

cmake报错2:

-- SSE3 for ORB extraction: DISABLED
-- SSE for floating-point operation: DISABLED
-- BoW framework: FBoW (Using submodule)
-- No preference for use of exported glog CMake configuration set, and no hints for include/library directories provided. Defaulting to preferring an installed/exported glog CMake configuration if available.
-- Failed to find installed glog CMake configuration, searching for glog build directories exported with CMake.
-- Failed to find an installed/exported CMake configuration for glog, will perform search for installed glog components.
CMake Error at cmake/FindGlog.cmake:103 (message):
  Failed to find glog - Could not find glog include directory, set
  GLOG_INCLUDE_DIR to directory containing glog/logging.h
Call Stack (most recent call first):
  cmake/FindGlog.cmake:250 (glog_report_not_found)
  example/CMakeLists.txt:8 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/leaf1804/openvslam/build/CMakeFiles/CMakeOutput.log".
See also "/home/leaf1804/openvslam/build/CMakeFiles/CMakeError.log".

报错表明 CMake 无法找到 glog 库,这是一个 Google 的日志库,OpenVSLAM 使用它来记录运行信息。

以下是解决该问题的步骤:

1. 确认 glog 是否已安装

(1) 检查是否已经安装

运行以下命令检查 glog 是否已安装:

dpkg -l | grep libgoogle-glog

(2) 如果未安装,安装 glog

可以通过以下命令安装:

sudo apt update
sudo apt install libgoogle-glog-dev

安装后,CMake 通常会自动找到 glog


然后运行:

make -j6

运行make -j6报错3:

compilation terminated. src/openvslam/CMakeFiles/openvslam.dir/build.make:679: recipe for target 'src/openvslam/CMakeFiles/openvslam.dir/optimize/global_bundle_adjuster.cc.o' failed make[2]: *** [src/openvslam/CMakeFiles/openvslam.dir/optimize/global_bundle_adjuster.cc.o] Error 1 In file included from /usr/local/include/g2o/solvers/csparse/csparse_helper.h:30:0, from /usr/local/include/g2o/solvers/csparse/linear_solver_csparse.h:30, from /home/leaf1804/openvslam/src/openvslam/optimize/local_bundle_adjuster.cc:20: /usr/local/include/g2o/solvers/csparse/csparse_extension.h:27:16: fatal error: cs.h: No such file or directory #include <cs.h> ^ compilation terminated. src/openvslam/CMakeFiles/openvslam.dir/build.make:640: recipe for target 'src/openvslam/CMakeFiles/openvslam.dir/optimize/local_bundle_adjuster.cc.o' failed make[2]: *** [src/openvslam/CMakeFiles/openvslam.dir/optimize/local_bundle_adjuster.cc.o] Error 1 CMakeFiles/Makefile2:645: recipe for target 'src/openvslam/CMakeFiles/openvslam.dir/all' failed make[1]: *** [src/openvslam/CMakeFiles/openvslam.dir/all] Error 2 Makefile:159: recipe for target 'all' failed make: *** [all] Error 2

错误日志显示,openvslam 项目在编译过程中找不到 cs.h 头文件,这是因为依赖的 SuiteSparse 库没有正确安装或者配置路径。

以下是解决问题的步骤:

1. 安装 SuiteSparse

确保系统中安装了 SuiteSparse,这是一个稀疏矩阵运算库。cs.h 是 SuiteSparse 中 CSparse 的一部分。
运行以下命令安装:

sudo apt-get update
sudo apt-get install libsuitesparse-dev

2. 重新编译 g2o

如果路径修复后问题仍未解决,可能需要重新编译并安装 g2o

rm -rf build/
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 \
    -DG2O_USE_CHOLMOD=OFF \
    -DG2O_USE_CSPARSE=ON \
    -DG2O_USE_OPENGL=OFF \
    -DG2O_USE_OPENMP=ON \
    ..
    
make -j4
sudo make install

3. 重新编译 openvslam

修复后,清理 openvslam 的缓存并重新构建:

rm -rf build/
mkdir build && cd build

cmake -DUSE_PANGOLIN_VIEWER=ON -DINSTALL_PANGOLIN_VIEWER=ON -DUSE_SOCKET_PUBLISHER=OFF -DUSE_STACK_TRACE_LOGGER=ON -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON ..

make -j6
sudo make install

成功!!


四.安装OpenREALM

(官方安装教程:GitHub - laxnpander/OpenREALM: OpenREALM is a pipeline for real-time aerial mapping utilizing visual SLAM and 3D reconstruction frameworks.)

1.下载安装包

git clone https://github.com/laxnpander/OpenREALM.git
cd OpenREALM/
git submodule init
git submodule update

2.安装依赖包

打开OpenREALM\tools\install_deps.sh,将#G2O部分和#OpenVSLAM部分注释掉。

把opencv部分的

OPENCV_VERSION=$(/usr/bin/opencv_version)

改成

OPENCV_VERSION=$(/home/leaf1804/software/opencv3.3.1/bin/opencv_version)

cd tools/
chmod u+x install_deps.sh
./install_deps.sh

3.编译安装OpenREALM

cd ..
mkdir build && cd build
cmake ..
make all
sudo make install

问题1:

运行cmake .. 的时候发现,找到的是默认的opencv3.2.0

方法一:通过命令行参数指定 OpenCV 路径

在运行 cmake 命令时,添加以下变量设置:

cmake -DOpenCV_DIR=/home/leaf1804/software/opencv3.3.1/share/OpenCV ..
  • 解释:
    • -DOpenCV_DIR:明确指定 OpenCV 的路径。
    • /home/leaf1804/software/opencv3.3.1/share/OpenCV:OpenCV 安装目录下的 OpenCVConfig.cmake 文件所在路径。
    • ..:指向你的项目根目录。

这会让 CMake 在你指定的路径中查找 OpenCV 的配置文件,避免使用系统默认的版本。


cmake报错2:

CMake Error at modules/realm_vslam/realm_vslam_base/CMakeLists.txt:113 (add_library):
  Target "realm_vslam_base" links to target "fbow::fbow" but the target was
  not found.  Perhaps a find_package() call is missing for an IMPORTED
  target, or an ALIAS target is missing?

  • 原因: 找不到FboW依赖包
  • 解决方法:打开OpenREALM\CMakeLists.txt,添加以下几句
set(FBOW_INCLUDE_DIRS "/usr/local/include")

set(FBOW_LIBS "/usr/local/lib/libfbow.so")

find_package(fbow REQUIRED)

然后重新cmake。


五.安装OpenREALM测试数据集

1.Create a ROS workspace for compilation(在OpenREALM\路径下执行)

mkdir catkin_ws && cd catkin_ws
mkdir src && cd src

2.Get the ROS package && additional dependencies

​git clone https://github.com/laxnpander/OpenREALM_ROS1_Bridge.git

# Additional ROS package dependencies

  • 命令2sudo apt install -y -q python-catkin-tools build-essential git wget
  • 命令3sudo apt install -y -q ros-$ROS_DISTRO-geographic-msgs
  • 命令4sudo apt install -y -q ros-$ROS_DISTRO-geodesy
  • 命令5sudo apt install -y -q ros-$ROS_DISTRO-cv-bridge
  • 命令6sudo apt install -y -q ros-$ROS_DISTRO-rviz
  • 命令7sudo apt install -y -q ros-$ROS_DISTRO-pcl-ros

3.Make sure you are in catkin_ws, not src. Then build it

cd ..
catkin_make -DCMAKE_BUILD_TYPE=Release

报错1:

在第125行,在target_link_libraries(...) 处添加:

${Boost_FILESYSTEM_LIBRARIES}
${Boost_SYSTEM_LIBRARIES}

在第115行添加

set(CMAKE_MODULE_PATH "/usr/lib/x86_64-linux-gnu/cmake")
add_library(FLANN::FLANN INTERFACE IMPORTED)

在第74行添加:

在第53行添加:

报错2

/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_cudaarithm
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_cudabgsegm
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_cudafeatures2d
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_cudafilters
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_cudaimgproc
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_cudalegacy
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_cudaobjdetect
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_cudaoptflow
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_cudastereo
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_cudawarping
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_cudev
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_dnn
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_img_hash
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_tracking
/usr/bin/x86_64-linux-gnu-ld: cannot find -lopencv_xfeatures2d
collect2: error: ld returned 1 exit status
OpenREALM_ROS1_Bridge/realm_ros/CMakeFiles/realm_ros.dir/build.make:661: recipe for target '/home/leaf1804/OpenREALM/catkin_ws/devel/lib/librealm_ros.so' failed
make[2]: *** [/home/leaf1804/OpenREALM/catkin_ws/devel/lib/librealm_ros.so] Error 1
CMakeFiles/Makefile2:2109: recipe for target 'OpenREALM_ROS1_Bridge/realm_ros/CMakeFiles/realm_ros.dir/all' failed
make[1]: *** [OpenREALM_ROS1_Bridge/realm_ros/CMakeFiles/realm_ros.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 90%] Linking CXX executable /home/leaf1804/OpenREALM/catkin_ws/devel/lib/realm_rviz_plugin/ground_image_test_node
[ 90%] Built target ground_image_test_node
Makefile:159: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j16 -l16" failed

从错误信息来看,主要问题是编译链接阶段无法找到多个 OpenCV CUDA 和扩展模块的库。这些库(例如 opencv_cudaarithm, opencv_cudaimgproc, opencv_dnn 等)是 OpenCV 的可选组件,在构建 OpenCV 时需要显式启用支持。

以下是解决此问题的步骤:

我猜测可能是因为没找到opencv3.3.1,只找到了opencv3.2.0,所以报错,所以在运行命令的时候,显示指定opencv3.3.1的位置:

运行:

catkin_make -DCMAKE_BUILD_TYPE=Release -DOpenCV_DIR=/home/leaf1804/software/opencv3.3.1/share/OpenCV

成功!!

六.运行OpenREALM测试数据集

1.下载数据集(建议下载后再拖到Ubuntu里面):

https://drive.google.com/open?id=1-2h0tasI4wzxZKLBbOz3XbJ7f5xlxlMe

2.进入到数据所在的路径,然后解压:

tar -xvzf open_realm_edm_dataset.tar.gz

3.确认Launch文件中的数据集路径:

  profiles文件夹路径为:OpenREALM\catkin_ws\src\OpenREALM_ROS1_Bridge\realm_ros

  在运行前需要打开OpenREALM\catkin_ws\src\OpenREALM_ROS1_Bridge\realm_ros\launch

  需要修改launch文件中的第13行,将value值设置为自己数据集所在的绝对地址

4.安装AerialMapDisplay功能包:

sudo apt-get install ros-$ROS_DISTRO-rviz-satellite

5.运行Launch文件:

  先进入到OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/launch路径下,然后再输入以下测试命令。

  • GNSS only mapping:
roslaunch realm_ros alexa_gnss.launch
  • 2D mapping with visual SLAM:
roslaunch realm_ros alexa_noreco.launch
  • 5D mapping with visual SLAM and surface reconstruction:
roslaunch realm_ros alexa_reco.launch

在运行时可能遇到的错误:

  • 错误1:RLException: [alexa_gnss.launch] is neither a launch file in package [realm_ros] nor is [realm_ros] a launch file name.

The traceback for the exception was written to the log file

  • 原因:realm_ros环境没有添加到ROS的路径里面,所以找不到。
  • 解决办法:

    打开bashrc文件:

sudo vim ~/.bashrc

    然后在最下面一行输入(路径按自己电脑的路径进行修改):

source /home/leaf1804/OpenREALM/catkin_ws/devel/setup.sh
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/leaf1804/OpenREALM/catkin_ws/

    保存并退出,然后重启bashrc:

source ~/.bashrc

    查看路径是否加上:

echo $ROS_PACKAGE_PATH

运行成功: