按照官网指导上的指令安装下来,在个别步骤上可能会因为长城的缘故,导致安装失败,一波三折。费了一天时间,终于把cartographer安装成功,翻阅了各种博客文章,结合自己碰到的问题,总结记录一下。
安装依赖包
sudo apt-get update sudo apt-get install -y python-wstool python-rosdep ninja-build stow
创建工作空间与下载安装包
mkdir catkin_ws cd catkin_ws wstool init src wstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall
注意看到src目录出现.rosinstall
文件(显示隐藏文件ctrl + h
),往里面填加ceres1.13.0的下载地址 (版本1.13.0,否则与eigen库冲突)。
sudo gedit /home/ros/catkin_ws/src/.rosinstall
往里面添加:
- git: local-name: ceres-solver uri: https://github.com/ceres-solver/ceres-solver.git version: 1.13.0
终端执行命令,下载安装包:
wstool update -t src
下载完之后,工作空间src目录是这样的:
安装cartographer_ros依赖
首先要有ros系统。
sudo rosdep init rosdep update rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
因为长城的原因,这里的rosdep update
往往是头疼的一步,最常见的解决方法是修改/etc/hosts,使用境外的ip,但是我一直没有成功。最终参考了古月的博文,得以顺利解决。强烈推荐:https://www.guyuehome.com/34072
安装abseil库
src/cartographer/scripts/install_abseil.sh
安装过程中,注意是否出现*existing target is neither a link nor a directory: include/absl/algorithm/algorithm.h
类似警告,说明在此前已经安装过了abseil库。(如果后续不影响cartographer安装可忽略,如果导致失败,看下文)
编译cartographer
这里是最后一步了,是漫长的等待…
catkin_make_isolated --install --use-ninja
报错1:
ImportError: "from catkin_pkg.package import parse_package" failed: No module named 'catkin_pkg' Make sure that you have installed "catkin_pkg", it is up to date and on the PYTHONPATH.
安装catkin_pkg即可。
python3 -m pip install catkin_pkg
报错2:
/usr/bin/ld: /usr/local/lib/libabsl_synchronization.a(mutex.cc.o): relocation R_X86_64_32 against `.data' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libabsl_synchronization.a: 无法添加符号: 错误的值 collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed. <== Failed to process package 'cartographer_rviz':
因为abseil库导致的错误,可能我先前安装的abseil库版本不符,故卸载重装:
sudo rm -rf '/usr/local/include/absl' sudo rm -rf '/usr/local/lib/cmake/absl' cd /usr/local/lib sudo rm libabsl_*
终端回到工作空间重装即可:
src/cartographer/scripts/install_abseil.sh
安装abseil会用到stow管理器,在库安装和卸载的时候很方便。https://zhuanlan.zhihu.com/p/54750603
报错3:
也不知道进行了什么骚操作,导致出现这个问题,翻遍google和baidu都没找到解决办法。
By not providing "FindLuaGoogle.cmake" in CMAKE_MODULE_PATH this project ...
删除build_isolated、 install_isolated、 src
,重新开始。