Cartographer安装教程及踩坑实录

因为在用胡春旭的书学习ros,现在看到cartographer激光slam的章节,因此安装carto

但是万万没想到,这个东西的坑如此之多!
几个重要的参考链接,感谢这些博主的引路:

https://blog.csdn.net/qq_26482237/article/details/92676267
https://blog.csdn.net/qq_40081208/article/details/101606899
https://blog.csdn.net/m0_37923410/article/details/87407841
https://blog.csdn.net/seeseeatre/article/details/84863485?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/qq_38649880/article/details/87903654?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/mrh1714348719/article/details/103803110
https://blog.csdn.net/FK2016/article/details/83375048

首先,我这里使用的是官网的安装方法(也就是书上介绍的方法)。

在这之前我们先做些非常重要的准备工作

0.准备工作

  1. 解决一下github克隆慢的问题(网上很多帖子,不能fq的话考虑使用修改hosts)
  2. 加入谷歌服务器域名
sudo gedit /etc/resolv.conf

将原有的nameserver这一行注释,并添加以下两行:

nameserver 8.8.8.8 
nameserver 8.8.4.4 

然后保存并关闭文件。这里是为了以后的wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
这一行命令做铺垫的。(否则会很慢,这个以后再说)

  1. 尽量连接手机热点进行下面的下载操作

1.安装protobuf3

这是非常重要的一步,因为我之前安装ros的时候是proto2,这个低版本是不适用于cartographer的,因此重装proto3。
参考:https://blog.csdn.net/FK2016/article/details/83375048
当然,不用看参考,看我这里:

  1. 卸载ros自带proto2
# sudo apt-get remove libprotobuf-dev
# which protoc
// 运行完“which protoc”会显示一个protoc的路径,如果没有显示则下面这条命令不必执行
# rm /usr/local/bin/protoc
// 具体路径以“which protoc”显示的为准,如果是默认的话更有可能是usr/bin/protoc
 
到此,低版本的protobuf卸载完成。
  1. 安装protobuf3.6.0
    (1) 首先安装依赖库
# sudo apt-get install autoconf automake libtool curl make g++ unzip

(2) 接下来克隆源码,注意,git submodule update --init --recursive这一步克隆子模块必须有,否则后面会报错(报找不到文件的错),当然,之前如果你没有解决github下载慢的问题(0-1),这里可能就要慢的绝望了。

# git clone -b v3.6.0 https://github.com/protocolbuffers/protobuf.git
// 上述命令表示克隆版本为3.6.0的protobuf源码
# cd protobuf
# git submodule update --init --recursive
// 该命令表示克隆protobuf的子模块,主要是gtest

(3) 编译并安装

// 进入到克隆的protobuf目录,当然,如果之前就在这个目录下不必再次cd
# cd protobuf
# ./autogen.sh
# ./configure
# make
// 如果没有克隆子模块,make check会失败但是可以继续make install,但是使用某些功能时可能会出错
# make check
# sudo make install
# sudo ldconfig
// 输出protobuf版本信息则表示安装成功
# protoc --version

最后,查看安装位置

which protoc

结果应该是:
在这里插入图片描述
可以看到,其默认下载位置为 /usr/local/bin/protoc
这是我们不想要的,因为carto的搜索protoc的路径为/ usr/bin/protoc

因此有两种调整方法,推荐第二种干脆利落:
①建立软连接

$ sudo ln -s /usr/local/bin/protoc /usr/bin/protoc

如果后悔了,如何删除软连接看这篇文章
https://blog.csdn.net/weixin_44684139/article/details/104603432
②直接copy过去

sudo cp /usr/local/bin/protoc /usr/bin

或者干脆一点手动copy

最终,安装完毕protobuf3.6的版本,并完成位置的调整。

2.安装cartographer

  1. 安装工具
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build

2.创建工作区间"carto_ws"并初始化

mkdir carto_ws
cd carto_ws
wstool init src

3.加入cartographer_ros.rosinstall并更新依赖

如果没有进行准备工作,将谷歌服务器域名加入的话(0-2),merge这一步可能就会链接超时了。

wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
输入完第一个命令后需要改文件的下载地址,另起终端输入:
gedit carto_ws/src/.rosinstall
将最后一个git来源网址由https://ceres-solver.googlesource.com/ceres-solver.git改为https://github.com/ceres-solver/ceres-solver.git
wstool update -t src

这里要注意的是更改最后一个ceres-solver的git来源网址
在这里插入图片描述
若不更改,则克隆ceres-solver的过程中会超时 time out
最终在你的工作空间中会出现 :
在这里插入图片描述
4.安装依赖并下载cartographer相关功能包
注意rosdistro=kinetic -y是根据自己ros的版本来的

rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
(我默认版本为kinetic,若是其他ROS版本相应替换)

但是这里可能会报错:

ERROR: error loading sources list:
The read operation timed out

这是rosdep update的老毛病了,如果你做了准备0-3也就是换了4G进行这些操作,这里应该很容易通过。
如果还不行,则更改等待时间:

sudo vim /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py

将DOWNLOAD_TIMEOUT = 15.0改成500

sudo vim /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py

将DOWNLOAD_TIMEOUT = 15.0改成500

sudo vim /usr/lib/python2.7/dist-packages/rosdep2/rep3.py

将DOWNLOAD_TIMEOUT = 15.0改成500

注意,三者缺一不可(当然啦,500这个数是随缘给的,比以前的数字大就行)
然后再次rosdep update成功几率会变大,如果卡住可以重新再来几次

  1. 编译并安装
catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash

如果catkin_make_isolated --install --use-ninja这一步报错了(如:未定义的引用的错误等)!那么不妙,可能是你的protoc3未安装成功或protoc2有残留,当然最乐观的情况是你没有调整protoc的位置,只需要回到步骤1-2-3去调整位置即可
,否则需要卸载干净protoc2或者3,并重新安装protoc3,并重新进行所有步骤

如果没报错,则安装成功。

当然,可以将最后这行命令放到bashrc文件中,否则每次运行demo都需要输入一遍,否则找不到launch文件
采用:

source /home/mjy/dev/carto_ws/install_isolated/setup.bash

也可以手动添加,bashrc文件位于home/下的隐藏文件。

6.尾声——测试
cartographer官网
①先下载个2D包,如
在这里插入图片描述
然后进行编译:
其格式为
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=跟上bag的路径

roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=/home/mjy/dev/carto_ws/b0-2014-07-21-12-42-53.bag

在这里插入图片描述
②再测试个3D包
在这里插入图片描述
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=跟上bag的路径

roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=/home/mjy/dev/carto_ws/b3-2016-03-01-13-39-41.bag 

在这里插入图片描述

3.补充

如果你要安装turtlebot,则还是原先的流程,新建一个工作空间,然后balabala…
只不过需要将

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

也就是需要谷歌服务器那一句改为:

wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_turtlebot/master/cartographer_turtlebot.rosinstall

就可以,其余流程一样,可参考:https://www.ncnynl.com/archives/201810/2777.html

发布了103 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44684139/article/details/104708387