Cartographer ROS安装记录
Reference
- https://google-cartographer-ros.readthedocs.io/en/latest/compilation.html#building-installation
- https://github.com/PointCloudLibrary/pcl/issues/3104
写在前面
安装Carto真的太不容易了,纵然*在手,也有很多奇奇怪怪的问题,这里做一下记录,希望可以帮助到更多的小伙伴。
安装必要的依赖项
-
ROS
-
其他依赖项
sudo apt-get install -y \ python-wstool \ python-rosdep \ ninja-build \ cmake \ g++ \ git \ google-mock \ libboost-all-dev \ libeigen3-dev \ libgflags-dev \ libgoogle-glog-dev \ liblua5.2-dev \ libprotobuf-dev \ libsuitesparse-dev \ libwebp-dev \ ninja-build \ protobuf-compiler \ python-sphinx \ ros-kinect-tf2-eigen \ libatlas-base-dev \ libsuitesparse-dev \ liblapack-dev
初始化工作空间
mkdir XXX_ws
cd XXX_ws
wstool init src
如果src中有.rosinstall的话,会出以下错误,到src文件夹中删除.rosinstall就好
Error: There already is a workspace config file .rosinstall at "src". Use wstool install/modify.
拉取最新的工程文件
按理说是一定要执行下面的这句话的,这个地方有两个坑
wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
-
raw.githubusercontent.com的host,正常来说无法被识别,因此需要在/etc/hosts中添加151.101.84.133 raw.githubusercontent.com到最后
-
整个过程极其的慢,同时ceres-solver下载不下来,所以可以直接在.rosinstall中添加如下内容,注意对于国内用户来讲,googlegit的ceres-solver无法clone,因此这里换做了github的ceres:
- git: local-name: cartographer uri: https://github.com/cartographer-project/cartographer.git version: 1.0.0 - git: local-name: cartographer_ros uri: https://github.com/cartographer-project/cartographer_ros.git version: 1.0.0 - git: local-name: ceres-solver uri: https://github.com/ceres-solver/ceres-solver.git version: 1.13.0
-
如果还是很慢,可以人为的到上面的uri中手动clone到src中;
更新仓库的版本
使用如下语句,注意这一步运行的前提条件是上一步一定要做了,否则后面的都是无效的工作了:
wstool update -t src
经过上面的步骤之后应该是都会显示Done的。
编译Protobuf
按照官网的顺序下来,接下来需要编译Protobuf,这个地方也是极其的慢,可以先把v3.4.1的protobuf放在XXX_ws下,然后到修改src/cartographer/scripts/install_proto3.sh中的语句,不进行git相关的操作就可以;
这里说明一点,如果你的电脑中已经有protobuf了,那这个步骤个人并不建议做,因为不同版本的protobuf是不兼容的!不要因此破坏了你的环境,所以强烈建议在docker中测试;
编译工程
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
catkin_make_isolated --install --use-ninja
过程中rosdep init还是会有一些无法访问的问题,这也是host的问题,在/etc/hosts中添加151.101.84.133 raw.githubusercontent.com到最后就可以了。
其他问题
如果在电脑中不幸自己装入了PCL的库,那么在整个编译过程中还可能出现#error PCL requires C++14 or above的错误,此时可以到出问题的cc文件所在的工程中找到对应的CMakeLists.txt,添加如下语句就可以了:
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
推荐阅读