Home » cartographer ros指南 » cartographer ros使用指南-接口

cartographer ros使用指南-接口

cartographer ros使用指南-接口

说明:

  • 介绍cartographer ros API接口

API

Cartographer Node

  • Cartographer_node用于在线实时的SLAM。
  • 使用--help标志调用节点以查看所有可用选项。

可订阅的主题

  • 以下范围数据主题是互斥的。 至少需要一个范围数据源。

scan (sensor_msgs/LaserScan)

  • 支持二维和三维(例如,使用轴向旋转的平面激光扫描仪)。
  • 如果num_laser_scans在Configuration配置为1,那么这个topic 将被用SLAM的输入。
  • 如果num_laser_scans大于1,那么多个被编号的scan topics
  • (比如scan1、scan2、scan3、……直到并包括num_laser_scans)将被用作SLAM的输入。

echoes (sensor_msgs/MultiEchoLaserScan)

  • 支持二维和三维(例如,使用轴向旋转的平面激光扫描仪)。
  • 如果 num_multi_echo_laser_scans在Configuration配置为1,那么这个topic 将被用SLAM的输入。
  • 只使用第一个echo。如果num_multi_echo_laser_scans大于1,那么多个被编号的echoes topics
  • (比如echoes_1、echoes_2、echoes_3、……直到并包括num_multi_echo_laser_scans)将被用作SLAM的输入。

points2 (sensor_msgs/PointCloud2)

  • 如果 num_point_clouds在Configuration配置为1,那么这个topic 将被用SLAM的输入。
  • 如果num_point_clouds大于1,那么多个被编号的points2 topics
  • (比如points2_1、points2_2、points2_3、……直到并包括num_point_clouds)将被用作SLAM的输入。

附加的传感器数据topics

imu (sensor_msgs/Imu)

  • 支持2D(可选)和3D(必需)。这个topic 将被用作SLAM的输入。

odom (nav_msgs/Odometry)

  • 支持2D(可选)和3D(可选)。如果在Configuration中使能了use_odometry,那么这个topic将被用作SLAM的输入。

发布的话题:

scan_matched_points2 (sensor_msgs/PointCloud2)

  • 用来进行 scan-to-submap匹配的点云,这个云可以根据配置进行滤波和投影。

submap_list (cartographer_ros_msgs/SubmapList)

  • 所有轨迹的所有submaps的列表,包含有没给submap的姿态和最新的版本号

服务

submap_query (cartographer_ros_msgs/SubmapQuery)

  • 获取所请求的submap。

start_trajectory (cartographer_ros_msgs/StartTrajectory)

  • 通过将传感器topics和轨迹选项指定为原始的二进制编码格式,开始另一个轨迹。返回一个已分配的轨迹ID。

finish_trajectory (cartographer_ros_msgs/FinishTrajectory)

  • 通过运行最终的优化,完成给定轨迹ID的轨迹。

write_state (cartographer_ros_msgs/WriteState)

  • 将当前的内部状态保存为指定的文件名并写入磁盘
  • 这个文件通常以~/.ros结尾,若设置了ROS_HOME,则以设置的ROS_HOME结尾。
  • 该文件可以作为assets_writer_main的输入,用于生成诸如概率栅格、x射线或PLY文件等。

get_trajectory_states (cartographer_ros_msgs/GetTrajectoryStates)

  • 返回ID和轨迹的状态。 例如,这可以用于从单独的节点观察Cartographer的状态。

read_metrics (cartographer_ros_msgs/ReadMetrics)

  • 返回Cartographer的所有内部指标的最新值。
  • 运行时度量标准的集合是可选的,必须使用节点中的--collect_metrics命令行标志激活。

需要的tf Transforms

  • 从所有传入的传感器数据帧转换到配置的tracking_frame和published_frame都必须是可用的。
  • 通常情况下,这些都是由 robot_state_publisher或static_transform_publisher定期发布的。

提供的tf Transforms

  • 总是提供配置的map_frame和published_frame之间的转换。
  • 如果在配置中使能provide_odom_frame,就会提供配置的odom_frame和published_frame 之间的连续(即不受闭环的影响)的转换。

离线节点

  • offline_node是使用传感器数据包进行SLAM最快速的方法。
  • 它不监听任何topics,而是从命令行中提供的一组包中读取TF和传感器数据。
  • 它还发布了一个带有先进传感器数据的时钟,也就是取代了rosbag play。
  • 在其他方面,它就像cartographer_node一样。每个包最终都将成为一个单独的轨迹。
  • 一旦处理完所有的数据,它就会写出最终的Cartographer 状态并退出。
  • 订阅的话题:~bagfile_progress (cartographer_ros_msgs/BagfileProgress)
  • 参数:~bagfile_progress_pub_interval (double, default=10.0):

占据栅格节点

  • occupancy_grid_node 监听SLAM 发布的submaps,然后构建并发布ROS的occupancy_grid。

  • 这个工具为了保持旧节点,需要一个单独的完全统一的地图,直到新的导航堆栈能够立即处理Cartographer’s submaps。

  • 生成这个地图比较慢,代价也比较大,所以地图更新是按秒进行排序的。

  • 订阅的话题:只订阅Cartographer’s submap_list topic。

  • 发布的话题:map (nav_msgs/OccupancyGrid)

  • 如果被订阅,此节点将连续计算并发布地图。更新的时间随着地图尺寸的增加而增加,为了快速的更新,要使用submaps APIs。

Pbstream Map发布节点

  • pbstream_map_publisher是一个简单的节点,它从序列化的Cartographer状态(pbstream格式)创建静态占用网格。
  • 如果实时更新不重要,它是占用网格节点的有效替代方案。
  • 发布话题:map (nav_msgs/OccupancyGrid)

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: cartographer ros使用指南