提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
cartographer是google开发的实时室内SLAM项目,cartographer采用基于google自家开发的ceres非线性优化的方法,cartographer的量点在于代码规范与工程化,非常适合于商业应用和再开发。与此同时,cartographer基于submap子图构建全局地图的思想,能有效的避免建图过程中环境中移动物体的干扰。另外,cartographer支持多传感器数据(odometry、IMU、LaserScan等)建图,支持2D_SLAM和3D_SLAM建图。
故用源码安装,学习一下其思想。
一、ROS下命令行安装(简单,稍微提一下)
sudo apt-get update
sudo apt-get install ros-<your ros version>-cartographer* # 安装全部关于cartographer的包
其中,<your ros version>
指的是ROS的版本,我的是melodic
结束
二、源码安装cartographer(无ROS也可以)
官网文档:https://google-cartographer.readthedocs.io/en/latest/index.html#
官方要求:
Ubuntu系统:64bit-18.04+
gcc版本:6.3.0、7.5.0、9.3.0
我用gcc5.5.0,就疯狂报错,最后加上c++11的标准才通过的,安装完了才看到官网对系统的要求
proto版本:3.0+(我自己系统是3.3.0,所以本教程没有安装proto的部分)
ceres-solver版本:1.12.0、1.13.0(有看到帖子说11和14版本无法成功安装,我用的1.13.0)
1. 安装依赖与编译工具
对于工具:需要用到wsool和rosdep。
为了加快编译,我们使用ninja工具进行编译。
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
2. 初始化(创建)工作空间
mkdir -p ~/install_bag/carto_ws #路径自己设
cd ~/install_bag/carto_ws
wstool init src
3. 加入cartographer、cartographer_ros的功能包并更新依赖(继续在carto_ws目录下进行操作)
wstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall
wstool update -t src
4. 添加ceres-solver,重新更新src文件夹
修改src/.rosinstall文件,添加ceres-slover下载路径,在文件末尾加如下语句即可:
- git:
local-name: ceres-solver
uri: https://github.com/ceres-solver/ceres-solver.git
version: 1.13.0
回到carto_ws文件夹下,更新
wstool update -t src
5. 安装依赖并下载cartographer相关的功能包
sudo rosdep init
rosdep update
这里一直是老大难问题,建议直接科学上网,如果没条件就手机热点多试几次,我是接热点过的,多试几次就行,实在不行其实也不影响后续的操作(除非你装ros时完全没有rosdep过),一般没啥问题。
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
成功的结果就这样(rosdep失败了就再试几次,连热点能过的):
6. 使用脚本安装编译abseil-cpp库
在carto_ws路径下输入:
src/cartographer/scripts/install_abseil.sh
7. 编译和安装
catkin_make_isolated --install --use-ninja
如果成功的话就是完成了,但是呢,我会出现些奇奇怪怪的问题,其实就是gcc版本太低,安装的时候并不知道:
上面只是编译到cartographer
包出错的错误信息,实际上cartographer_ros
也还是报错。
解决方法:
给abseil、cartographer、cartographer_ros
(这里面有三个子文件夹)的CMakeLists
文件添加c++11标准。
abseil库:
直接在脚本文件install_abseil.sh
内加上一句:-DCMAKE_CXX_STANDARD=11 \
即最后变成:
#...省略号
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl \
-DCMAKE_CXX_STANDARD=11 \
..
#...省略号
cartographer、cartographer_ros(三个子文件夹,即这处一共修改4个cmake文件):
在CMakeLists
文件中,在Project(...)
后另起一行加入:set (CMAKE_CXX_STANDARD 11)
上面这个语句适用于cmake版本3.1+
如果cmake版本低于3.1,则加入:
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
最后在重新编译一次,就可以成功了
8. 测试
下载慢的话,可以直接到网站里下载。
2D
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
3D
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-04-05-14-14-00.bag
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag
3D包个人觉得没必要,9.1G,算了算了。
9. 乱七八糟的问题
过几天重新装的时候:
当进行rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
时报错。
报错信息:
ERROR: the following packages/stacks could not have their rosdep keys resolved to system dependencies:
cartographer_turtlebot:
Cannot locate rosdep definition for [turtlebot_bringup]
出现问题原因:不详(请dalao评论区指教)
解决方法:
执行以下命令通过,忽略依赖问题,为什么这么做,不是很懂。明明依赖全装了。
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y -i -r
借鉴于:https://blog.csdn.net/qq_38758049/article/details/121004421
总结
古月居论坛是个挺好的学习论坛。
记录于大年初二凌晨,愿新的一年科研顺利、身体健康。
Reference
- https://blog.csdn.net/hiram_zhang/article/details/88374517(小虎哥哥爱学习)
- https://blog.csdn.net/weixin_45140945/article/details/111063528(挺完整的安装教程帖,强推)
- https://www.guyuehome.com/36532(古月居论坛帖)
- https://blog.csdn.net/weixin_39458342/article/details/103276265(脚本安装,我没试过)
- https://blog.csdn.net/mimiduck/article/details/111869968(CMAKE添加c++11支持)