其他内容汇总请看:
SLAM常用的2D、3D算法复现以及仿真汇总_多机器人slam复现-CSDN博客
之前完成了用安装包的方式进行复现cartographer,考虑到学习源码的问题,现在进行cartographer的源码安装方法,报错均按数字在后面列出原因和解决办法
目录
1.安装依赖
2.安装protobuf3
3.创建工作空间,下载cartographer
4.安装Ceres-solver
5.编译cartographer
6.编译安装
7.测试
1.安装依赖(报错0)sphinx需要替换成提示的包
特别注意自带protobuf的请不要安装下面倒数第二个!!!!(2025.4.1更新:我后续测试发现容易出现版本问题,且不易解决,ubuntu20.04用自带的protobuf即可,不用再安装,其他版本可先去查询是否有再安装该包)
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
2.安装protobuf3
2.1卸载ros自带的protobuf2
sudo apt-get remove libprotobuf-dev
which protoc
###显示protoc的路径如果没有显示则下面这条命令省略
rm /usr/local/bin/protoc
###以which protoc显示的路径为准,默认一般为usr/bin/protoc
完成卸载
2.2安装 protobuf3
1.安装依赖库
sudo apt-get inst
all autoconf automake libtool curl make g++ unzip
2.git submodule update --init --recursive
###这一步克隆子模块必须有,否则后面会报错(报找不到文件的错)
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 protobuf
###运行脚本
./autogen.sh
./configure
make
###如果没有前面的克隆子模块,make check会失败但是可以继续make install,后续使用可能出现问题
make check
sudo make install
sudo ldconfig
4.检查protobuf相关信息
###输出protobuf版本信息则表示安装成功
protoc --version
###查看安装位置
which protoc
###默认下载位置为 /usr/local/bin/protoc
###carto的搜索protoc的路径为/ usr/bin/protoc,选择直接copy过去
sudo cp /usr/local/bin/protoc /usr/bin
3.创建工作空间,下载cartographer源码
mkdir carto_ws
cd carto_ws
mkdir src
catkin_init_workspace
cd src
git clone https://github.com/googlecartographer/cartographer_ros.git
git clone https://github.com/googlecartographer/cartographer.git
git clone https://github.com/ceres-solver/ceres-solver.git
4.安装Ceres-solver(报错1,2)
###接上面3内容
###出现问题比较大,建议直接看报错2的方法
cd ceres-solver
mkdir ceres-bin
cd ceres-bin
cmake ..
###########cmake ..报错1
#线程报错可以减少线程数,报错2
make -j6
####可以跳过make test 直接下一步
make test
sudo make install
5.编译cartographer(报错3,4,5,6)
cd carto_ws
###rosdep update ###报错3
rosdep update
###注意修改为自己ros版本对应的......报错4
rosdep install --from-paths src --ignore-src --rosdistro=noetic -y
cd src/cartographer/
mkdir build
cd build
cmake .. ###报错5
####报错6,报错7
make -j6
###可能会报错,可以跳过make test
make test
sudo make install
6.编译安装报错7
cd carto_ws
catkin_make_isolated --install --use-ninja
###我采用的catkin_make_isolated,但是在进度到100%报错,可采用下面的catkin_make_isolated --install --use-ninja
###注意编译了再编译会报错,如果编译了报错再运行下面的,删除camkecache.txt
rm -f `find -name CMakeCache.txt`
1和2选一个,我用的1
1. catkin_make_isolated###需要很长时间(下次编译会很快完成)
###报错7
2. catkin_make_isolated --install --use-ninja###需要很长时间(下次编译会很快完成)
source install_isolated/setup.bash
7.测试
7.1测试数据bag下载
1.下载官方数据集进行测试,对我也是网络问题下载不了,因此我在别人云盘上下载的,我给出链接
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/b2-2016-04-05-14-44-52.bag
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/b2-2016-04-27-12-31-41.bag
2. 数据集下载的云盘链接:
Cartographer 数据集国内地址_cartographer数据集下载-CSDN博客
cd carto_ws
source ./devel_isolated/setup.bash
#####bag_filename:=(bag所在文件位置+bag包名)
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=/home/ply1/bagfiles/cartographer_paper_deutsches_museum.bag
7.2测试结果
报错汇总:
报错0 这里报错找不到 python-sphinx,
解决办法:按他的要求sudoapt-get install新的两个sphinx-doc 和 sphinx-common
报错1显示没有找到carto_ws/src/ceres-solver/third_party/abseil-cpp库,打开一看果然没有
解决办法:安装abseil-cpp,先cd你报错的地方,我这里是carto_ws/src/ceres-solver/third_party/文件夹下,然后:
#####cd到third_party文件下
git clone https://github.com/abseil/abseil-cpp.git
cd abseil-cpp
mkdir build
cd build
###cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_CXX_FLAGS=-fPIC
cmake ..
make -j4 ###多线程
sudo make install
报错2
解决办法:重新安装别的版本
wget ceres-solver.org/ceres-solver-1.13.0.tar.gz
解压压缩包
cd ceres-solver-1.13.0
mkdir build
cd build
cmake ..
make
make test #有必要测试一下是否有问题
sudo make install
make test有结果则没问题继续返回全面进行操作如下:
报错3,运行rosdep update,报错:
解决方法(这里两种,我是第二种解决的,可以先试试)
1.更改google域名服务器
sudo gedit /etc/resolv.conf
将原有的nameserver这一行注释,并添加以下两行:
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器
保存退出,执行
sudo apt-get update
再执行
rosdep update
重新执行,需要等待一点时间
rosdep update
2.若上述方法不行,看此链接方法,我是成功了
ROS rosdep update更新失败(简单解决)_ros学习——rosdep update出现的错误unable to process source-CSDN博客
报错4
解决办法:
1.注释carto_ws/src/cartographer下的package.xml文件
2.并且在src/cartographer/scripts文件目录下打开终端运行
./install_abseil.sh
1.注释package.xml如下图所示:
2.运行install_abseil.sh文件
报错:报错原因缺少libabsl库相关文件,重新安装libabsl库还是使用脚本安装,在cato_ws/src/cartographer/scripts/install_abseil.sh里面会有脚本install_abseil.sh,结果如图:
报错5,找不到libabsl.flags.a文件
解决办法:cmake找到的是你本机的libabsl,不是你新安装的,删除libabsl的build,重新编译(总感觉在libabil重复弄,有大佬知道的可以指点一下,我目前是这样操作的)
采用脚本安装install_abseil.sh
1.cd到/carto_ws/src/cartographer/scripts/abseil-cpp
打开终端运行./install_abseil.sh
进入本目录下的libabil-cpp文件下的build
mkdir build
cd build
cmake ..
make
sudo make install
报错6,没有链接到
解决方法
###看是否在/usr/local/stow/absl/lib目录下,如果没有
echo $LD_LIBRARY_PATH
###链接LD_LIBRARY_PATH的位置
export LD_LIBRARY_PATH=/usr/local/stow/absl/lib:$LD_LIBRARY_PATH
cd /home/ply1/carto_ws/src/cartographer/scripts/abseil-cpp
删除build
mkdir build
cd build
cmake ..
make -j6
sudo make install
报错7,居然在100%给我报错,气死了
报错原因: abseil-cpp 中的共享库未使用 -fPIC 标志进行编译。
解决办法:采用-fPIC的方法对abseil-cpp进行编译
###如果编译了则先删除build再重新编译
mkdir build
cd build
cmake .. -DCMAKE_CXX_FLAGS=-fPIC
make
sudo make install