在WSL-Ubuntu18.04下,安装OpenREALM过程及遇到的问题和解决办法
源码安装CMake-3.18.4
OpenREALM要求CMake版本在3.15以上。
安装CMake-3.18.4:
- 命令1:
sudo apt install build-essential libssl-dev
- 命令2:
wget https://github.com/Kitware/CMake/releases/download/v3.18.4/cmake-3.18.4.tar.gz
- 命令3:
tar -zxvf cmake-3.18.4.tar.gz
- 命令4:
cd cmake-3.18.4
- 命令5:
./bootstrap
- 命令6:
make
- 命令7:
sudo make install
安装OpenCV-3.3.1
1.安装CUDA和依赖环境
- 命令1:
sudo apt-get install nvidia-cuda-toolkit
- 命令2:
sudo apt-get install build-essential
- 命令3:
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
- 命令4:
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
- 命令5:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
- 命令6:
sudo apt update
- 命令7:
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的安装过程请参考这篇博客:安装OpenCV-3.3.1,带opencv_contrib (点击本链接即可打开)
安装OpenVSLAM
依赖环境:CUDA-9、OpenCV-3.3.1、Pangolin-0.5
注意:该版本是OpenREALM作者修改过的版本,安装其他版本的OpenVSLAM可能会导致OpenREALM无法正常运行。
1.安装依赖库
- 命令1:
sudo apt-get install libglew-dev
- 命令2:
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
- 命令3:
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
- 命令4:
sudo apt-get install glew-utils
- 命令5:
sudo apt install libglew-dev
-
- 报错1:The following packages have unmet dependencies:
libglewmx-dev : Conflicts: libglew-dev but 2.0.0-5 is to be installedE: Unable to correct problems,you have held broken packages. - 原因:应该是系统现有版本与欲装版本问题不匹配
- 解决办法:
- 报错1:The following packages have unmet dependencies:
sudo apt update
sudo apt-get install libglewmx-dev
2.安装Pangolin-0.5
到GitHub上下载Pangolin-0.5源码(链接:Pangolin-0.5)
- 命令1:
cd Pangolin
- 命令2:
mkdir build && cd build
- 命令3:
cmake -DCPP11_NO_BOOST=1 ..
- 命令4:
make -j6
- 命令5:
sudo make install
3.安装OpenVSLAM
首先打开\openvslam\.git\config,将 https://github.com/OpenVSLAM-Community/FBoW.git 修改为:https://github.com/stella-cv/FBoW.git
- 命令1:
cd ~ && cd app && cd openvslam
- 命令2:
git clone git@github.com:laxnpander/openvslam.git
- 命令3:
cd openvslam
- 命令4:
git submodule init && git submodule update
- 命令5:
mkdir build && cd build
- 命令6:
cmake \
-DUSE_PANGOLIN_VIEWER=ON \
-DINSTALL_PANGOLIN_VIEWER=ON \
-DUSE_SOCKET_PUBLISHER=OFF \
-DUSE_STACK_TRACE_LOGGER=ON \
-DBUILD_TESTS=ON \
-DBUILD_EXAMPLES=ON \
..
-
- 报错1:无法下载release-1.10.0.tar.gz
- 原因:被墙
- 解决办法:网址https://github.com/google/googletest/tags,去浏览器下载googletest-release-1.10.0.tar.gz,然后将以下这个路径的文件替换为刚刚下载好的压缩包:openvslam\build\googletest-download\googletest-download-prefix\src\release-1.10.0.tar.gz
注意,需要将压缩包改名为release-1.10.0.tar.gz
然后再次执行cmake。
- 命令7:
make -j6
- 命令8:
sudo make install
安装OpenREALM
(官方安装教程:https://github.com/laxnpander/OpenREALM)
1.下载安装包
- 命令1:
git clone https://github.com/laxnpander/OpenREALM.git
- 命令2:
git submodule init
- 命令3:
git submodule update
2.安装依赖包
打开OpenREALM\tools\install_deps.sh,将#OpenVSLAM部分注释掉。
若g2o下载慢,可顺便将第138行的链接改为:git@github.com:RainerKuemmerle/g2o.git
- 命令1:
cd OpenREALM/tools
- 命令2:
chmod u+x install_deps.sh
- 命令3:
./install_deps.sh
3.编译安装OpenREALM
- 命令1:
cd ..
- 命令2:
mkdir build && cd build
- 命令3:
cmake ..
- 报错1:realm_densifier/realm_densifier_impl/psl does not contain a CMakeLists.txt file.
- 原因:没有下载PSL
- 解决办法:去GitHub下载psl,然后重新cmake即可
cd OpenREALM/modules/realm_densifier/realm_densifier_impl/psl
git clone git@github.com:laxnpander/PSL.git
-
错误2:CMake Error at modules/realm_stages/CMakeLists.txt:105 (add_library): Target "realm_stages" 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。
- 命令4:
make -j6
- 命令5:
sudo make install
安装OpenREALM测试数据集
1.Create a ROS workspace for compilation(在OpenREALM\路径下执行)
- 命令1:
mkdir catkin_ws && cd catkin_ws
- 命令2:
mkdir src && cd src
2.Get the ROS package && additional dependencies
- 命令1:
git clone https://github.com/laxnpander/OpenREALM_ROS1_Bridge.git
(SSH方式:git clone
git@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
- 命令1:
cd ..
- 命令2:
catkin_make -DCMAKE_BUILD_TYPE=Release
- 错误1:CMake Error at OpenREALM_ROS1_Bridge/realm_ros/CMakeLists.txt:143 (add_executable):
Target "realm_exiv2_grabber" links to target "Boost::filesystem" but the
target was not found. Perhaps a find_package() call is missing for an
IMPORTED target, or an ALIAS target is missing?
-
- 原因:找不到相应的文件
- 解决办法:(参考:https://github.com/laxnpander/OpenREALM/issues/75)
打开OpenREALM\catkin_ws\src\OpenREALM_ROS1_Bridge\realm_ros\CMakeList.txt文件,
在第53行添加:
# boost
find_package(Boost COMPONENTS thread filesystem date_time system REQUIRED)
在第74行添加:
find_package(fbow REQUIRED)
find_package(CGAL REQUIRED)
在第115行添加:
set(CMAKE_MODULE_PATH "/usr/lib/x86_64-linux-gnu/cmake")
add_library(FLANN::FLANN INTERFACE IMPORTED)
在第125行,在target_link_libraries(...) 处添加:
${Boost_FILESYSTEM_LIBRARIES}
${Boost_SYSTEM_LIBRARIES}
运行OpenREALM测试数据集
1.下载数据集(建议下载后再拖到Ubuntu里面):
https://drive.google.com/open?id=1-2h0tasI4wzxZKLBbOz3XbJ7f5xlxlMe
2.进入到数据所在的路径,然后解压:
- 命令1:
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/your_name/app/OpenREALM/catkin_ws/devel/setup.sh
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/your_name/app/OpenREALM/catkin_ws/
保存并退出,然后重启bashrc:
source ~/.bashrc
查看路径是否加上:
echo $ROS_PACKAGE_PATH
- 错误2:运行后会弹出空白RViz窗口。
同时在终端也会提示:
[ERROR] [1700274476.866316760]: PluginlibFactory: The plugin for class 'rviz_plugins/AerialMapDisplay' failed to load. Error: According to the loaded plugin descriptions the class rviz_plugins/AerialMapDisplay with base class type rviz::Display does not exist.
- 原因1: 缺少AerialMapDisplay功能包
- 解决办法:
sudo apt-get install ros-$ROS_DISTRO-rviz-satellite
- 原因2: OpenCV没有带有OpenCV_contrib依赖包,导致OpenVSlam运行不起来,所以跟踪不到影像的特征点,拼接失败,故Rviz界面是空白的。
- 解决办法:重新安装一遍带有OpenCV_contrib依赖包的OpenCV-3.3.1;可以参见我上面的安装流程。
成功运行的结果图: