08 接口、参数与排障
8.1 订阅
| 话题 | 类型 | 条件 |
|---|---|---|
scan_topic(默认 /scan) |
LaserScan |
MessageFilter 等到 odom 可变换 |
| TF | odom → base_frame |
每帧必须有 |
/initialpose |
PoseWithCovarianceStamped |
仅定位节点 |
/scan 的 QoS 是 SensorDataQoS(Best Effort)。/map、pose 是 Transient Local + Reliable。
8.2 发布
| 话题 | 类型 | 何时 |
|---|---|---|
/map(map_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,不改代码)
坐标系与 IO:odom_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.yaml。SMapper::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_id → view_frames 是否只有一处 map→odom → 静止是否还在爬(里程计)→ 再动回环阈值。
正在加载留言…