安装Cartographer教程及踩坑
作者:互联网
Cartographer安装教程及踩坑实录
版权声明:本文转载自CSDN博主「白色小靴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44684139/article/details/104708387
因为在用胡春旭的书学习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.准备工作
- 解决一下github克隆慢的问题(网上很多帖子,不能fq的话考虑使用修改hosts)
- 加入谷歌服务器域名
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
这一行命令做铺垫的。(否则会很慢,这个以后再说)
- 尽量连接手机热点进行下面的下载操作
- 安装一些必要的依赖包:
sudo apt-get install -y \
cmake \
g++ \
git \
google-mock \
libboost-all-dev \
libcairo2-dev \
libeigen3-dev \
libgflags-dev \
libgoogle-glog-dev \
liblua5.2-dev \
libsuitesparse-dev \
libwebp-dev \
ninja-build \
protobuf-compiler \
python-sphinx
注意,没有 libprotobuf-dev 这个东西!!!!这是下面换版本装的
其次注意,有些包是有版本要求的,比如gmock(google-mock),必须用上述方式安装,如果你之前用编译的方式进行安装的话。。。。。自求多福吧,因为有些库增加了C++11的新特性,但并不能与cartographer的安装依赖匹配。
当然,eigen这种库版本可能影响不大,就是安装位置可能需要改一改之类的影响不大。
1.安装protobuf3
这是非常重要的一步,因为我之前安装ros的时候是proto2,这个低版本是不适用于cartographer的,因此重装proto3。
参考:https://blog.csdn.net/FK2016/article/details/83375048
当然,不用看参考,看我这里:
- 卸载ros自带proto2
# sudo apt-get remove libprotobuf-dev
# which protoc
// 运行完“which protoc”会显示一个protoc的路径,如果没有显示则下面这条命令不必执行
# rm /usr/local/bin/protoc
// 具体路径以“which protoc”显示的为准,如果是默认的话更有可能是usr/bin/protoc
到此,低版本的protobuf卸载完成。
- 安装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
- 安装工具
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
- 创建工作区间"carto_ws"并初始化
mkdir carto_ws
cd carto_ws
wstool init src
- 加入cartographer_ros.rosinstall并更新依赖
如果没有进行准备工作,将谷歌服务器域名加入的话(0-2),merge这一步可能就会链接超时了。如果仍然实在不行,请参考https://www.it610.com/article/1288240522342739968.htm直接向文件中写入内容即可。
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
最终在你的工作空间中会出现 :
- 安装依赖并下载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成功几率会变大,如果卡住可以重新再来几次
- 编译并安装
catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash
如果catkin_make_isolated --install --use-ninja这一步报错了(如:…proto…未定义的引用的错误等)!那么不妙,可能是你的protoc3未安装成功或protoc2有残留,当然最乐观的情况是你没有调整protoc的位置,只需要回到步骤1-2-3去调整位置即可,否则需要卸载干净protoc2或者3,并重新安装protoc3,并重新进行所有步骤
也会报一些其他奇葩的错误,如gmock库需要C++11标准,等等。就是因为依赖库的版本不对。需要将其卸载并重新安装。重新安装的话,就是用上面的一开始0.准备工作中介绍的安装方式。当然了,这里可能得用sudo apt-get install … --reinstall
如果没报错,则安装成功。
当然,可以将最后这行命令放到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
版权声明:本文为CSDN博主「白色小靴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_44684139/article/details/104708387
标签:cartographer,protoc,教程,sudo,Cartographer,https,ros,安装 来源: https://blog.csdn.net/jianyoutianxia99/article/details/120901805