一、编译安装Cartographer ROS
ROS版本为kinetic, 系统为Ubuntu16.04 ,工作空间名称为 catkin_ws。
Cartographer ROS Building & Installation
1、安装wstool and rosdep ninja(编译Cartographer ROS, 官网推荐使用 wstool 、 rosdep)
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
2、新建一个cartographer_ros 工作区(catkin_ws)
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
这步运行后如果报ceres-solver无法获取,不必着急。进入catkin_ws/src/目录后 vim .rosinstall,如下:
- git:
local-name: cartographer
uri: https://github.com/googlecartographer/cartographer.git
version: 1.0.0
- git:
local-name: cartographer_ros
uri: https://github.com/googlecartographer/cartographer_ros.git
version: 1.0.0
- git:
local-name: ceres-solver
uri: https://ceres-solver.googlesource.com/ceres-solver.git
version: 1.13.0
将最后一个git由https://ceres-solver.googlesource.com/ceres-solver.git改为https://github.com/ceres-solver/ceres-solver.git即可。
重新:
wstool update -t src
3、安装 cartographer_ros 依赖项 (proto3 and deb packages).
src/cartographer/scripts/install_proto3.sh
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y //rosdep是一个用于安装系统依赖项的命令行工具
4、编译安装.
catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash //进入工作空间
5、加载数据包测试
运行launch 和rosbag:
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
最终的slam图:
![aaa1ea37a48f04daa5ba0e91bc7ab44e.png](https://i-blog.csdnimg.cn/blog_migrate/5d9b194eedd4088722acd079a9c84afa.jpeg)
二、编译方法
我们安装的是带ROS的Cartographer ,编译安装也需用ROS编译方法:catkin_make。
catkin_make
catkin_make 是一个命令行工具,它简化了catkin的标准工作流程,它在CMake标准工作流程中依次调用了cmake 和 make。
官网提供的编译安装方法是catkin_make_isolated –install,(isolated)就是针对每个package独立进行
cmake,
make,
make install ,这样做的好处是可以对单独的package进行调试。catkin_make_isolated –install
命令后,工作区间内有如下文件夹(图一):
![d86fb3df79fd4504e711c5af7f95e3f5.png](https://i-blog.csdnimg.cn/blog_migrate/4d601826fcce65a5a7a19891ecbd40a1.jpeg)
图一
如图所示文件夹为src、build_isolated、devel_isolated、install_isolated(protobuf是上一步安装的),他们具体作用如下:
- src/: ROS的catkin软件包(源代码包);
- build_isolated/: catkin(CMake)的缓存信息和中间文件 ;
- devel_isolated /: 生成的环境变量 、目标文件(安装包之前必要的可执行文件和库,包括头文件,动态链接库,静态链接库,可执行文件等);
- install_isolated/:install后生成的所有文件。
我们再来看下安装文件夹install_isolated内的文件结构(图二):
- bin 被编译安装的可执行文件。
- lib 项目生成的库文件(如libcartographer.a)、pkg.pc文件(pkg-config的配置文件)和python库文件等等。
- Include 放置各类头文件。
- share 主要存放packages的package.xml、launch文件、msg文件、srv文件、以及生成的pkgConfig.cmake文件等等(在cmake文件中
- find_package就会用到这些文件)。
![966afd79631c34124b21e0dfe79c9d26.png](https://i-blog.csdnimg.cn/blog_migrate/20a9d70f9c431c4f4e63f17d6ada4f2c.jpeg)
三、install_isolated内可执行文件
1、cartographer_assets_writer(ROS):对有效资源的保存和使用。
2、cartographer_autogenerate_ground truth(cartographer/ground_truth):自动生成期望的真实输出:带闭环的
优化轨迹作为Ground Truth生成器的输入。
3、cartographer_compute_relations_metrics(cartographer/ground_truth):计算相关指标。比如测量值与
ground truth的差就是一个metric。
4、cartographer_dev_rosbag_publisher(ROS/dev): rosbag信息发布。rosbag是用来储存ROS消息的东西。
在平时处理一些robotics问题的时候,我们只是想采集数据,事后再进行分析,这些数据存储在哪儿
呢?就存储在rosbag里。
5、cartographer_dev_trajectory_comparison(ROS/dev): 轨迹比较。This compares a trajectory from a bag file
against the last trajectory in a pbstream file。
6、cartographer_migrate_serialization_format(cartographer/IO): 迁移序列化格式。
7、cartographer_node(ROS):cartographer_node是ROS最重要的一个node,是实时的SLAM。在这个
node中注册发布了5个Topic,设置Topics定时器函数;发布4个Service,为Servics设置了句柄函数。
8、cartographer_occupancy_grid_node(ROS):占据栅格节点。占据栅格地图是机器人常用的一种地图表示
法。这个节点监听SLAM 发布的submaps,然后构建并发布ROS的occupancy_grid。
9、cartographer_offline_node(ROS):离线节点。offline_node 是使用传感器数据包进行SLAM的最快速方法。
10、cartographer_pbstream_map_publisher(ROS): pbstream_map_publisher是一个相对简单的节点,它从序列化的Cartographer状态(pbstream格式)创建静态占据栅格。如果实时更新不重要,它是占据栅格节点的有效替代方案。
11、cartographer_pbstream_to_ros_map(ROS):将pbstream格式转换成标准ros格式地图。
12、cartographer_rosbag_validate(ROS): rosbag验证。Cartographer ROS 提供cartographer_rosbag_validate工
具
自动分析用户提供的数据包中的数据。使用自己的数据bag时,进行rosbag_validate非常有必要。
13、cartographer_start_trajectory(ROS):轨迹起始位姿。进入localization模式时,给cartographer一个新的
起始位置建立新的路径轨迹从而实现localization。
以上个人理解建立在官网提供的资源上,可能存在不合理指出,欢迎大家指出。在后续的cartographer ROS源码学习过程中,我也会及时更新纠正格功能模块。