参考:
在WSL-Ubuntu18.04下,安装OpenREALM过程及遇到的问题和解决办法 - LesPlumes - 博客园
在WSL-Ubuntu20.04下,安装OpenCV-3过程以及遇到的问题和相应的解决办法 - LesPlumes - 博客园
OpenREALM在Ubuntu20.04下的部署方案-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.cmakeAdd 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
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
- 命令2:
sudo apt install -y -q python-catkin-tools build-essential git wget
- 命令3:
sudo apt install -y -q ros-$ROS_DISTRO-geographic-msgs
- 命令4:
sudo apt install -y -q ros-$ROS_DISTRO-geodesy
- 命令5:
sudo apt install -y -q ros-$ROS_DISTRO-cv-bridge
- 命令6:
sudo apt install -y -q ros-$ROS_DISTRO-rviz
- 命令7:
sudo 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
运行成功: