接触ROS以来,一直把ROS 官方推荐的gmapping 建图算法当做正宗,成也gmapping,败也gmapping,直到昨天,和一个朋友聊起来,才知道,他们公司用的是Cartographer 建图算法,效果很不错,克服了在gmapping下无法用手推着机器人建图的弊端,看到demo视频后,一种相见恨晚之意油然而生,于是今天自己摸索了一天,终于把它给安装到电脑上了.安装过程遇到了很多问题,虽然不复杂,但很拧人.打算把它记下来,以俟读者.
1.介绍:
Cartographer 的介绍讲的最好,最简洁,最权威的莫过于官网.虽然是英文,只要你一字一句的读,一定会有很有收获,也少走不少弯路.官网
2.安装:
2.1.在这个环节,我要多说两句,因为走了些弯路.一开始,我也是先看博客,结果折腾了几个小时没有任何结果.其实官方的安装流程是简洁的.编译安装步骤,参照着做,一点问题都没有.最终要的是要有VPN.说到谷歌,每次用它的东西,都要在这个问题上折腾的筋疲力尽.其他的方法,试过了,没有一个成功的,可能我没那么幸运吧.如果你觉得和我一样,就老老实实的申请个vpn,安装起来很快.大概十几分钟就装好了.
2.2. rosdep update 这个环节如果你没有用vpn的话,是会出问题的,在没有用vpn之前,我也一度安装到这里就进行不下去了,朋友说这是网络问题,推荐用联通的4G而不要用电信或者移动的,效果是有的,但不足以解决问题.
最后在vpn的协助下一路进行到最后一步.
catkin_make_isolated --install --use-ninja
在这里又报错了.
Could not find a configuration file for package “Eigen3” that is compatible with requested version “3.3”.
这个错误重点在关键词Eigen3上,应该版本不兼容,在对应的CMakeLists.txt中可以看到,由于BA优化在小于3.3.4版本的Eigen中可能失败,所以要求Eigen的版本不小于3.3.4。那我就看下我当前的版本是多少.
Eigen的版本可以在 /usr/include/eigen3/Eigen/src/Core/util/Macros.h 中查看,我的版本为3.2.92,所以在 find_package 3.3.x版本的Eigen时会出现错误。
解决方法
卸载原来的Eigen,安装3.3.4之后的新版本。
首先卸载Eigen,定位到相关文件,直接手动删除。
sudo updatedb
locate eigen3
sudo rm -rf /usr/include/eigen3 /usr/lib/cmake/eigen3 /usr/share/doc/libeigen3-dev /usr/share/pkgconfig/eigen3.pc /var/lib/dpkg/info/libeigen3-dev.list /var/lib/dpkg/info/libeigen3-dev.md5sums
然后下载安装3.3.4版本之后的Eigen,apt-get不能指定Eigen版本,这里推荐手动安装。
下载地址 https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.gz 。我下了最新的3.3.7版本。
安装依赖项
1 sudo apt-get install libopenblas-dev
2 sudo apt-get install --no-install-recommends libboost1.58-all-dev
3 sudo apt-get install libx11-dev
4 sudo apt-get install libgl1-mesa-dev
5 sudo apt-get install libglu1-mesa-dev
6 sudo apt-get install freeglut3-dev
7 sudo apt-get install doxygen
8 sudo apt-get install cmake
9 sudo wget https://nchc.dl.sourceforge.net/project/glew/glew/2.1.0/glew-2.1.0.tgz --no-check-certificate
10 sudo tar -xzvf glew-2.1.0.tgz
11 cd glew-2.1.0/
12 sudo make
13 sudo make install
14 sudo ldconfig -v
安装Eigen3.3.7
1 mkdir build
2 cd build
3 cmake …
4 make
5 sudo make install
6 sudo ldconfig -v
apt-get安装eigen3的路径为 /usr/include/eigen3 ,这里也保持一直;此外,需使用下面命令将Eigen映射到 /usr/include 路径下,因为在很多程序中include时经常使用#include <Eigen/Dense>而不是使用#include <eigen3/Eigen/Dense>,不映射的话一些程序在编译时会因找不到Eigen/Dense而报错。
sudo cp -r /usr/local/include/eigen3 /usr/include/eigen3
sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen
至此大功告成,现在再安装Ceres就不会报错了。
3.Demo:
参照 官方的文档 使用它录制好的rosbag数据官方文档
---------------------------------------结束------------------------------------------------