![24b05e32056fd22315acbc5f95a47e40.png](https://img-blog.csdnimg.cn/img_convert/24b05e32056fd22315acbc5f95a47e40.png)
官方推荐使用wstool和rosdep构建其ROS运行环境,为了提高构建速度,推荐使用Ninja系统:
$ sudo apt-get update
$ sudo apt-get install -y python-wstool python-rosdep ninja-build
此外,再安装一些依赖:
$ 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
构建新的工作空间:
$ cd ~
$ mkdir catkin_ws
$ cd catkin_ws
$ wstool init src
$ wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
$ wstool update -t src
以上倒数第二条指令会创建一个文件,写进去cartographer涉及到的三个repo地址,最后一条指令其实就是执行各自的git clone操作。
执行倒数第二条操作,有时候会报错,提示信息如下:
content.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
ERROR in config: Unable to download URL [https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall]:
<urlopen error [Errno 111] Connection refused>
查了一下,有的说可能是某些证书问题导致的,解决办法就是执行这个操作时连自己手机热点,试了,有效;另外,连公司网络怎么都过不去,但是连家里无线就可以。
执行完最后一条指令,发现src目录下只有cartographer和cartographer_ros两个文件夹,其实需要的东西还少一个ceres-solver,被墙的原因,科学上网应该可以,我自己是在github上直接搜的,然后拉到本地编译安装。
接下来会说一下这个库以及其它依赖的安装,但在这之前,先大概说一个下载下来的这三个packet的基本功能。
1. cartographer
主要的slam算法在这个里面,主要包括前端的slam会产生submap列表,基于短时间比较稳定这一特性;优化部分会做回环,现在还不确定只在回环的时候做优化还是说所有的node和submap之间都可以做优化,像landmark这种有绝对位姿的观测也是放在优化这里面。
2. cartographer_ros
这个模块相当于一个接口,基于ros的通信机制把传感器和算法模块建立连接,所以主要是做一些话题的订阅发布,没有这个模块的话算法也能运行,但是要自己实现通信。
3. ceres-solver
google开源的一个优化框架,我现在看到的是拿一些约束构造最小二乘模型,然后调用非线性的求解方法进行优化,像L-M这些。
框架的事大概提一下,后面会详细说,现在继续依赖的安装。
先是Ceres-solver:
VERSION="1.13.0"
$ git clone ceres-solver/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
这里把远程repo的地址换成了git上可以直接pull下来的,可以不用翻墙,比较重要的就是一定要切换到指定的分支或者tag,可以避免不必要的冲突。
然后是abseil-cpp:
$ git clone abseil/abseil-cpp
$ 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
这个最早看过,但是现在忘了它能用来做什么,后面再看,重要的就是一定要切换分支。
还有就是protoc:
VERSION="v3.4.1"
$ git clone protocolbuffers/protobuf
$ 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
这个比较重要,网上一堆跟这个有关的错误,大概原因就是因为版本有冲突,ros自带一个protoc,2.6.1好像,然后要求的3.4.1,看网上用3.6.1,有的人能过,有的过不了。
然后有的解决方案是把ros自带的那个版本卸载了,应该是有些人可以解决问题,但是操作了一遍,那个电脑到现在还进不了图形界面,在一个新装的电脑上试的,只要选对了版本,自带的那个不用卸载也是可以的。
该装的基本就装完了,接下来参考官方指令继续:
$ src/cartographer/scripts/install_proto3.sh
这个可以不用了,上面已经确定过版本,手动安装了,接下来:
$ sudo rosdep init
$ rosdep update
$ rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
这里的第一步可能会有些问题:
ERROR: default sources list file already exists: /etc/ros/rosdep/sources.list.d/20-default.list
Please delete if you wish to re-initialize
Then you can execute
按照提示删了就可以:
$ sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
接下来就是构建和运行:
$ catkin_make_isolated --install --use-ninja
如果protoc版本不对,这里通常会出现问题,提示信息如下:
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
<== Failed to process package 'cartographer':
Command '['/home/lifeiqi/catkin_ws/install_isolated/env.sh', 'ninja', '-j8', '-l8']' returned non-zero exit status 1
Reproduce this error by running:
==> cd /home/lifeiqi/catkin_ws/build_isolated/cartographer && /home/lifeiqi/catkin_ws/install_isolated/env.sh ninja -j8 -l8
在新电脑上安装还算顺利,关于之前安装中出现的其它问题,需要等那个电脑进入图形界面才能再看到了,到时候再汇总。
然后尝试跑一些离线数据:
$ source/install_isolated/setup.bash
$ roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${DATA_PATH}/cartographer_paper_deutsches_museum.bag
奉上安装过程的参考链接,主要还是参考官方文档:
1. https:// google-cartographer-ros.readthedocs.io /en/latest/compilation.html#building-installation
2. Cartographer - Cartographer documentation
3. cartographer超详尽安装教程!_qq_26482237的博客-CSDN博客