Cartographer ROS API 参考文档

目录

Cartographer 节点

命令行标志

订阅的主题

其他可以提供的传感器数据主题:

发布的主题

服务

必需的 tf 变换

提供的 tf 变换

离线节点

发布的主题

参数

占用网格节点

订阅的主题

发布的主题

Pbstream 地图发布节点

订阅的主题

发布的主题


Cartographer 节点

cartographer_node 是用于在线实时 SLAM 的节点。

命令行标志

使用 --help 标志调用节点以查看所有可用选项。

订阅的主题

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

  • scan (sensor_msgs/LaserScan)
    支持 2D 和 3D(例如使用轴向旋转的平面激光扫描仪)。如果在 Lua 配置参考文档中将 num_laser_scans 设置为 1,则此主题将用作 SLAM 的输入。如果 num_laser_scans 大于 1,将使用多个编号的扫描主题(即 scan_1scan_2scan_3 等)作为 SLAM 的输入。

  • echoes (sensor_msgs/MultiEchoLaserScan)
    支持 2D 和 3D(例如使用轴向旋转的平面激光扫描仪)。如果在 Lua 配置参考文档中将 num_multi_echo_laser_scans 设置为 1,则此主题将用作 SLAM 的输入。仅使用第一个回波。如果 num_multi_echo_laser_scans 大于 1,将使用多个编号的回波主题(即 echoes_1echoes_2echoes_3 等)作为 SLAM 的输入。

  • points2 (sensor_msgs/PointCloud2)
    如果在 Lua 配置参考文档中将 num_point_clouds 设置为 1,则此主题将用作 SLAM 的输入。如果 num_point_clouds 大于 1,将使用多个编号的 points2 主题(即 points2_1points2_2points2_3 等)作为 SLAM 的输入。

其他可以提供的传感器数据主题:
  • imu (sensor_msgs/Imu)
    支持 2D(可选)和 3D(必需)。此主题将用作 SLAM 的输入。

  • odom (nav_msgs/Odometry)
    支持 2D(可选)和 3D(可选)。如果在 Lua 配置参考文档中启用了 use_odometry,则此主题将用作 SLAM 的输入。

发布的主题
  • scan_matched_points2 (sensor_msgs/PointCloud2)
    用于扫描到子地图匹配的点云。根据 Lua 配置参考文档,此点云可能会被过滤和投影。

  • submap_list (cartographer_ros_msgs/SubmapList)
    所有子地图的列表,包括每个子地图的位姿和最新版本号,跨所有轨迹。

  • tracked_pose (geometry_msgs/PoseStamped)
    仅在参数 publish_tracked_pose 设置为 true 时发布。跟踪帧相对于地图帧的位姿。

服务

所有服务响应还包括一个 StatusResponse,其中包含一个代码和一个消息字段。为了保持一致性,整数代码等同于 gRPC API 中使用的状态代码。

  • submap_query (cartographer_ros_msgs/SubmapQuery)
    获取请求的子地图。

  • start_trajectory (cartographer_ros_msgs/StartTrajectory)
    使用默认传感器主题和提供的配置启动轨迹。可以选择指定初始位姿。返回分配的轨迹 ID。

  • trajectory_query (cartographer_ros_msgs/TrajectoryQuery)
    返回来自位姿图的轨迹数据。

  • finish_trajectory (cartographer_ros_msgs/FinishTrajectory)
    通过运行最终优化来完成给定的轨迹 ID 的轨迹。

  • write_state (cartographer_ros_msgs/WriteState)
    将当前内部状态写入磁盘到文件名。文件通常会出现在 ~/.ros 或设置的 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 变换

所有传入的传感器数据帧到配置的 tracking_framepublished_frame 的变换必须可用。通常,这些由 robot_state_publisherstatic_transform_publisher 定期发布。

提供的 tf 变换

提供配置的 map_framepublished_frame 之间的变换,除非参数 publish_to_tf 设置为 false

如果在 Lua 配置参考文档中启用了 provide_odom_frame,还将提供配置的 odom_framepublished_frame 之间的连续(即不受回环闭合影响)变换。

离线节点

offline_node 是处理一组传感器数据包的最快方式。它不监听任何主题,而是从命令行提供的一组包中读取 TF 和传感器数据。它还发布带有前进传感器数据的时钟,即替换 rosbag play。在其他方面,它的行为与 cartographer_node 相同。每个包将在最终状态中成为一个单独的轨迹。一旦处理完所有数据,它会写出最终的 Cartographer 状态并退出。

发布的主题

除了在线节点发布的主题外,此节点还发布:

  • ~bagfile_progress (cartographer_ros_msgs/BagfileProgress)
    包文件处理进度,包括有关当前正在处理的包的详细信息,这些信息将以可以使用 ~bagfile_progress_pub_interval ROS 参数指定的预定义间隔发布。
参数
  • ~bagfile_progress_pub_interval (double, default=10.0):
    发布包文件处理进度的时间间隔(秒)。

占用网格节点

occupancy_grid_node 监听 SLAM 发布的子地图,从中构建 ROS 占用网格并发布它。此工具对于保持需要单个整体地图的旧节点是有用的,直到新的导航栈可以直接处理 Cartographer 的子地图。生成地图既昂贵又缓慢,因此地图更新的时间以秒为单位。可以使用命令行选项选择性地包括/排除冻结(静态)或活动轨迹的子地图。使用 --help 标志调用节点以查看这些选项。

订阅的主题

仅订阅 Cartographer 的 submap_list 主题。

发布的主题
  • map (nav_msgs/OccupancyGrid)
    如果订阅了该主题,节点将连续计算并发布地图。更新之间的时间间隔会随着地图的大小而增加。要更快的更新,请使用子地图 API。

Pbstream 地图发布节点

pbstream_map_publisher 是一个简单节点,它从序列化的 Cartographer 状态(pbstream 格式)创建静态占用网格。如果不需要实时更新,这是一个高效的替代方案。

订阅的主题

无。

发布的主题
  • map (nav_msgs/OccupancyGrid)
    发布的占用网格主题是锁存的。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值