由于该算法更新速度较快,建议使用最新版的软件包;
本次教程面向的是ros接口,如果想不使用ros来跑cartographer请参考官方教程:https://google-cartographer.readthedocs.io/en/latest/
废话不多说,let's go!
安装rosdep和wstool
sudo apt-get install -y python-wstool python-rosdep ninja-build
新建工作空间(可以与你原来的功能包公用一个工作空间)
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
rosdep install --from-paths src --ignore-src --rosdistro=${kinetic} -y
catkin_make_isolated --install --use-ninja
使用ninja进行编译,等待十分钟左右(根据电脑配置决定,我是使用的mac虚拟机,一会儿就编译好了)
在编译的过程中可能会报错,proto版本过低,Unrecognized syntax identifier "proto3". This parser only recognizes "proto2".需要进行升级:
protoc --version
可以看到protobuf的版本是2.6,需要就行升级,此处升级成最新版本,
libprotoc 3.5.1
去https://github.com/google/protobuf/releases下载最新版本,第一个文件
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache.
160819更新:官网写了,默认会安装到/usr/local路径下,但是/usr/local/lib不一定是系统路径LD_LIBRARY_PATH的一部分,因而或者将/usr/local/lib增加到系统路径LD_LIBRARY_PATH,或者指定安装路径。最好的就是指定安装到/usr路径(此时由于拷贝lib文件夹,实际上安装到/usr/lib路径),如下命令:
./configure --prefix=/usr
一般不需要进行设置的;
此时再查看protobuf的版本已经是现在最新的3.5.1版本了,重新运行
catkin_make_isolated --install --use-ninja
最后不要忘记
source install_isolated/setup.bash
或者将这一句加到bashrc中来,这样应该可以顺利结束了,注意:重新编译的时候需要将编译生成的build_isolated,devel_isolated和install_isolated三个文件夹删除,再重新编译;
下载测试数据包
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}/cartographer_paper_deutsches_museum.bag
正常情况下, 可以看到如下图所示的结果了:
后边我会带来拜托ros的该slam算法的应用,大家有兴趣的可以多多留言进行交流,本人邮箱:[email protected]