4.2.7 cartographer节点说明
在Cartographer框架中,cartographer_node和cartographer_occupancy_grid_node是两个关键的节点,它们各自承担着不同的角色和功能。详细介绍如下。
cartographer_node:
主要负责订阅来自各种传感器的数据(如激光雷达、IMU、里程计等),并基于这些数据实时构建地图。它采用子图(submap)的方法来逐步构建和更新地图,确保定位的准确性和建图的实时性。
cartographer_occupancy_grid_node:
该节点负责接收
cartographer_node发布的子图列表(/submap_list),并将其拼接成完整的栅格地图(occupancy grid map),然后发布这个地图。这个节点是地图生成的最终环节,它使得Cartographer能够输出人类可读且易于可视化的地图。
这两个节点的协同工作,前者负责实时构建和更新地图,后者则负责将子图拼接成完整的栅格地图并发布,使得Cartographer能够高效地实现SLAM功能。
1.cartographer_node订阅的话题
| 话题 | 类型 | 描述 |
|---|---|---|
| /scan | sensor_msgs/msg/LaserScan | 来自激光雷达输入的扫描数据 |
| /odom | nav_msgs/msg/Odometry | 里程计消息 |
2.cartographer_node发布的话题
| 话题 | 类型 | 描述 |
|---|---|---|
| /scan_matched_points2 | sensors_msgs/msg/PointCloud2 | 匹配好的点云数据,用于scan-to-submap matching |
| /submap_list | cartographer_ros_msgs/SubmapList | 发布构建好的子图列表 |
3.cartographer_node发布的服务
| 话题 | 类型 | 描述 |
|---|---|---|
| /submap_query | cartographer_ros_msgs/srv/SubmapQuery | 提供查询子图的服务,获取到查询的子图 |
| /start_trajectory | cartographer_ros_msgs/srv/StartTrajectory | 开始一条轨迹 |
| /finish_trajectory | cartographer_ros_msgs/srv/FinishTrajectory | 结束一条给定ID的轨迹 |
| /write_state | cartographer_ros_msgs/srv/WriteState | 将当前状态写入磁盘文件中 |
| /get_trajectory_states | cartographer_ros_msgs/srv/GetTrajectoryStates | 获取指定轨迹的状态 |
| /read_metrics | cartographer_ros_msgs/srv/ReadMetrics | 读取性能指标 |
4.cartographer_node参数
cartographer_node节点需要接收一个参数配置文件,该配置文件包含了地图构建、轨迹跟踪等所需的各项参数。
5.cartographer_occupancy_grid_node订阅的话题
| 话题 | 类型 | 描述 |
|---|---|---|
| /submap_list | cartographer_ros_msgs/SubmapList | 子图列表 |
6.cartographer_occupancy_grid_node发布的话题
| 话题 | 类型 | 描述 |
|---|---|---|
| /map | nav_msgs/msg/OccupancyGrid | 发布的栅格地图 |
7.cartographer_occupancy_grid_node请求的服务
| 话题 | 类型 | 描述 |
|---|---|---|
| /submap_query | cartographer_ros_msgs/srv/SubmapQuery | 获取子图 |
8.cartographer_occupancy_grid_node参数
cartographer_occupancy_grid_node节点需要配置地图的分辨率和更新周期等参数,以确保生成的栅格地图满足特定的精度和实时性要求。