• 【SLAM-建图】Ubuntu18.04安装cartographer记录


    1.更新和安装相关工具

    sudo apt-get update
    sudo apt-get install -y python-wstool python-rosdep ninja-build
    
    • 1
    • 2

    2.初始化工作空间

    mkdir -p carto_ws/src
    cd carto_ws
    wstool init src   # 会在carto_ws文件夹下生成一个src文件和 .rosinstall文件
    
    • 1
    • 2
    • 3

    3.下载3个重要包:

    cartographer、cartographer_ros、ceres_solver 包

    在 carto_ws/src 路径下,
    (1) 对于ceres_solver包, 需要1.13.0版本的, 否则后面编译会出现很多问题. ceres_solve 包是一个非线性优化库.

    wget ceres-solver.org/ceres-solver-1.13.0.tar.gz
    tar xvf ceres-solver-1.13.0.tar.gz
    cd ceres-solver-1.13.0
    mkdir build
    cd build
    cmake ..
    make         // 编译
    sudo make install  //安装, 完成之后即安装好了ceres-solver.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    (2) 拉取 cartographercartographer_ros 包文件

    git clone https://github.com/cartographer-project/cartographer.git
    git clone https://github.com/cartographer-project/cartographer_ros.git
    
    • 1
    • 2

    在这里插入图片描述

    4.安装abseil-cpp依赖.

    carto_ws/ 路径下
    执行这个脚本命令 src/cartographer/scripts/install_abseil.sh 下载和安装, 或者使用如下的所有命令下载和安装, 因为这个脚本命令里的内容就是下面的所有命令.

    git clone https://github.com/abseil/abseil-cpp.git 
    cd abseil-cpp
    git checkout d902eb869bcfacc1bad14933ed9af4bed006d481
    mkdir build
    cd build
    cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl ..
    ninja
    sudo ninja install
    sudo apt-get install stow
    cd /usr/local/stow
    sudo stow absl
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    5.初始化及安装

    sudo rosdep init #(注意这里可以跳过,不然有可能会报错,如果我们装ROS的时候已经初始化过, 则无需再初始化)
    rosdep update  #(如果之前配置ros环境已经执行过,可以不用再次执行)
    rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
    
    • 1
    • 2
    • 3

    此处执行 rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y 可能会报错, 此处忘记截自己的图片了, 用了别人的, 报错内容大致一样的.
    在这里插入图片描述
    解决的办法是: 需要删除或者注释在cartographer 包下(不是那个cartographer_ros包)package.xml文件里的libabsl-dev , 然后再重新执行 rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y 命令.
    在这里插入图片描述

    6.编译.

    前提是要完成上面的准备工作和解决报错内容之后, 才能进行编译.
    carto_ws/ 路径下:

    catkin_make_isolated --install --use-ninja
    source install_isolated/setup.bash  # 添加到环境变量, 和ROS的 source devel/setup.bash 类似.
    
    • 1
    • 2

    全部编译成功后的结果如下图所示:
    在这里插入图片描述
    编译成功生成的文件夹是下面三个红框中的文件:
    在这里插入图片描述

    7.测试

    1. 下载测试bag包到Downloads路径下.
    wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
    
    • 1
    1. 每次运行前添加一下工作环境变量.
    source install_isolated/setup.bash
    
    • 1

    提示: 如果出现下面的报错说明是没有添加工作环境变量的.

    RLException: [demo_backpack_2d.launch] is neither a launch file in package [cartographer_ros] nor is [cartographer_ros] a launch file name The traceback for the exception was written to the log file
    
    • 1
    1. 执行测试命令:
    roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
    
    • 1

    成功运行launch文件之后的rviz截图:
    在这里插入图片描述
    在这里插入图片描述

    8.地图格式转换

    cartographer保存地图方式:

    在一个终端执行建图命令:

    # 执行建图命令:
    source install_isolated/setup.bash
    roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=/home/wsy/data/wu_outdoor/cartographer/cartographer_paper_deutsches_museum.bag
    
    • 1
    • 2
    • 3

    再打开另一个终端, cartographer保存地图方式, 执行保存图片命令:

    # 1 完成轨迹,不再接受数据.
    rosservice call /finish_trajectory 0
    
    # 2 序列化保存当前状态, 生成一个 mymap.pbstream 文件.
    rosservice call /write_state "{filename: '/home/wsy/Pictures/mymap.pbstream'}"
    
    # 3 将pbstream文件转化为pgm和yaml文件.
    rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=/home/wsy/Pictures/mymap -pbstream_filename=/home/wsy/Pictures/mymap.pbstream -resolution=0.05
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    还有需要注意点:

    protocol 需要proto3+版本以上的. 一般18.04Ubuntu ROS melodic系统的话已经是proto3以上的了. 但是如果编译过程中如果出现proto版本相关错误的话, 可以执行这个脚本 src/cartographer/scripts/install_proto3.sh 安装.

    而 Ubuntu 16 / ROS Kinetic必须输入该脚本命令安装: src/cartographer/scripts/install_proto3.sh.

    参考的博客: 1. 2.

  • 相关阅读:
    十一、【VUE-CLI】全局事件总线(待办事项案例 · 第四版)
    [Python从零到壹] 七十一.图像识别及经典案例篇之图像特效(滤镜和均衡化特效)
    盘点60个Python各行各业管理系统源码Python爱好者不容错过
    牛客网SQL159
    【FLink】Flink 任务 如何优雅的停止
    嵌入式常见英文缩写
    哈希表的总结
    视觉SLAM14讲笔记-第5讲-相机与图像
    北极星指标|专家建议如何有效制订NSM以驱动增长
    【ARK UI】HarmonyOS ETS 资源管理基本使用
  • 原文地址:https://blog.csdn.net/Boys_Wu/article/details/126158729