slam_toolbox-ros-melodic部署测试记录

9 篇文章 11 订阅
slam_toolbox是一个功能完善的建图工具,基于karto_slam,相较于cartographer在细节处理上更优,但可能在大地图构建时出现扭曲。工具包提供了动态地图更新和多种服务接口,如保存、加载地图,以及交互式编辑。然而,存在大地图精度问题和角度歪斜的挑战。
摘要由CSDN通过智能技术生成

1)slam_toolbox建图(引用karto_slam)

开源项目地址:https://github.com/SteveMacenski/slam_toolbox

个人的评价是,slam_toolbox作为三星研究院出品的建图工具包,功能相当完善,简单易用,效果、工程性甚至优于谷歌的cartographer,具备完善的动态地图更新longlife-slam功能。底层slam算法是karto_slam,资源占用也低于cartographer。
但是就大地图(2k平以上)构建效果来看,slam_toolbox可能存在较为明显的大地图扭曲问题,精度不高。

订阅的主题
/scansensor_msgs/LaserScan激光的输入扫描以利用
/tftf2从您配置的 odom_frame 到 base_frame 的有效转换
发布的主题
/mapnav_msgs/OccupancyGrid位姿图在map_update_interval频率上的占用网格表示
服务接口
话题类型描述
/slam_toolbox/clear_changesslam_toolbox/Clear清除所有未决的手动姿势图操作更改
/slam_toolbox/deserialize_mapslam_toolbox/DeserializePoseGraph从磁盘加载保存的序列化位姿图文件
/slam_toolbox/dynamic_mapnav_msgs/OccupancyGrid请求姿态图的当前状态作为占用网格
/slam_toolbox/manual_loop_closureslam_toolbox/LoopClosure请求手动更改姿势图待处理
/slam_toolbox/pause_new_measurementsslam_toolbox/Pause工具箱暂停处理新传入的激光扫描
/slam_toolbox/save_mapslam_toolbox/SaveMap保存可用于显示或 AMCL 定位的位姿图的地图图像文件。它是一个简单的包装器,使用map_server/map_saver
/slam_toolbox/serialize_mapslam_toolbox/SerializePoseGraph保存可用于继续映射、slam_toolbox 本地化、离线操作等的地图位姿图和数据
/slam_toolbox/toggle_interactive_modeslam_toolbox/ToggleInteractive切换进入和退出交互模式,发布节点的交互标记及其位置以在应用程序中更新

① 建图测试

位姿图路点(无视左侧视图栏报错,这是因为没有重开全部程序,使用了map(amcl提供)、slam_map(slam_toolbox提供)作为tf的根节点,但是tf不支持并行树状图,故tf会来回切换,但不影响建图程序运行,因为tf树中的odom_combined->map的变换不被slam_toolbox节点所使用)

image

在同样未经调参优化的情况下,对比cartographer,slam_toolbox在细节方面更优(slam_toolbox在墙壁厚度方面显示更准确)

image

大长廊场景建图,此为公司办公楼层地图,长约80m,宽约50米:

对于slam_toolbox,有以下问题:

1)所建地图出现角度歪斜情况,难以闭合;

2)部分房间与走廊出现不平行情况

image

查看tf树图

slam_map到odom_combined的变换,由slam_toolbox提供

image

② 探索建图接口

服务1:保存位姿图到磁盘

/slam_toolbox/serialize_map

image

服务2:保存栅格地图到磁盘

注意点:该节点的保存地图服务/slam_toolbox/save_map不好用,不能保存任意话题名的map(改写源码,增加这点),并且实际上只是调用了map_server的map_saver包,可以不用。

image

服务3:获取动态的建图map图数据

/slam_toolbox/dynamic_map

image

服务4:清除交互式模式对位姿图路点的修改

/slam_toolbox/clear_changes

image

服务5:切换交互模式,可拖动位姿图

/slam_toolbox/toggle_interactive_mode

image

image

服务6:确认交互式按钮修改的位姿图路点

(只是保存在内存,未更新对应磁盘的文件)

/slam_toolbox/manual_loop_closure

image

服务7:加载磁盘位姿图

/slam_toolbox/deserialize_map

image

  • match_type含义

1:开始于位姿图零点

2:开始于通过该服务的initial_pose字段请求的位姿

3:自动定位(?不确定)

image

③ 探索定位接口

比建图接口多一个

定位服务1:清除定位的缓存

/slam_toolbox/clear_localization_buffer

image

initialpose定位指定值:

image

localization包拓展的地图仅供定位时参考,定位位姿图回归后自然消除/合并。

④ 探索lifelong-slam接口

开源项目地址:https://github.com/SteveMacenski/slam_toolbox/wiki/Experimental-Lifelong-Mapping-Node

终身制图,即动态更新地图,相比定位模式缺少了initialpose的话题订阅

image

请添加图片描述

配置参数文件说明

以下设置和选项向您展示。默认配置在config目录中给出。

求解器参数

solver_plugin- 用于 karto 扫描求解器的非线性求解器类型。选项:solver_plugins::CeresSolver, solver_plugins::SpaSolver, solver_plugins::G2oSolver. 默认值:solver_plugins::CeresSolver

ceres_linear_solver- Ceres 使用的线性求解器。选项:SPARSE_NORMAL_CHOLESKY, SPARSE_SCHUR, ITERATIVE_SCHUR, CGNR. 默认为SPARSE_NORMAL_CHOLESKY.

ceres_preconditioner- 与该求解器一起使用的预处理器。选项:JACOBIIDENTITY(无)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 问题创建中用于性能优化的“映射”或“本地化”模式

工具箱参数

odom_frame - 里程计框架

map_frame - 地图框

base_frame - 基本框架

scan_topic- 扫描主题,_绝对_路径,ei /scannotscan

map_file_name - 启动时加载的姿势图文件的名称(如果可用)

map_start_pose - 姿势以开始姿势图映射/定位(如果可用)

map_start_at_dock- 如果可用,在码头(第一个节点)开始加载姿势图。如果同时设置了pose和dock,它将使用pose

debug_logging - 将记录器更改为调试

throttle_scans - 同步模式下限制的扫描次数

transform_publish_period- odom 变换发布期间的地图。0 不会发布转换

map_update_interval - 为其他应用程序/可视化更新 2D 占用图的间隔

enable_interactive_mode- 是否允许启用交互模式。交互模式将保留映射到其 ID 的激光扫描缓存,以便在交互模式下进行可视化。结果,进程的内存将增加。这在本地化和终身模式下被手动禁用,因为它们会随着时间的推移增加内存利用率。适用于映射或连续映射模式。

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_closing - 是否做闭环(如果你不确定,答案是“真的”)

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 - 测试精细扫描匹配的角度范围

coarse_search_angle_offset - 测试粗略扫描匹配的角度范围

coarse_angle_resolution - 在偏移范围内的角度分辨率以测试扫描匹配

minimum_angle_penalty - 角度最小的惩罚可以确保尺寸不会爆炸

minimum_distance_penalty - 扫描可以确保尺寸不会爆炸的最小惩罚

use_response_expansion - 如果没有找到可行的匹配,是否自动增加搜索网格大小

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值