赞
踩
Slam Toolbox是一套用于2D Slam的工具。主要功能包括:
对于在真实生产机器人上运行,建议使用: slam-toolbox
,它进行了优化,使其速度提高了约10倍。需要为不需要安装在机器人上的其他开发工具(rviz 插件等)安装 deb/source。
该软件包已经过基准测试,可在 5 倍以上实时速度构建约 30,000 平方英尺的地图,在 3 倍实时速度构建约 60,000 平方英尺的地图。使用的最大面积约 200,000 平方英尺。以同步模式建图(即处理所有激光点云,无论延迟如何),并以异步模式构建更大的空间。
建图过程概述如下:
长期建图的概念是指完全或部分地对一个区域建图,并随着时间的推移,在继续与空间交互时完善和更新该地图。并且还允许在云中操作的应用程序,以及使用多台机器人在共享空间中进行建图(云分布式建图)。虽然 Slam Toolbox 也可以用于傻瓜式建图,并将该地图保存为 .pgm 文件,就像传统上存储地图一样,它还允许无损地保存位姿图和元数据以重新加载随后使用相同或不同的机器人继续建图。
长期建图由几个关键步骤组成:
允许用户创建和更新现有地图,然后序列化数据以在其他地图中使用。不仅可以保存数据,还可以保存位姿图以及要使用的相关元数据。
Slam Toolbox 支持所有主要模式:
在 RVIZ 界面中,能够在地图中重新定位或继续使用 ROS 服务以图形或编程方式进行建图。
定位由三部分组成:
要启用定位模式,请在配置文件中设置mode: localization
,以使得 Ceres 插件正确配置,以便能够快速添加和删除位姿图中的节点和约束,但这不是严格要求的,而是性能优化。定位模式将自动加载位姿图,进行第一次扫描并将其与局部区域进行匹配,以进一步细化估计位置,然后开始定位。
为了最大限度地减少通过 AMCL 迁移到此模式所需的更改量,我们还向 AMCL 使用的 /initialpose
主题公开订阅者以重新定位到某个位置,该主题还连接到 RVIZ 中的 2D Pose Estimation
工具。可以使用我们的方法进入定位模式,然后继续使用 AMCL 的 API,以便于集成。
它可以被认为是 AMCL 的替代品,不再需要任何 .pgm 地图。如果您想在移动时修改底层地图,上面的长期建图模式会做得更好。这种定位方法可能并不适合所有应用,它确实需要针对您的特定机器人进行大量调整,并且需要高质量的里程计。对于大多数初学者或寻求良好的开箱即用体验的用户,推荐 AMCL。
为 ScanSolver 抽象类创建了一个 pluginlib 接口,以便在运行时更改优化器来测试不同的优化器。
为人们可能感兴趣的几个不同的求解器生成了插件。支持 Ceres、G2O、SPA 和 GTSAM。
目前不支持GTSAM/G2O/SPA。它们的性能并不优于 Ceres。
使用 RVIZ 和插件加载任意数量的位姿图,这些位姿图将显示在RVIZ 中 map_N
下,以及一组交互式标记以允许您移动它们。一旦您按照您喜欢的方式将它们全部相对定位,您就可以将子地图合并到全局地图中,可以使用您选择的地图服务器实现来下载该地图。
这更多地展示了一旦拥有了原始数据就可以做的事情,但这么左意义不大,除非你习惯于手动缝合地图。
提供了 rviz 插件来帮助手动闭环和在线/离线建图。默认情况下,交互模式处于关闭状态(允许移动节点),因为这会对 rviz 造成很大影响。当您想要移动节点时,勾选交互框,移动您想要的内容,然后保存更改。如果犯了错误,请清除。完成后,再次退出交互模式。
还有一个工具可以帮助控制在线和离线数据。您可以随时停止处理新扫描或将新扫描数据保存到队列中。当您希望在机器人静止不动时允许包处理速度赶上(此选项仅在同步模式下有意义。在异步模式下,机器人永远不会落后。)或者您希望在手动循环闭合/手动“帮助”模式下,停止处理新扫描数据。如果队列中的内容超出您的需要,您也可以将其清除。
此外,还有用于序列化和反序列化服务的按钮,用于加载旧的位姿图以更新和细化,或继续建图,然后保存回文件。 “Start By Dock
”复选框将尝试扫描第一个节点的匹配(假设您从自定义的位置开始),为您提供里程估计。另一种选择是开始使用 GUI 中输入的位置或调用底层服务。此外,如果您碰巧刚刚暂停机器人或在两次运行之间没有移动太多,您可以使用当前里程位置估计。最后(也是最有用的),您可以使用 RVIZ 工具进行2D Pose Estimation,告诉它在定位模式下要去哪里,就像 AMCL 一样。
此外,RVIZ 插件将允许您将序列化地图文件添加为 RVIZ 中的子地图。它们将显示一个交互式标记,您可以平移和旋转以匹配,然后使用“生成地图”按钮生成合成地图。此时,合成地图在 /map
主题上广播,可以使用 map_saver
保存该地图。
建议始终在dock附近继续建图,如果不可能,请从位姿或地图合并技术开始研究。
界面如下图所示。
启用交互模式,图形节点将从标记更改为可以操作的交互式标记。移动节点时,可以保存更改,它会将更新的位置发送到位姿图,并导致优化运行发生,以使用新节点位置更改位姿图。如果机器人被推、滑倒、撞到墙上,或者里程计发生漂移并且您想手动纠正它,这会很有帮助。
当地图足够大时,RVIZ 中的交互式标记数量可能很大,并且 RVIZ 可能开始滞后。建议将此功能用作测试调试工具,而不是用于生产。
以下是使用的服务/主题。请参阅 rviz 插件以了解其使用的实现。
Topic | Type | 描述 |
---|---|---|
/scan | sensor_msgs/LaserScan | 来自激光雷达的输入扫描数据 |
tf | N/A | 配置的 odom_frame 到 base_frame 的转换 |
Topic | Type | 描述 |
---|---|---|
map | nav_msgs/OccupancyGrid | 以map_update_interval 频率表示位姿图的占用网格 |
pose | geometry_msgs/PoseWithCovarianceStamped | 配置的map_frame 中base_frame 的位姿以及根据扫描匹配计算的协方差 |
Topic | Type | 描述 |
---|---|---|
/slam_toolbox/clear_changes | slam_toolbox/Clear | 清除所有待处理的手动位姿图操作的更改 |
/slam_toolbox/deserialize_map | slam_toolbox/DeserializePoseGraph | 从磁盘加载保存的序列化位姿图文件 |
/slam_toolbox/dynamic_map | nav_msgs/OccupancyGrid | 请求位姿图的当前状态作为占用网格 |
/slam_toolbox/manual_loop_closure | slam_toolbox/LoopClosure | 请求对位姿图进行手动更改 |
/slam_toolbox/pause_new_measurements | slam_toolbox/Pause | 暂停处理新传入的激光扫描 |
/slam_toolbox/save_map | slam_toolbox/SaveMap | 保存可用于显示或 AMCL 定位的地图图像文件。它是 map_server/map_saver 上的一个简单包装器,但很有用。 |
/slam_toolbox/serialize_map | slam_toolbox/SerializePoseGraph | 保存地图位姿图和数据,可用于继续建图、slam_toolbox 定位、离线操作等 |
/slam_toolbox/toggle_interactive_mode | slam_toolbox/ToggleInteractive | 切换进入和退出交互模式 |
默认配置在 config 目录中给出。
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 问题创建中的性能优化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
- 如果没有找到可行的匹配,是否自动增加搜索网格大小
使用 rosdep 安装
rosdep install -q -y -r --from-paths src --ignore-src
或通过apt安装
apt install ros-eloquent-slam-toolbox
通过下面的方式运行
ros2 launch slam_toolbox online_sync_launch.py
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。