ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【cartographer_ros】八: 官方Demo参数配置和效果

2022-07-25 14:04:12  阅读:259  来源: 互联网

标签:cartographer matcher scan Demo BUILDER 2D TRAJECTORY GRAPH ros


上一节介绍cartographer的主要配置参数。
本节会研究一下这些参数改动,对算法的影响和效果,cartographer的调参一直是一个比较复杂的过程。


1,官方调参文档

官方文档

(1):调整本地 SLAM

关闭全局 SLAM 以免干扰本地调优:

POSE_GRAPH.optimize_every_n_nodes = 0

设置正确的子图大小:

TRAJECTORY_BUILDER_2D.submaps.num_range_data

调整CeresScanMatcher,使偏离先验的代价变得高昂:


TRAJECTORY_BUILDER_2D.ceres_scan_matcher.translation_weight = 2e2 
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 4e2 

(2):低延迟

为了调整全局 SLAM 以降低延迟,我们减少其计算负载,直到始终跟上实时输入。 低于此阈值,我们不会进一步降低它,而是尝试达到最佳质量。

为了减少全局 SLAM 延迟,我们可以:


降低 optimize_every_n_nodes
增加 MAP_BUILDER.num_background_threads
降低 global_sampling_ratio
降低 constraint_builder.sampling_ratio
增加 constraint_builder.min_score
对于自适应体素滤波器, 降低 .min_num_points, .max_range, 增加 .max_length
增加 voxel_filter_size, submaps.resolution, 降低 submaps.num_range_data
降低 search windows sizes, .linear_xy_search_window, .linear_z_search_window, .angular_search_window
增加 global_constraint_search_after_n_seconds
降低 decrease max_num_iterations

要调整局部 SLAM 以降低延迟,我们可以:


增加 voxel_filter_size
增加 submaps.resolution
对于自适应体素滤波器, 降低 .min_num_points, .max_range, 增加 .max_length
降低 max_range (尤其是如果数据有噪声的话)
降低 submaps.num_range_data

(3):纯定位

要调整纯定位模式,我们应该首先启用 TRAJECTORY_BUILDER.pure_localization = true 并大幅度减少 POSE_GRAPH.optimize_every_n_nodes 以接收频繁的结果。 有了这些设置,全局 SLAM 通常会太慢,跟不上。
作为下一步,我们大幅度降低global_sampling_ratioconstraint_builder.sampling_ratio 以抵消大量的约束。然后我们按照上面的解释调整参数来保持较低的延迟,直到系统可靠地实时工作。

(4):全局优化中的里程计

如果使用单独的里程计源作为本地 SLAM ( ) 的输入,我们还可以调整全局 SLAM 以从这些附加信息中受益。

use_odometry = true

总共有四个参数允许我们在优化中调整局部 SLAM 和里程计的各个权重:

POSE_GRAPH.optimization_problem.local_slam_pose_translation_weight
POSE_GRAPH.optimization_problem.local_slam_pose_rotation_weight
POSE_GRAPH.optimization_problem.odometry_translation_weight
POSE_GRAPH.optimization_problem.odometry_rotation_weight

我们可以根据我们对本地 SLAM 或里程计的信任程度来设置这些权重。默认情况下,里程计被加权到类似于局部 slam(扫描匹配)姿势的全局优化中。然而,车轮编码器的里程计通常在旋转中具有很高的不确定性。在这种情况下,可以减少旋转重量,甚至可以减少到零。


2:常用的参数

以revo_lds.lua为例:

MAP_BUILDER.use_trajectory_builder_2d = true

TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35
TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 8.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10.
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1

POSE_GRAPH.optimization_problem.huber_scale = 1e2
POSE_GRAPH.optimize_every_n_nodes = 35
POSE_GRAPH.constraint_builder.min_score = 0.65

3:调参效果

这里推荐火种源码的Cartographer调参
分析了下面参数单独调参后的效果变化和资源消耗

submap.num_range_data
real_time_correlative_scan_matcher.rotation_delta_cost_weiht
bool use_online_correlative_scan_matching
Ceres.POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.branch_and_bound_depth
real_time_correlative_scan_matcher.real_time_correlative_scan_matcher.linear_search_window
real_time_correlative_scan_matcher.real_time_correlative_scan_matcher.angular_search_window
real_time_correlative_scan_matcher( translation_delta_cost_weight)/(rotation_delta_cost_weight)

4:调参总结

--一个子图插入多少个节点,根据laser和运动速度进行具体的调整
TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35.
--雷达的最大最小距离,根据雷达硬件设定
TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 100.
--使用多高以上的点云,单线的时候不要设置,多线防止打到地面上的点干扰建图
TRAJECTORY_BUILDER_2D.min_z = 0.2 
--体素滤波参数
TRAJECTORY_BUILDER_2D.voxel_filter_size = 0.02
--ceres地图的扫描,平移,旋转的权重,影响建图效果,其他基本上是影响计算量等
--扫描匹配点云和地图匹配程度,值越大,点云和地图匹配置信度越高
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.occupied_space_weight = 10.
--残差平移、旋转分量,值越大,越不相信和地图匹配的效果,而是越相信先验位姿的结果
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.translation_weight = 1. 
--如果imu不好,接入后地图旋转厉害,可以将这里的旋转权重减小
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 1.

-- 2倍的num_range_data以上
POSE_GRAPH.optimize_every_n_nodes = 70. 
-- 如果添加的约束与潜在约束的比例低于此比例,则将添加约束 
POSE_GRAPH.constraint_builder.sampling_ratio = 0.3
-- 在子图附近考虑姿势的阈值,大于这个值将被略过
POSE_GRAPH.constraint_builder.max_constraint_distance = 15.
-- 回环检测阈值,如果不稳定有错误匹配,可以提高这两个值,场景重复可以降低或者关闭回环
POSE_GRAPH.constraint_builder.min_score = 0.55
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.60

【完】


在前面的文章中,介绍了数据的发布,和参数配置,下一节就开始介绍使用自己的数据,在cartographer进行建图和定位。

标签:cartographer,matcher,scan,Demo,BUILDER,2D,TRAJECTORY,GRAPH,ros
来源: https://www.cnblogs.com/CloudFlame/p/16517131.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有