最近在建图重定位方面有一些工作需求,故考虑使用极其优(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报错
这里去/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_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库的编译未完成或者出错,才会报错的,那么应该删除相应的库后,使用前面提到的问题的解决方案后,重新编译,这时即可成功.
经历了几个小问题,终于拨开云雾见月明了,如果你足够幸运,那么你将会看到:
如果是这样类似的结果,那么恭喜你,成功编译完成了,您可以快(jue)乐(wang)的开启maplab的征途了.,如果还是不行,那就多试几次(溜