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

本文档详细介绍了在Ubuntu系统中安装Cartographer、Cartographer_ROS和相关依赖库的步骤,包括更新系统、安装必备工具、下载源码、解决编译错误、配置环境变量以及运行测试。主要涉及的包有ceres-solver、abseil-cpp,以及地图格式转换等。在安装过程中可能会遇到的问题和解决方法也一并给出。
摘要由CSDN通过智能技术生成

1.更新和安装相关工具

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

2.初始化工作空间

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

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.

(2) 拉取 cartographercartographer_ros 包文件

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

在这里插入图片描述

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

在这里插入图片描述

5.初始化及安装

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

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

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

7.测试

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

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

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. 执行测试命令:
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag

成功运行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

再打开另一个终端, 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

在这里插入图片描述

还有需要注意点:

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.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值