【杂记1】PC-Ubuntu18.04.5+ROS-melodic环境下安装cartographer功能包

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

cartographer是google开发的实时室内SLAM项目,cartographer采用基于google自家开发的ceres非线性优化的方法,cartographer的量点在于代码规范与工程化,非常适合于商业应用和再开发。与此同时,cartographer基于submap子图构建全局地图的思想,能有效的避免建图过程中环境中移动物体的干扰。另外,cartographer支持多传感器数据(odometry、IMU、LaserScan等)建图,支持2D_SLAM和3D_SLAM建图。

故用源码安装,学习一下其思想。


一、ROS下命令行安装(简单,稍微提一下)

sudo apt-get update
 
sudo apt-get install ros-<your ros version>-cartographer*  # 安装全部关于cartographer的包

其中,<your ros version>指的是ROS的版本,我的是melodic

结束


二、源码安装cartographer(无ROS也可以)

官网文档:https://google-cartographer.readthedocs.io/en/latest/index.html#

官方要求:
Ubuntu系统:64bit-18.04+
gcc版本:6.3.0、7.5.0、9.3.0

我用gcc5.5.0,就疯狂报错,最后加上c++11的标准才通过的,安装完了才看到官网对系统的要求

proto版本:3.0+(我自己系统是3.3.0,所以本教程没有安装proto的部分)

ceres-solver版本:1.12.0、1.13.0(有看到帖子说11和14版本无法成功安装,我用的1.13.0)

1. 安装依赖与编译工具

对于工具:需要用到wsool和rosdep。
为了加快编译,我们使用ninja工具进行编译。

sudo apt-get update
sudo apt-get install -y \
    clang \
    cmake \
    g++ \
    git \
    google-mock \
    libboost-all-dev \
    libcairo2-dev \
    libcurl4-openssl-dev \
    libeigen3-dev \
    libgflags-dev \
    libgoogle-glog-dev \
    liblua5.2-dev \
    libsuitesparse-dev \
    lsb-release \
    ninja-build \
    stow

2. 初始化(创建)工作空间

mkdir -p ~/install_bag/carto_ws   #路径自己设

cd ~/install_bag/carto_ws

wstool init src

3. 加入cartographer、cartographer_ros的功能包并更新依赖(继续在carto_ws目录下进行操作)

wstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall

wstool update -t src

4. 添加ceres-solver,重新更新src文件夹

修改src/.rosinstall文件,添加ceres-slover下载路径,在文件末尾加如下语句即可:

- git:
    local-name: ceres-solver
    uri: https://github.com/ceres-solver/ceres-solver.git
    version: 1.13.0

回到carto_ws文件夹下,更新

wstool update -t src

5. 安装依赖并下载cartographer相关的功能包

sudo rosdep init

rosdep update

这里一直是老大难问题,建议直接科学上网,如果没条件就手机热点多试几次,我是接热点过的,多试几次就行,实在不行其实也不影响后续的操作(除非你装ros时完全没有rosdep过),一般没啥问题。

rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y

成功的结果就这样(rosdep失败了就再试几次,连热点能过的):
在这里插入图片描述

6. 使用脚本安装编译abseil-cpp库

在carto_ws路径下输入:

src/cartographer/scripts/install_abseil.sh

7. 编译和安装

catkin_make_isolated --install --use-ninja

如果成功的话就是完成了,但是呢,我会出现些奇奇怪怪的问题,其实就是gcc版本太低,安装的时候并不知道:

在这里插入图片描述
在这里插入图片描述

上面只是编译到cartographer包出错的错误信息,实际上cartographer_ros也还是报错。

解决方法:
abseil、cartographer、cartographer_ros(这里面有三个子文件夹)的CMakeLists文件添加c++11标准。

abseil库:
直接在脚本文件install_abseil.sh内加上一句:-DCMAKE_CXX_STANDARD=11 \
即最后变成:

#...省略号
cmake -G Ninja \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
  -DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl \
  -DCMAKE_CXX_STANDARD=11 \
  ..
#...省略号

cartographer、cartographer_ros(三个子文件夹,即这处一共修改4个cmake文件):
CMakeLists文件中,在Project(...)后另起一行加入:set (CMAKE_CXX_STANDARD 11)
上面这个语句适用于cmake版本3.1+
如果cmake版本低于3.1,则加入:

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
        message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

最后在重新编译一次,就可以成功了

在这里插入图片描述

8. 测试

下载慢的话,可以直接到网站里下载。

 2D
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag

3D
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-04-05-14-14-00.bag
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag

3D包个人觉得没必要,9.1G,算了算了。

9. 乱七八糟的问题

过几天重新装的时候:

当进行rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y时报错。
报错信息:

ERROR: the following packages/stacks could not have their rosdep keys resolved to system dependencies:
cartographer_turtlebot: 
Cannot locate rosdep definition for [turtlebot_bringup]

出现问题原因:不详(请dalao评论区指教)

解决方法:
执行以下命令通过,忽略依赖问题,为什么这么做,不是很懂。明明依赖全装了。

rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y -i -r

借鉴于:https://blog.csdn.net/qq_38758049/article/details/121004421


总结

古月居论坛是个挺好的学习论坛。

记录于大年初二凌晨,愿新的一年科研顺利、身体健康。


Reference

  1. https://blog.csdn.net/hiram_zhang/article/details/88374517(小虎哥哥爱学习)
  2. https://blog.csdn.net/weixin_45140945/article/details/111063528(挺完整的安装教程帖,强推)
  3. https://www.guyuehome.com/36532(古月居论坛帖)
  4. https://blog.csdn.net/weixin_39458342/article/details/103276265(脚本安装,我没试过)
  5. https://blog.csdn.net/mimiduck/article/details/111869968(CMAKE添加c++11支持)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_46135347

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值