在ubuntu18+ros melodic下使用如下命令即可进行二进制安装cartographer ros,但是有时候需要修改其中的源码,那只能进行源码安装了。
sudo apt-get install ros-melodic-cartographer*
同时官方也推荐使用wstool和rosdep构建其ROS运行环境。
根据官方教程,我们只需进行如下步骤,即可完成cartographer源码安装。
步骤1:安装wstool、rosdep、ninja
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
再安装一些依赖
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
步骤2:构建新的工作空间
cd ~
mkdir carto_ws
cd carto_ws
wstool init src
wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
wstool update -t src
其中,倒数第二条命令,是进行包下载的命令,在国内往往会失败。通过科学上网,在浏览器中打开https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
发现了两个如下两个连接,是cartographer相关的包仓库,把它下载下来(没有科学上网的童鞋也可以下载,即使网速慢了些)。
https://github.com/cartographer-project/cartographer.git
https://github.com/cartographer-project/cartographer_ros.git
把下载下来的包解压,并放到/carto_ws/src下
步骤3:更新依赖
官网上通过下面命令更新依赖。
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
# Only on Ubuntu 16 / ROS Kinetic: src/cartographer/scripts/install_proto3.sh
你会发现rosdep有问题,不用查了,网络问题,上面三个步骤,我们直接跳过,因为在一开始我们把大部分依赖安装完了。
步骤4:下载安装ceres-solver
通过下面网址下载ceres-solver包后,解压,放到home目录下
http://ceres-solver.org/ceres-solver-1.13.0.tar.gz
运行下面命令
#切换到源目录
cd ceres-solver-1.13.0
#编译
mkdir build
cd build
cmake ..
make
#安装
sudo make install
步骤5:手动安装abseil-cpp库
通过下面网址下载abseil-cpp库
https://github.com/abseil/abseil-cpp.git
下载好,解压到/carto_ws/src下,并重命名为abseil-cpp。执行下面命令进行编译和安装
cd ~/carto_ws/src
set -o errexit
set -o verbose
cd abseil-cpp
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
提示:如果遇到C++11标准的问题而编译不下去的话,在CMakeLists.txt中添加下面一行代码即可(建议添加到第二第三行附近):
add_compile_options(-std=c++11)
步骤6:编译工作空间
cd ~/carto_ws
catkin_make_isolated --install --use-ninja
效果:出现Finished processing package 则表示成功
如果遇到相关的依赖问题,可以参考底下“补充”的内容。
步骤7:生效环境
sudo gedit ~/.bashrc
在最下面加入
source ~/carto_ws/install_isolated/setup.bash
并source ~/.bashrc
进行生效
步骤8:验证
- 在home目录下新建carto_map_bag文件夹:
mkdir -p ~/carto
通过下面命令下载数据包
https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
- 复制到carto_map_bag下
运行命令,其中tanunat是本人用户。
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=/home/tanunat/carto_map_bag/cartographer_paper_deutsches_museum.bag
- 效果
篇尾:修改完代码后需运行catkin_make_isolated --install --use-ninja
命令进行重编译。
补充:
- 遇到protobuf缺失,运行下面指令,其中
git clone https://github.com/google/protobuf.git
可以先通过浏览器下载好,再拷贝进去,会快很多。
sudo apt-get install autoconf automake libtool curl make g++ unzip
git clone https://github.com/google/protobuf.git
cd protobuf
./autogen.sh
./configure
make -j4
sudo make install
sudo ldconfig
- 遇到pcl缺失,执行下指令:
sudo apt-get install ros-melodic-pcl-ros
sudo apt-get install ros-melodic-pcl-msgs
- 本人使用
catkin_make_isolated --install --use-ninja
编译的时候,时常出现爆内存的情况(可以使用htop来查看内存情况),当出现爆内存了,我们可以使用下面命令来减少编译时候的进程使用数,从而减少内存使用量。其中-j1
是“使用一个进程数量”的意思,当然你也可以改为-j2
或-j4
catkin_make_isolated --install --use-ninja -j1
- 多个source不成功问题:
在~/.bashrc里source多个工作空间的时候,只需要写一个source即可,后面加入工作空间的地址并以空格分隔,如下面命令,直接source成功了两个工作空间。
source ~/carto_ws/install_isolated/setup.bash ~/qxrobot_ws/devel/setup.bash