订阅的话题
Cartographer订阅哪些话题,主要由你在 Lua 配置文件中的设置决定。其中,测距数据(Range Data)是必需的,以下几种话题是互斥的,即至少需要提供其中一种。
| 话题名 | 消息类型 | 说明与配置参数 |
|---|---|---|
scan |
sensor_msgs/LaserScan |
用于2D或3D建图的单线激光雷达数据。由 num_laser_scans 控制数量,默认为1。 |
points2 |
sensor_msgs/PointCloud2 |
PointCloud2格式的点云数据 。由 num_point_clouds 控制数量。 |
除了必需的测距数据,Cartographer 还可以通过配置选择性地订阅以下辅助传感器数据,以提高建图精度和鲁棒性。
| 话题名 | 消息类型 | 说明与配置参数 |
|---|---|---|
imu |
sensor_msgs/Imu |
IMU数据 。在2D建图中可选 ,但在3D建图中必需 。如果Lua配置中启用了 use_imu_data,则会订阅。 |
odom |
nav_msgs/Odometry |
轮式里程计数据。当 Lua 配置中 use_odometry 设置为 true 时启用。 |
fix |
sensor_msgs/NavSatFix |
GPS数据。当 Lua 配置中 use_nav_sat 设置为 true 时启用。 |
landmark |
cartographer_ros_msgs/LandmarkList |
已知地标数据。当 Lua 配置中 use_landmarks 设置为 true 时启用。 |
要求的TF变换 (Required tf Transforms) :Cartographer 期望整个 TF 树中,tracking_frame 到所有传感器帧(如 laser_frame)的变换路径是完整且畅通的。
++tracking_frame 是 Cartographer 在 lua 配置文件中指定的一个坐标帧,它通常是机器人本体上的一个关键点,比如 base_link 或 imu_link。++ 通常由 robot_state_publisher通过URDF来发布,根据 URDF 文件计算并发布各个 link 之间的坐标变换。
当 robot_state_publisher 完成发布后,TF 树中就有了从 map -> odom -> base_link -> laser_frame 这样完整的链条。此时,Cartographer 只需要将 tracking_frame 设为链条上的一个节点(如 base_link 或 imu_link),就能通过 TF 系统随时查询到任何传感器在世界坐标系下的位置了。
发布的话题
| 话题名 | 消息类型 | 说明 |
|---|---|---|
submap_list |
cartographer_ros_msgs/SubmapList |
所有子图的列表,包含每个子图的位姿和版本号。这是构建和更新地图的核心数据。 |
scan_matched_points2 |
sensor_msgs/PointCloud2 |
用于扫描匹配的点云。这通常是经过滤波或投影后的点云,便于调试和观察实际参与匹配的数据。 |
tracked_pose |
geometry_msgs/PoseStamped |
跟踪帧在map坐标系下的位姿 。仅在将 publish_tracked_pose 参数设置为 true 时才会发布。 |
提供的TF变换 (Provided tf Transforms) :Cartographer 会发布从配置的 map_frame 到 published_frame 的变换。如果启用了 provide_odom_frame,还会发布一个不受回环检测影响的、连续的 odom_frame 到 published_frame 的变换,这主要用于里程计推算。
对于livox_ros_driver2 发布的3D点云数据,需要配置3D建图的 .lua 文件,通过++设置 num_point_clouds = 1 并确保雷达数据被映射到 points2 上++,Cartographer就能正常工作了。