slam_toolbox 接口、参数与排障

08 接口、参数与排障

8.1 订阅

话题 类型 条件
scan_topic(默认 /scan LaserScan MessageFilter 等到 odom 可变换
TF odom → base_frame 每帧必须有
/initialpose PoseWithCovarianceStamped 仅定位节点

/scan 的 QoS 是 SensorDataQoS(Best Effort)。/mappose 是 Transient Local + Reliable。

8.2 发布

话题 类型 何时
/mapmap_name OccupancyGrid map_update_interval,且有订阅者
/map_metadata MapMetaData 同上
pose PoseWithCovarianceStamped 每成功处理一帧
TF map → odom TF transform_publish_period,且扫描 stamp>0
slam_toolbox/new_node_event NewNodeEvent 建图成功加节点
slam_toolbox/loop_closure_event LoopClosureEvent 回环完成
slam_toolbox/pose_graph PoseGraph 仅回环后(或请求后)

协方差可乘 position_covariance_scale_ / yaw_covariance_scale_,给下游 EKF 降权。

8.3 服务

服务 用途
slam_toolbox/serialize_map .posegraph + .data
slam_toolbox/deserialize_map 读图,设 match_type
slam_toolbox/save_map 出 pgm(MapSaver)
slam_toolbox/dynamic_map 拉当前栅格
slam_toolbox/pause_new_measurements 停吃新扫描
slam_toolbox/reset 清空 Mapper/Solver,可选接着暂停
slam_toolbox/clear_queue 仅同步模式
slam_toolbox/clear_localization_buffer 仅定位
slam_toolbox/toggle_interactive_mode RViz 拖节点
slam_toolbox/manual_loop_closure 提交拖过的节点
slam_toolbox/clear_changes 丢掉未提交的拖动

管理层(未来 ISlam)优先包:serialize / deserialize / save / pause / reset / pose。

8.4 参数分组(调 YAML,不改代码)

坐标系与 IOodom_frame map_frame base_frame scan_topic resolution min/max_laser_range

何时处理throttle_scans minimum_time_interval minimum_travel_distance minimum_travel_heading check_min_dist_and_heading_precisely

前端匹配use_scan_matching correlation_search_space_* fine/coarse_search_angle_* distance/angle_variance_penalty use_response_expansion

回环do_loop_closing loop_search_maximum_distance loop_match_minimum_chain_size loop_match_minimum_response_coarse/fine loop_search_space_*

定位窗口scan_buffer_size scan_buffer_maximum_scan_distance mode: localization

Ceres:见 06-Ceres求解器.md

栅格map_update_interval min_pass_through occupancy_threshold

完整默认值见 config/mapper_params_online_async.yamlSMapper::configure 是参数进入 Karto 的唯一入口。

8.5 日志 → 原因

日志 / 现象 先查
Failed to compute odom pose odom→base_footprint,或 stamp 对不上
Failed to compute laser pose base→laser 静态 TF
回调有、地图不长 shouldProcessScan:车没动够 / 时间间隔 / 前 5 帧
Queue size has grown to 同步模式CPU不够,停车或清队列,或改异步
雷达左右反 isInverted、URDF yaw、扫描角方向
地图抽 两个节点发 map→odom
回环后整图飞 误回环;或 360/斜装 + 旧序列化文件
定位漂、底图不变 正常(窗口在动)
Cannot call serialize map in localization mode 换建图节点再存
/map 不更新 没有订阅者时 updateMap 直接 return

8.6 建议的排查顺序

传感器频率 → 时间戳是否单调、是否同一时钟 → /scan.frame_idview_frames 是否只有一处 map→odom → 静止是否还在爬(里程计)→ 再动回环阈值。

文章互动

阅读 --

留言

0 条留言

正在加载留言…