maplab安装编译过程问题汇总

maplab编译安装中遇到的问题及其解决方法

maplab编译安装

最近在建图重定位方面有一些工作需求,故考虑使用极其优(keng)秀(die)的开源项目–maplab来完成工作,项目虽好,可你得在自己的ubuntu上安装完成,其中有着巨多的坑,这里填一下.

安装环境

ubuntu16.04+ros,ros版本为kinetic,如果没有安装ros则按照这篇文章进行安装:https://www.cnblogs.com/liu-fa/p/5779206.html

首先安装一些工具

sudo apt install ros-kinetic-tf2*
sudo apt install ros-kinetic-camera-info-manager*

安装依赖项

sudo apt install autotools-dev ccache doxygen dh-autoreconf git liblapack-dev libblas-dev libgtest-dev libreadline-dev libssh2-1-dev pylint clang-format-3.8 python-autopep8 python-catkin-tools python-pip python-git python-setuptools python-termcolor python-wstool libatlas3-base --yes

安装requests

sudo pip install requests

好啦,准备工作做好了,可以开始安装maplab了
为maplab建立一个独立的工作空间(workspace),好处大大的,因为这个工程极大233,只不过每次用要source一次,或者sudo gedit ~/.bashrc中把这个工作空间devel/setup.bash写进去

配置catkin设置

mkdir -p maplab_ws/src
cd maplab_ws
catkin init
catkin config --merge-devel # Necessary for catkin_tools >= 0.4.
catkin config --extend /opt/ros/$ROS_VERSION
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release

这时工作空间已经初始化完成,并且配置了config,现在下载包到src文件夹中

下载maplab 以及maplab_dependencies

cd src
git clone https://github.com/ethz-asl/maplab.git --recursive
git clone https://github.com/ethz-asl/maplab_dependencies --recursive

如果你希望在git上作出一些贡献,安装这个

cd maplab
./tools/linter/init-git-hooks.py

现在,终于做完了准备工作(并没有),但是还是不能进行catkin build [package]
由于这个是ethz-asl实验室的成果,在国外使用的google服务器,需要对以下内容做修改
/home/ares/maplab_ws/src/maplab_dependencies/3rdparty/ceres_catkin/CMakeLists.txt
https://ceres-solver.googlesource.com/ceres-solver改为 https://github.com/ceres-solver/ceres-solver

现在可以尝试进行catkin build来编译工程

cd ~/maplab
catkin build maplab

