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)
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号