ROS下编译谷歌cartographer
目录
一、介绍
2016年10月5日,谷歌宣布开放一个名为cartgrapher的即时定位与地图建模库,开发人员可以使用该库实现机器人在二维或三维条件下的定位及建图功能,cartgrapher的设计目的是在计算资源有限的情况下,实时获取相对精度较高的2D地图,目前cartgrapher主要基于激光雷达来实现SLAM。
cartographer功能功能包已经与ROS集成,但还是没有提供二进制安装包,所以需要采用源码方式进行安装。为了不与其他安装包冲突最好为cartographer专门创建一个工作空间,这里我们创建了一个工作空间catkin_google_ws,然后使用下面步骤进行安装。
二、编译安装
安装前提:
已经安装了ROS环境,如果ROS环境还没有搭建,那么点这里(注意版本对应,这里为ubuntu16对应的kinetic),中文安装教程点这里。我个人喜欢官方的安装教程,一切安装教程都源自官方,有点英语阅读能力的推荐阅读官方安装教程。
安装好ROS接下来我们就可以接下来安装cartographer功能包了。同样,我还是会给出官方的cartographer功能包安装教程,点这里,但是这回我建议阅读下官方的教程就好,但是不代表不重要,阅读参考是很有必要的,一切都源自官方,因为安装过程涉及到外网的访问被禁止,因此官方教程不好用。这也是写这篇博客的原因,废话不多说,进入安装:
1、安装工具:
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
2、初始化工作空间:
cd ~
mkdir catkin_google_ws
cd catkin_google_ws
wstool init src
3、加入cartgrapher_ros.rosinstall并更新依赖项:
wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
以上都是按照官方的教程来,接下来是重点:
执行下面这步时会发生错误:
wstool update -t src
错误如下:
ERROR in config: Error processing 'ceres-solver' : [ceres-solver] Checkout of https://ceres-solver.googlesource.com/ceres-solver.git version 1.13.0 into /home/diaoyufeng/test_ws/src/ceres-solver failed.
原因之前说过了,涉及外网访问,被禁止了,解决方案如下:
gedit ~/catkin_google_ws/src/.rosinstall
修改ceres-solver源码的下载地址为https://github.com/ceres-solver/ceres-solver.git,具体如下:
- git:
local-name: ceres-solver
uri: https://github.com/ceres-solver/ceres-solver.git
version: 1.13.0
重新执行:
wstool update -t src
4、安装依赖并下载cartographer相关功能功能包
src/cartographer/scripts/install_proto3.sh
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
5、编译并安装
catkin_make_isolated --install --use-ninja
这时如果没有错误,那么恭喜你编译成功了,如果有错误,编译到ceres-solver时报错,报错如下:
error: no type named ‘Literal’ in ‘struct Eigen::NumTraits<ceres::Jet<double, 2> >
make[2]: *** [internal/ceres/CMakeFiles/jet_test.dir/jet_test.cc.o] error 1 make[1]: *** [internal/ceres/CMakeFiles/jet_test.dir/all] error2
错误原因:与eigen3.3发生冲突。
解决办法:重新安装eigen3.2将3.3覆盖即可。
这里需要手动安装eigen3.2,下载源码通过cmake方式安装,不过值得注意的是,我本人深受鸟哥影响,习惯将源码解压放在/usr/local/src目录下进行编译安装,因此最终make install安装目录是/usr/loca/include,于是问题又来了,再次编译报错:找不到eigen!!!,仔细的看了报错信息,发现工程将eigende位置指定为绝对路径//usr/include目录下,所以当然找不到,这时重新编译eigen,加入cmake路径指定。如下:
camke -DCMAKE_INSTALL_PREFIX=/usr ..
make install
输入locate查看验证:
locate eigen3
结果如下:
6、更新环境
echo "source install_isolated/setup.bash" >> ~/.bashrc
三、cartographer测试
同样给出官方参考:官方安装参考链接:https://google-cartographer-ros.readthedocs.io/en/latest/demos.html
官方给出了2d、3d、定位等功能测试。
# Download the 2D backpack example bag.
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
# Launch the 2D backpack demo.
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
# Download the 3D backpack example bag.
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-04-05-14-14-00.bag
# Launch the 3D backpack demo.
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag
这里以2D为例:
另外,官方给出了landmark的测试例程,但是现在还需要额外安装包,具体参考见:https://zhuanlan.zhihu.com/p/50511558。
四、cartographer实体运行
同样给出官方参考链接:https://google-cartographer-ros.readthedocs.io/en/latest/your_bag.html
按照官方的推荐,官方提供了各类launch文件,官方建议在官方法发布的launch文件基础上复制修改。下面给出简单测试案例:
1.单纯2D激光测试,具体参考:https://blog.csdn.net/sunstarss/article/details/88256646
复制catkin_google_ws/install_isolated/share/cartographer_ros/launch/revo_lds.lua脚本文件并修改。
仅修改下面面两句:
tracking_frame = "horizontal_laser_link",
published_frame = "horizontal_laser_link",
里面的"horizontal_laser_link",改成你自己激光雷达的frame_id,我的是laser,一般都是laser,其余的不要动。
运行查看:
2.gazebo仿真环境测试