Cartographer-[3]-ROS封装API

Catalogue
  1. 1. 1. Cartographer-ROS封装API
  2. 2. 2. 主节点
    1. 2.1. 2.1. 订阅主题
    2. 2.2. 2.2. 发布Topic
    3. 2.3. 2.3. 服务
    4. 2.4. 2.4. 需要的TF 变换
  3. 3. 3. 离线节点
  4. 4. 4. Occupancy grid Node (占用网格节点)
    1. 4.1. 4.1. 订阅主题
    2. 4.2. 4.2. 发布的主题
  5. 5. 5. Pbstream Map Publisher Node P(bstream地图发布器节点)
    1. 5.1. 5.1. 订阅主题
    2. 5.2. 5.2. 发布的主题

1. Cartographer-ROS封装API

2. 主节点

node_main.cc是运行Cartographer Ros的主节点。具体文件

2.1. 订阅主题

  • scan (sensor_msgs/LaserScan)
  • echoes (sensor_msgs/MultiEchoLaserScan)
  • points2 (sensor_msgs/PointCloud2)
  • imu (sensor_msgs/Imu) : 3D情况下必须要有IMU
  • odom (nav_msgs/Odometry): 如果use_odometry设置为enable那么里程计数据也输入到SLAM系统中

2.2. 发布Topic

  • scan_matched_points2 (sensor_msgs/PointCloud2) : 用来进行scan-to-submap匹配的点云
  • submap_list (cartographer_ros_msgs/SubmapList) : 所有轨迹子图的列表,包括每个子图的姿态和最新编号

2.3. 服务

所有服务响应还包括一个StatusResponse,它包含一个code和一个message。为了一致性,整数code等价于gRPCAPI中使用的状态代码

  • submap_query (cartographer_ros_msgs/SubmapQuery) : 子图查询
  • start_trajectory (cartographer_ros_msgs/StartTrajectory):以二进制编码的proto指定传感器主题和轨迹选项,开始另一个轨迹,返回轨迹ID
  • finish_trajectory (cartographer_ros_msgs/FinishTrajectory) :通过运行最后的优化完成给定id的轨迹优化。
  • write_state (cartographer_ros_msgs/WriteState):将当前的内部状态写入磁盘到文件名中,文件名通常以.ros结尾,此文件可作为主程序的输入,以生成诸如概率网格、 X-Rays 或者 PLY files.
  • get_trajectory_states (cartographer_ros_msgs/GetTrajectoryStates) : 返回id和轨迹的状态,这对于从单独的节点观察Cartographer的状态
  • read_metrics (cartographer_ros_msgs/ReadMetrics):进行指标衡量

2.4. 需要的TF 变换

来自各个传感器坐标系的到tracking_framepublished_frame的TF变换必须存在,这些TF变换通常由robot_state_publisher或者static_transform_publisher发布。

3. 离线节点

离线节点是对一个传感器数据rosbag进行SLAM的最快方式,它不会监听任何话题,而是从命令行上提供的一组包中读取 TF 和传感器数据。 它还发布了一个带有前进传感器数据的时钟,即取代了 rosbag play。在所有其他方面,它表现得像Cartographer节点。 每个袋子将成为一个独立的轨迹,在最后的状态。 一旦处理完所有数据,它就会写出最终的Cartographer状态并退出。

4. Occupancy grid Node (占用网格节点)

占用网格节点监听 SLAM 发布的子地图,从中构建 ROS 占用网格并发布它。生成地图是昂贵和缓慢的,因此地图更新的顺序是秒。

4.1. 订阅主题

  • submap_list :只定于Cartographer的子地图列表主题

4.2. 发布的主题

  • map (nav_msgs/OccupancyGrid) : 如果订阅,节点将继续计算和发布映射。 更新之间的时间将随着地图的大小而增加。 要获得更快的更新,请使用子图api

5. Pbstream Map Publisher Node P(bstream地图发布器节点)

Pbstream map publisher是一个简单的节点,它在序列化的 Cartographer 状态(pbstream 格式)之外创建一个静态占用网格。 如果实时更新不重要,它是占用网格节点的一个有效替代方案。

5.1. 订阅主题

5.2. 发布的主题

  • map (nav_msgs/OccupancyGrid) :发布的占用网格主题是锁定的