Catalogue
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_frame和published_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) :发布的占用网格主题是锁定的