任务动机:快速完成基于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平级目录,后续修改源码或者查看代码实现可直接跳转。
按照本文所介绍的安装方法你可以获得以下便利:
以下过程为笔者手动固化安装版本的详细过程,其中的脚本已集中放在了install.sh脚本中支持一键运行了,用户无需再进行该过程。
给出该过程是为了用户参考和了解所固化的具体版本号。
# Install the required libraries that are available as debs.
sudo apt-get update
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 \
libprotobuf-dev \
libsuitesparse-dev \
libwebp-dev \
ninja-build \
protobuf-compiler \
python-sphinx \
版本: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.sh
https://download.csdn.net/download/zhzwang/12806260