这里写自定义目录标题
前言
最近成功在Nvidia Xavier NX和Nvidia Xavier AGX安装并测试了谷歌的开源激光slam算法Cartographer,在此记录下过程中的一些坑。
安装过程
-
首先需要安装ROS,需要注意的是Nvidia Xavier NX和Nvidia Xavier AGX都是安装的Ubuntu18.04系统,所以安装对应的ROS版本:Ros-melodic。安装教程参考ROS官网。
Cartographer大部分教程可以参考官网,链接如下:
Cartographer官网 -
安装依赖库
sudo apt-get update
sudo apt-get install -y \
clang \
cmake \
g++ \
git \
google-mock \
libboost-all-dev \
libcairo2-dev \
libcurl4-openssl-dev \
libeigen3-dev \
libgflags-dev \
libgoogle-glog-dev \
liblua5.2-dev \
libsuitesparse-dev \
lsb-release \
ninja-build \
stow
- 安装abseil
git clone https://github.com/abseil/abseil-cpp.git
cd abseil-cpp
git checkout d902eb869bcfacc1bad14933ed9af4bed006d481
mkdir build
cd build
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl \
..
ninja
sudo ninja install
cd /usr/local/stow
sudo stow absl
abseil是google开源的C++基础库。ninja是google自己的编译器,速度更快,如果没有安装*软件的话,可能有的时候下载不再来,或者下载速度很慢,可以考虑在Window平台上下载并拷贝到Nvidia平台上。
安装步骤最好按照这个来做,否则容易造成问题,如下所示,在编译cartographer_ros时提示的错误。
过程如下所示:
我在执行make和cmake时,一开始是在build文件夹下执行sudo cmake …/ 和sudo make sudo make install 操作,在后面执行cd /usr/local/stow sudo stow absl命令时出现了问题,如下所示。
所以在编译时还是要加上官网给出的编译条件。
- 安装Ceres
VERSION="1.13.0"
# Build and install Ceres.
git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
git checkout tags/${VERSION}
mkdir build
cd build
cmake .. -G Ninja -DCXX11=ON
ninja
CTEST_OUTPUT_ON_FAILURE=1 ninja test
sudo ninja install
Ceres我是在Window平台上的Github上下载的,下载1.13.0版本即可。
5. 安装proto3
VERSION="v3.4.1"
# Build and install proto3.
git clone https://github.com/google/protobuf.git
cd protobuf
git checkout tags/${VERSION}
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
protobuf(Google Protocol Buffers)是Google提供一个具有高效的协议数据交换格式工具库(类似Json),但相比于Json,Protobuf有更高的转化效率,时间效率和空间效率都是JSON的3-5倍。注意要下载对应的版本。
我一开始参考了如下链接:
protobuf
但是没有安装成功,在后面编译cartographer_ros时,总是提示Protocol版本不对。后来按照官网的教程,一次就安装成功了。
6. 安装cartographer
需要注意的是注意安装cartographer和cartographer_ros的顺序,要先安装cartographer,再编译cartographer_ros才可以,因为cartographer_ros依赖cartographer。需要注意cartographer的版本和cartographer_ros的版本要对应一致。我在一开始编译cartographer_ros的过程中导致找不到cartographer的一些文件,就是版本没有对应一致。错误如下图所示:
- 安装cartographer_ros
最终cartographer_ros如果编译没有问题,那就是cartographer安装成功了。
8. 下载bag包并测试
bag可以从下面链接下载。
bag包下载地址
下面测试bag包。
这一步不要忘记了,不然找不到ros路径。
echo "source ~/cartographer/cartographer_ros/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
执行roslaunch。
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
HOME为home路径(~/),bag_filename为bag包所在的路径,软件会自动打开Rviz,显示定位和建图轨迹。
软件包
我把我用到的安装Cartographer所用到的软件,放在了如下百度网盘链接中。软件包包含abseil,Ceres,proto3,各个版本的cartographer_ros和cartographer,vscode,我安装中使用的是最新版本的cartographer_ros和cartographer。
提取码:1111 。
软件包百度网盘地址
下面是运行b0-2014-10-07-12-50-07.bag的建图结果。
下面是运行b0-2014-07-11-10-58-16.bag的建图结果。