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

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

(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(扫描匹配)姿势的全局优化中。然而,车轮编码器的里程计通常在旋转中具有很高的不确定性。在这种情况下,可以减少旋转重量,甚至可以减少到零。

以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
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)
--一个子图插入多少个节点,根据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进行建图和定位。

Original: https://www.cnblogs.com/CloudFlame/p/16517131.html
Author: CloudFlame
Title: 【cartographer_ros】八: 官方Demo参数配置和效果

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/566790/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球