4.2.3 slam_toolbox节点说明
在slam_toolbox中常用的节点有两个:sync_slam_toolbox_node和async_slam_toolbox_node。
sync_slam_toolbox_node:
这是一个同步节点,会等待所有传感器数据到达后再处理,确保数据完整性和一致性,提高定位和建图准确性。但同步处理可能导致延迟,更适合对数据一致性和准确性要求高、实时性要求不高的场景。
async_slam_toolbox_node:
与同步节点不同,这是一个异步节点,可以立即处理已接收的数据,减小延迟,提高响应速度。但异步处理可能导致数据不完全同步,定位和建图结果可能不如同步方式准确。因此,它更适合对实时性要求高、对数据一致性和准确性要求相对较低的场景。
在选择使用sync_slam_toolbox_node还是async_slam_toolbox_node时,需根据应用需求和环境权衡。若实时性关键且能接受一定定位或建图误差,选择async_slam_toolbox_node。若对数据一致性和准确性要求较高,且实时性非首要考虑,则选择sync_slam_toolbox_node。另外二者的主要区别在于数据处理的方式,而两个节点发布的话题、订阅的话题、发布的服务以及使用的参数等都是一样的。
1.订阅的话题
| 话题 | 类型 | 描述 |
|---|---|---|
| /scan | sensor_msgs/msg/LaserScan | 来自激光雷达输入的扫描数据 |
| /tf | tf2_msgs/msg/TFMessage | 配置的odom_frame到base_frame的转换 |
2.发布的话题
| 话题 | 类型 | 描述 |
|---|---|---|
| /map | nav_msgs/msg/OccupancyGrid | pose-graph(姿态图)在特定的更新频率(map_update_interval)下的占用栅格表示。 |
| /pose | geometry_msgs/msg/PoseWithCovarianceStamped | 配置的map_frame中base_frame的位姿以及根据扫描匹配计算的协方差 |
3.发布的服务
| 话题 | 类型 | 描述 |
|---|---|---|
| /slam_toolbox/clear_changes | slam_toolbox/srv/Clear | 清除所有待处理的手动位姿图操作的更改 |
| /slam_toolbox/deserialize_map | slam_toolbox/srv/DeserializePoseGraph | 从磁盘加载保存的序列化位姿图文件 |
| /slam_toolbox/dynamic_map | nav_msgs/OccupancyGrid | 请求位姿图的当前状态作为占用网格 |
| /slam_toolbox/manual_loop_closure | slam_toolbox/srv/LoopClosure | 请求对位姿图进行手动更改 |
| /slam_toolbox/pause_new_measurements | slam_toolbox/srv/Pause | 暂停处理新传入的激光扫描 |
| /slam_toolbox/save_map | slam_toolbox/srv/SaveMap | 保存可用于显示 AMCL 定位的地图图像文件。 |
| /slam_toolbox/serialize_map | slam_toolbox/srv/SerializePoseGraph | 保存地图位姿图和数据,可用于继续建图、slam_toolbox 定位、离线操作等 |
| /slam_toolbox/toggle_interactive_mode | slam_toolbox/srv/ToggleInteractive | 在交互模式与非交互模式之间切换,发布节点的交互式标记及其位置,以便在应用程序中进行更新 |
| /slam_toolbox/reset | slam_toolbox/srv/Reset | 将当前地图重置回初始状态 |
4.参数
求解器参数
solver_plugin - 用于 karto 扫描解算器的非线性解算器类型。选项:solver_plugins::CeresSolver, - solver_plugins::SpaSolver, solver_plugins::G2oSolver. Default: solver_plugins::CeresSolver.
ceres_linear_solver - Ceres 使用的线性求解器。选项:SPARSE_NORMAL_CHOLESKY、SPARSE_SCHUR、ITERATIVE_SCHUR、CGNR。默认为 SPARSE_NORMAL_CHOLESKY。
ceres_preconditioner - 与该求解器一起使用的预处理器。选项:JACOBI、IDENTITY(none)、SCHUR_JACOBI。默认为JACOBI。
ceres_trust_strategy - 信任区域策略。行搜索策略没有公开,因为它们对于这种用途表现不佳。选项:LEVENBERG_MARQUARDT、DOGLEG。默认值:LEVENBERG_MARQUARDT。
ceres_dogleg_type - 如果信任策略是 DOGLEG,则使用dogleg策略。选项:TRADITIONAL_DOGLEG、SUBSPACE_DOGLEG。默认值:TRADITIONAL_DOGLEG
ceres_loss_function - 拒绝异常值的损失函数类型。没有一个等于损失平方。选项:None、HuberLoss、CauchyLoss。默认值:None。
mode - “建图”或“定位”模式,用于 Ceres 问题创建中的性能优化
Toolbox参数
odom_frame - 里程计坐标系
map_frame - 地图坐标系
base_frame - 基坐标系
scan_topic - 扫描主题名, 注意是/scan 不是scan
scan_queue_size - 扫描消息对队列长度。在异步模式下应始终设置为 1
use_map_saver - 实例化地图服务程序并自行订阅map主题
map_file_name - 启动时加载的位姿图文件的名称(如果可用)
map_start_pose - 启动建图/定位时的位姿(如果可用)
map_start_at_dock - 在dock(第一个节点)处启动姿势图加载(如果可用)。如果同时设置了pose和dock,优先使用pose
debug_logging - 更改日志以进行调试
throttle_scans - 在同步模式下限制的扫描次数
transform_publish_period - 里程计odom变换发布周期。 0 不会发布变换。
map_update_interval - 更新 2D 占用地图的时间间隔
enable_interactive_mode - 是否允许启用交互模式。交互模式将保留映射到其 ID 的激光扫描缓存,以便在交互模式下进行可视化。结果,该进程的内存将会增加。在定位和长期建图模式下可以手动禁用此功能,因为它们会随着时间的推移增加内存利用率。对于建图或连续建图模式均有效。
position_covariance_scale - 从扫描匹配发布姿势时缩放位置协方差的量。这可用于调整下游定位滤波器中位姿的影响。协方差表示测量的不确定性,因此扩大协方差将减小位姿对下游滤波器的影响。默认值:1.0
yaw_covariance_scale - 从扫描匹配发布位姿时缩放偏航协方差的量。请参阅position_covariance_scale 的描述。默认值:1.0
resolution - 生成的 2D 占用图的分辨率
max_laser_range - 用于 2D 占用地图光栅化的最大激光范围
minimum_time_interval - 在同步模式下处理的扫描之间的最短持续时间
transform_timeout - 查找转换 TF 超时时间限制
tf_buffer_duration - 存储 TF 消息以供查询的时间。如果在同步模式下以倍速脱机运行,则设置高一些。
stack_size_to_use - 将堆栈大小重置为的字节数,以启用文件的序列化/反序列化。自由默认值为 40000000,但越少越好。
minimum_travel_distance - 处理新扫描之前的最小行进距离
匹配器参数
use_scan_matching - 是否使用扫描匹配来优化里程位姿
use_scan_barycenter - 是否使用重心或扫描位姿
minimum_travel_heading - 合理更新的最小航向变化
scan_buffer_size - 缓冲到链中的扫描次数,也用作定位模式循环缓冲区中的扫描次数
scan_buffer_maximum_scan_distance - 从缓冲区中删除之前扫描,距离之前位姿的最大距离
link_match_minimum_response_fine - 精细分辨率通过的阈值链接匹配算法响应
link_scan_maximum_distance - 有效链接扫描之间的最大距离
Loop_search_maximum_distance - 循环闭合时考虑的扫描距离的最大阈值
do_loop_close - 是否进行循环闭合(如果不确定,答案是“true”)
Loop_match_minimum_chain_size - 寻找循环闭合的扫描的最小链长度
Loop_match_maximum_variance_coarse - 粗略搜索中传递给细化的阈值方差
Loop_match_minimum_response_coarse - 粗略搜索中环路闭合算法的阈值响应要传递给细化
Loop_match_minimum_response_fine - 精细搜索中循环闭合算法的阈值响应传递给细化
correlation_search_space_dimension- 搜索网格大小以进行扫描相关性
correlation_search_space_resolution - 搜索网格分辨率以进行扫描相关性
correlation_search_space_smear_deviation - 用于平滑响应的多模态涂抹量
loop_search_space_dimension - 循环闭合算法的搜索网格的大小
loop_search_space_resolution - 搜索网格分辨率以进行循环闭合
loop_search_space_smear_deviation - 用于平滑响应的多模态涂抹量
distance_variance_penalty - 应用于匹配扫描的惩罚,因为它与里程姿势不同
angle_variance_penalty - 应用于匹配扫描的惩罚,因为它与里程姿势不同
fine_search_angle_offset - 用于测试精细扫描匹配的角度范围
rough_search_angle_offset - 用于测试粗略扫描匹配的角度范围
coarse_angle_resolution - 在扫描匹配中测试的偏移范围内的角度分辨率
minimum_angle_penalty - 确保尺寸不会膨胀的最小惩罚角度
minimum_distance_penalty - 扫描可以确保大小不会爆炸的最小惩罚
use_response_expansion - 如果没有找到可行的匹配,是否自动增加搜索网格大小