不要担心,前面做了这么多准备工作,后面可能还有更多的要做(误

下面给出一些可能遇到的问题

问题1:protobuf编译一直不通过

build的过程中,发现 protobuf_catkin:make会在queue中一直卡在一个百分比不动,这时ctrl+c,停止build,
在下面的网址下载压缩包https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz,命名protobuf-2.6.1.tar.gz并放到
/home/wyt/maplab_ws/build/protobuf_catkin/protobuf_src-prefix/src/
将下面几句话

if(EXISTS "/home/ares/maplab_ws/build/protobuf_catkin/protobuf_src-prefix/src/protobuf-2.6.1.tar.gz")
    return()
endif()

放到
/home/wyt/maplab_ws/build/protobuf_catkin/protobuf_src-prefix/src/protobuf_src-stamp/download-protobuf_src.cmake文件的最上一行.
然后重新catkin build maplab

问题2:opencv库编译一直不通过

build的过程中,发现 opencv_catkin:make会在queue中一直卡在一个百分比不动,这时ctrl+c,停止build,
在下面的网址下载压缩包
https://github.com/opencv/opencv_contrib/archive/3.2.0.zip,
命名3.2.0.zip,并放到
/home/wyt/maplab_ws/build/opencv3_catkin/opencv3_contrib-prefix/src/
同时在下面的网址下载压缩包
https://github.com/Itseez/opencv/archive/3.2.0.zip,
命名3.2.0.zip,并放到
/home/wyt/maplab_ws/build/opencv3_catkin/opencv3_src-prefix/src/
然后重新catkin build maplab

问题3:eigen库头文件问题导致odometry.cpp报错
maplab安装编译过程问题汇总_第1张图片
这里去/home/wyt/maplab_ws/build/opencv3_catkin/opencv3_contrib_src/modules/rgbd/src中的odometry.cpp中修改include如下
在这里插入图片描述
或者include你的MatrixFunctions在/usr/include下的完整路径,
然后重新catkin build maplab

问题4:稀疏矩阵库SuiteSparse编译出错

maplab安装编译过程问题汇总_第2张图片
maplab安装编译过程问题汇总_第3张图片
在这里插入图片描述
这里给出最简单粗暴的方法,把/maplab_ws/build/下的suitesparse文件夹完整的全删除,然后重新catkin build maplab

问题5:downloader.cmake文件找不到

正常这个文件会自动生成,帮助下载东西,同时在最后会自动删除.但是有些情况可能导致这个文件不会生成,那么我们可以自己写一个downloader.cmake文件放到报错的文件夹下面,如下
/home/wyt/maplab_ws/build/opencv3_catkin/opencv3_src/3rdparty/ippicv
下面给出该文件内容:

#
# The script downloads ICV package
#
# On return this will define:
# OPENCV_ICV_PATH - path to unpacked downloaded package
#
 
function(_icv_downloader)
  # Commit SHA in the opencv_3rdparty repo
  set(IPPICV_BINARIES_COMMIT "81a676001ca8075ada498583e4166079e5744668")
  # Define actual ICV versions
  if(APPLE)
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_macosx_20151201.tgz")
    set(OPENCV_ICV_PACKAGE_HASH "4ff1fde9a7cfdfe7250bfcd8334e0f2f")
    set(OPENCV_ICV_PLATFORM "macosx")
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_osx")
  elseif(UNIX)
    if(ANDROID AND NOT (ANDROID_ABI STREQUAL x86 OR ANDROID_ABI STREQUAL x86_64))
      return()
    endif()
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_linux_20151201.tgz")
    set(OPENCV_ICV_PACKAGE_HASH "808b791a6eac9ed78d32a7666804320e")
    set(OPENCV_ICV_PLATFORM "linux")
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_lnx")
  elseif(WIN32 AND NOT ARM)
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_windows_20151201.zip")
    set(OPENCV_ICV_PACKAGE_HASH "04e81ce5d0e329c3fbc606ae32cad44d")
    set(OPENCV_ICV_PLATFORM "windows")
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_win")
  else()
    return() # Not supported
  endif()
  set(OPENCV_ICV_UNPACK_PATH "${CMAKE_CURRENT_LIST_DIR}/unpack")
  set(OPENCV_ICV_PATH "${OPENCV_ICV_UNPACK_PATH}${OPENCV_ICV_PACKAGE_SUBDIR}")
 
  message(STATUS "ICV: Package successfully downloaded")
  set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE)
endfunction()
 
_icv_downloader()

然后重新catkin build maplab

问题6:某些库build不过

protobuf和opencv库是常见的编译不过的库,但是有时候也会遇到一些奇怪的build不过的问题。
通常build不过报错,可以像删除稀疏矩阵库一样,整体删除重新编译即可,但是有些库由于存在耦合性,其依赖于其他库的内容,可以将~/maplab_ws/build文件夹下的两个库同时删除,然后重新catkin build maplab
例如有些库编译报错,可能是由于ceres库或者opencv库的编译未完成或者出错,才会报错的,那么应该删除相应的库后,使用前面提到的问题的解决方案后,重新编译,这时即可成功.

胜利的曙光

经历了几个小问题,终于拨开云雾见月明了,如果你足够幸运,那么你将会看到:
maplab安装编译过程问题汇总_第4张图片
如果是这样类似的结果,那么恭喜你,成功编译完成了,您可以快(jue)乐(wang)的开启maplab的征途了.,如果还是不行,那就多试几次(溜

你可能感兴趣的:(maplab,建图与重定位,slam)