文章目录
1、安装依赖
1.1、安装Eigen3
sudo apt-get install libeigen3-dev
# 构建ceres作为一个静态的库
sudo apt-get install libsuitesparse-dev
1.2、 安装lua5.2
sudo apt install lua5.2
1.3、安装abseil
下载abseil安装包,安装abseil静态连接库:
cd abseil-cpp
mkdir build && cd build
cmake ..
make
sudo make install
安装abseil的动态库:可以将之前的build文件夹删掉,重新建立build文件夹
mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=ON
make
sudo make install
1.4、 安装其他相关依赖
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
sudo apt-get install cmake
sudo apt-get install build-essential
sudo apt-get install libgoogle-glog-dev
sudo apt-get install libatlas-base-dev
2、安装包下载与安装
谷歌官方推荐了三个安装包,分别为cartographer、cartographer_ros以及ceres-solver。
2.1、构建cartographer_ws
# 创建cartographer_ws工作空间
mkdir -p cartographer_ws/src
cd cartographer_ws/src
catkin_init_workspace
cd ..
catkin_make
将之前下载的三个源码包解压并放到cartographer_ws/src文件夹下:
2.2、构建ceres
cd ceres-solver
mkdir ceres-bin
cd ceres-bin
cmake ..
make
make test
sudo make install
注意:在编译过程中如果提示缺少Lua,那么请按照 1.2 进行,或者源码安装:
(1) 下载Lua包,先安装必要的依赖关系
sudo apt-get install build-essential
sudo apt-get install libreadline
sudo apt-get install libreadline5-dev
如果没有找到对应的包,在两次tab键后,选择最相关的一个包安装即可。
(2) 将下载下来的Lua包解压到自定义目录下,进行安装
make linux
sudo make install
(3) 测试是否安装成功
在命令行输入,显示如下,说明成功,使用ctrl+d退出lua:
$ lua
Lua 5.2.3 Copyright (C) 1994-2013 Lua.org, PUC-Rio
>
2.3、安装porto3
porto为goole的一个对文件操作的库
直接将下载好的protobuf放在cartographer/scripts/目录下就行
编译安装protobuf
cd protobuf
mkdir build
cd build
cmake -G Ninja \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_BUILD_TYPE=Release \
-Dprotobuf_BUILD_TESTS=OFF \
../cmake
ninja
sudo ninja install
2.4、工程编译
cd cartographer_ws
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
#Build and install.这一步会花费很长的时间,耐心等待
catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash
注意:若上面rosdep update执行失败,可以删除已存在的/etc/ros/rosdep/sources.list.d/20-default.list,重新sudo rosdep init && rosdep update
3、运行测试
3.1、数据集下载并测试
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
3.2、运行BUG
1、在运行例子时,如果出现
ERROR: cannot launch node of type [cartographer_ros/cartographer_node]: can't locate node [cartographer_node] in package [cartographer_ros]
ERROR: cannot launch node of type [cartographer_ros/cartographer_occupancy_grid_node]: can't locate node [cartographer_occupancy_grid_node] in package [cartographer_ros]
ERROR: cannot launch node of type [cartographer_turtlebot/cartographer_flat_world_imu_node]: can't locate node [cartographer_flat_world_imu_node] in package [cartographer_turtlebot]
类似与上述的错误。
第一、 检查你的包路径是否已经在ROS路径之中,通过gedit~/.bashrc 可以添加修改。
第二、 回到根目录,cd进你的工作空间,输入:
source devel/setup.bash
source install_isolated/setup.bash
这两句很重要,如果失败就关闭终端重新来一次,这两句话是要在每次运行前都要输入的。
2、在编译过程中没有问题,运行时却查找不到abseil动态库
error while loading shared libraries: libabsl_hash.so: cannot open shared object file: No such file or directory
error while loading shared libraries: libabsl_synchronization.so: cannot open shared obj
ect file: No such file or directory
原因是由于/usr/local/lib这个路径不是系统的默认搜索路径,因此,找不到这个动态库。
解决方法:将/usr/local/lib路径添加到系统默认的搜索路径中
sudo gedit /etc/ld.so.conf
在文件末尾添加需要搜索的路径/usr/local/lib,如下:
include /etc/ld.so.conf.d/*.conf
/usr/local/lib
使修改生效
sudo /sbin/ldconfig
3.3、测试结果
4、参考链接
4.1、cartographer安装相关教程
1、https://blog.csdn.net/SimileciWH/article/details/82939752
2、https://blog.csdn.net/qq_36059536/article/details/107418777
3、https://zhuanlan.zhihu.com/p/265081520
4.2、bug解决相关教程
1、https://blog.csdn.net/Jinxiaoyu886/article/details/90485704
2、https://blog.csdn.net/zyh821351004/article/details/106334347