任务动机:快速完成基于Ubuntu18.04的Cartographer以及Cartographer_ros安装。
任务描述:分步安装验证后,将步骤合并成安装脚本。
Cartographer由谷歌一直在维护,从之前的tf1到现在melodic版本上的tf2_ros都有更新支持。而且cartographer所依赖的库也在一直更新,包括abseil-cpp,ceres-solver,protobuf等,其依赖的版本混乱,并不能相互兼容。经过测试,在2019年的某个版本解决好依赖问题之后,同样的方法在2020年clone新的官方代码就编译出错了。并且官方只更新代码,并没有对安装文档进行对应的更新,所以直接按照cartographer/scripts中的安装脚本操作,而又使用最新代码,是必然会出错的。为了解决此问题,本仓库固化依赖以及cartographer的版本,经过多次测试,该方法有效。
版本固化时间为2020年07月01日16:58:57。
该仓库的cartographer以及cartographer_ros代码均为笔者固化版本时官方github最新代码,依赖调教好版本的依赖包也都已经放在dependencies文件夹,所有代码均使用cmake编译方式,无官方推荐的ninjia(对持续源码修改以及开发不方便),该仓库的方法不保证对后续谷歌更新的cartographer以及cartographer_ros有效,请使用本仓库下的代码版本。建议cartographer_ros将仓库克隆到catkin_ws/下与src平级目录,后续修改源码或者查看代码实现可直接跳转。
按照本文所介绍的安装方法你可以获得以下便利:
在ubuntu16.04上一键编译和安装cartographer和cartographer_roscartographer库采用CMake方式编译,而非谷歌所使用的ninjiacartographer工程可在QtCreator中直接打开和编译更改cartographer源码后可在之前的编译基础上继续编译,减少重复编译浪费时间cartographer_ros仓库可直接放到ROS工作空间一同编译和修改cartographer_ros可使用ros-qt-plugin在QtCreator中修改代码,可随意进行函数跳转cartographer_ros的代码在QtCreator中可直接跳转到所安装的cartographer仓库的代码(而非本系统安装的库),方便同步修改以下过程为笔者手动固化安装版本的详细过程,其中的脚本已集中放在了install.sh脚本中支持一键运行了,用户无需再进行该过程。
给出该过程是为了用户参考和了解所固化的具体版本号。
版本:lts_2020_02_25
# Install abseil-cpp cd ~/Downloads git clone https://github.com/abseil/abseil-cpp.git cd abseil-cpp git checkout lts_2020_02_25 mkdir build cd build cmake .. make -j2 sudo make install版本:1.13.0
# Install ceres solver cd ~/Downloads git clone https://github.com/ceres-solver/ceres-solver.git cd ceres-solver git checkout 1.13.0 mkdir build cd build cmake .. make -j2 sudo make install版本:master@d4c5992352aae1ed18f44c1a40d2149006bf8704
# Install prtobuf 3.0 cd ~/Downloads git clone https://github.com/protocolbuffers/protobuf.git cd protobuf git checkout d4c5992352aae1ed18f44c1a40d2149006bf8704 mkdir build cd build cmake .. make -j2 sudo make install sudo ldconfig此处注意如果安装完没有执行sudo ldconfig指令时会报错找不到shared libraries protobuf.so.23。
版本:master@e5894cce1f8047d5c807158711e468b3f5550f1a
# Install cartographer cd ~/Downloads git clone https://github.com/cartographer-project/cartographer.git git checkout e5894cce1f8047d5c807158711e468b3f5550f1a cd cartographer mkdir build cd build cmake .. make -j2 sudo make install版本:master@be4332b3385b5eea2511d11de5cc6792ecb4af2e
# Install cartographer ros mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/cartographer-project/cartographer_ros.git git checkout be4332b3385b5eea2511d11de5cc6792ecb4af2e cd ~/catkin_ws catkin_make -j2此处进行编译时请使用catkin_make -j2,如果直接使用catkin_make则会全线程启动编译,会导致内存不足,从而报错编译器内部错误。
使用该脚本安装前请确保已安装ROS-Melodic。
./install.sh为了避免与用户本机的ros工作空间中已存在的cartographer_ros包可能发生的冲突,安装脚本会在用户目录新建一个carto_ws的ROS工作空间,运行完成后用户可自行选择移到自己的工作空间中一同使用。
一键安装脚本可直接在AMD64架构的板子上运行,在ARM64架构的板子上会报不存在/usr/lib/aarch64-linux-gnu/libGL.so,导致后续的cartographer_rviz编译失败,因而要链接生成,请注意取消脚本中line52的注释。
sudo ln -s /usr/lib/aarch64-linux-gnu/libGL.so.1 /usr/lib/aarch64-linux-gnu/libGL.so修改cartographer源码后需要编译安装才能生效,从而提供给cartographer_ros使用。
cartographer重编译可直接运行:
./rebuild_install.sh然后再去编译cartographer_ros所在的ROS工作空间。
谷歌官方文档页面给出的数据集可直接使用本仓库的下载脚本get_carto_bags.sh将所有bag文件下载到本地~/data/carto_bags/中。
./get_carto_bags.shhttps://download.csdn.net/download/zhzwang/12806260