【移动机器人技术】Cartographer-参数配置方法及含义

参考官网 Tuning methodology

通用调参

参数的物理含义

传感器输入部分

  • TRAJECTORY_BUILDER_nD.min_range
    TRAJECTORY_BUILDER_nD.max_range
    激光雷达数据的有效范围,需根据传感器参数和机器人工作场景确定。

  • TRAJECTORY_BUILDER_2D.missing_data_ray_length
    当传感器数据超出有效范围最大值时,按此值来处理。默认配置为8m,小于最大距离30m。

  • TRAJECTORY_BUILDER_2D.max_z
    TRAJECTORY_BUILDER_2D.min_z
    将3D多线激光雷达的z轴数据,投影至平面,当做2D激光雷达使用。

  • TRAJECTORY_BUILDER_nD.num_accumulated_range_data
    积累到这个数量的点云信息后,执行一次匹配scan_match,将有效点云插入局部地图InsertIntoSubmap().
    匹配频率越高(累积数值小)映射畸变越小,每一scan数据越多,越利于匹配。

  • TRAJECTORY_BUILDER_nD.voxel_filter_size
    由于激光雷达的基于原点旋转扫描采样,距离近的障碍物采集数据密集,距离远的障碍物采集点稀疏,为保证远近障碍物权重一致,需做处理。
    采用体素滤波器进行降采样机制,使得局部稠密的点变得稀疏。此值越小,得到的数据越稠密,但是计算量越高;此值越大,丢失数据越多,但计算更快。
    思考:针对不同性能(分辨率不同,采集频率不同)的激光雷达,这个数值如何设置?

  • TRAJECTORY_BUILDER_nD.*adaptive_voxel_filter.max_length
    TRAJECTORY_BUILDER_nD.*adaptive_voxel_filter.min_num_points
    自适应体素滤波器adaptive voxel filter参数配置,自适应得出的参数在配置参数范围内。

  • TRAJECTORY_BUILDER_2D.use_imu_data
    TRAJECTORY_BUILDER_nD.imu_gravity_time_constant
    2D SLAM 可选 IMU;3D SLAM 必选 IMU。
    2D 订阅IMU话题后,将由imu话题来计算运动的角速度值,同时激光雷达俯仰角度变化后,也可以将一定高度范围内的点云投影到平面上。

局部local SLAM部分

两种匹配策略:

CeresScanMatcher:用于高质量的传感器场合;
RealTimeCorrelativeScanMatcher:用于传感器质量较差场合,该算法拥有类似于回环检测的特点,具有环境鲁棒性,但耗费计算资源。

CeresScanMatcher的权重配置

TRAJECTORY_BUILDER_nD.ceres_scan_matcher.translation_weight
TRAJECTORY_BUILDER_nD.ceres_scan_matcher.rotation_weight
这里的权重是指:PoseExtrapolator或者RealTimeCorrelativeScanMatcher的权重;
注意:权重参数无量纲,不同参数的权重不可以相互比较。

Ceres匹配算法收敛速度配置

TRAJECTORY_BUILDER_nD.ceres_scan_matcher.ceres_solver_options.use_nonmonotonic_steps
含义:bool量,启动非单调置信区域;
TRAJECTORY_BUILDER_nD.ceres_scan_matcher.ceres_solver_options.max_num_iterations
含义:最大迭代步数;
TRAJECTORY_BUILDER_nD.ceres_scan_matcher.ceres_solver_options.num_threads
含义:线程数;

RealTimeCorrelativeScanMatcher启用和参数配置

  • 启用
    TRAJECTORY_BUILDER_nD.use_online_correlative_scan_matching
  • 搜索窗口
    TRAJECTORY_BUILDER_nD.real_time_correlative_scan_matcher.linear_search_window
    TRAJECTORY_BUILDER_nD.real_time_correlative_scan_matcher.angular_search_window
  • 权重
    TRAJECTORY_BUILDER_nD.real_time_correlative_scan_matcher.translation_delta_cost_weight
    TRAJECTORY_BUILDER_nD.real_time_correlative_scan_matcher.rotation_delta_cost_weight

motion filter配置

为了防止一个submap中插入太多scan数据,加入motion filter,在移动不明显时丢弃点云数据。
全部条件不超出以下条件,则丢弃。
有效帧的判断阈值参数入下:
TRAJECTORY_BUILDER_nD.motion_filter.max_time_seconds
时间间隔
TRAJECTORY_BUILDER_nD.motion_filter.max_distance_meters
平移距离
TRAJECTORY_BUILDER_nD.motion_filter.max_angle_radians
旋转角度

Submaps大小规格配置

Submaps有一定数量的range data构成。Submaps越小,内部漂移越小;Submaps越大,越有利于全局定位的回环检测。
TRAJECTORY_BUILDER_nD.submaps.num_range_data

栅格地图格式

通常为PROBABILITY_GRID格式,可选Truncated Signed Distance Fields (TSDF)格式。
TRAJECTORY_BUILDER_2D.submaps.grid_options_2d.grid_type

概率栅格地图占有概率计算权重

栅格地图的最小单元odds是依据hits、misses进行更新栅格概率,权重可配置
TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.probability_grid_range_data_inserter.hit_probability
TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.probability_grid_range_data_inserter.miss_probability

地图分辨率配置

2D地图仅有一个分辨率配置项
TRAJECTORY_BUILDER_2D.submaps.grid_options_2d.resolution

全局Global SLAM

全局定位优化在后台运行,执行“the optimization problem” 和 “sparse pose adjustment”两项任务,以达到修整submaps之间相对位姿关系的目的。

执行频率

当一个数量的trajectory nodes被插入地图后,就执行一次全局优化。
POSE_GRAPH.optimize_every_n_nodes
当该参数设置为0时,禁用全局优化功能,仅在调试local slam时才使用。

搜索范围

POSE_GRAPH.constraint_builder.max_constraint_distance
POSE_GRAPH.fast_correlative_scan_matcher.linear_search_window
POSE_GRAPH.fast_correlative_scan_matcher*.angular_search_window
以上这些范围,不是回环检测的匹配范围。

采样率

POSE_GRAPH.constraint_builder.sampling_ratio
通过将采样实现限制约束条件的数量和计算量,此值过低会使得约束失效,无法正确回环检测,此值过高或增加计算符合,影响实时性。

初步匹配

POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.branch_and_bound_depth
使用FastCorrelativeScanMatcher最初步的帧匹配,依赖参数branch_and_bound_depth。

匹配方法与分数

POSE_GRAPH.constraint_builder.min_score
POSE_GRAPH.constraint_builder.ceres_scan_matcher
当FastCorrelativeScanMatcher初步匹配的结果分数高于min_score时,才进入下一步的Ceres Scan Matcher处理。

权重

POSE_GRAPH.constraint_builder.loop_closure_translation_weight
POSE_GRAPH.constraint_builder.loop_closure_rotation_weight
POSE_GRAPH.matcher_translation_weight
POSE_GRAPH.matcher_rotation_weight
POSE_GRAPH.optimization_problem.*_weight
POSE_GRAPH.optimization_problem.ceres_solver_options

低延时配置

在机器人定位场景中,低延时非常重要。
Local SLAM,在前台实时运行,对延迟影响很大;
Global SLAM,运行在后台,处理一系列的子地图,若不能保证实时性,则各子地图间的关系会发生漂移。
降低 global SLAM 延迟, 可采取如下措施:

  • 降低 optimize_every_n_nodes;
    每结束一个node都会添加对应的约束,等待n个node完成后,执行一致回环优化;
  • 增加 MAP_BUILDER.num_background_threads 至内核数量;
    这是线程池的数量;
  • 降低 global_sampling_ratio;
    回环检测采用submaps的采样率;
  • 降低 constraint_builder.sampling_ratio;
    约束条件添加时的采样率;
  • 增加 constraint_builder.min_score;
    约束条件的最小分数;
  • 关于 adaptive voxel filter(s), 降低 .min_num_points, .max_range, 增加 .max_length;
  • 增加 voxel_filter_size, submaps.resolution, 降低 submaps.num_range_data;
  • 降低搜索窗口的尺:.linear_xy_search_window, .linear_z_search_window, .angular_search_window;
  • 增加 global_constraint_search_after_n_seconds;
  • 降低 max_num_iterations;

降低Local SLAM延时,可采取如下措施:

  • 增加 voxel_filter_size
  • 降低 submaps.resolution
  • 关于 voxel filter(s), 降低 .min_num_points, .max_range, 增加 .max_length
  • 降低 max_range (尤其是信号噪声大时)
  • 降低 submaps.num_range_data

纯定位配置

参考Pure Localization in a Given Map段落
在配置文件中使能纯定位功能
TRAJECTORY_BUILDER.pure_localization = true
降低POSE_GRAPH.optimize_every_n_nodes,可增加定位频率;
降低global_sampling_ratio,constraint_builder.sampling_ratio,可降低回环检测频率;
可参考 lower latency(低延时设置);

注意事项:
启动纯定位功能后,submaps.resolution的值需要与加载的地图文件.pbstream分辨率一致。

里程计配置

若系统中有里程计存在,则可通过配置 use_odometry = true 将里程计作为输入。
一共有4个参数配置local 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

坐标系含义

配置文件中提供四个坐标系

  • map_frame: 地图坐标系,单一机器人的全局坐标系,“map”;
  • tracking_frame:跟踪和校准对象的坐标系(激光雷达坐标系),“base_link”;
  • published_frame:发布对象,在TF中发布一个坐标,达到校准tracking_frame的目的;
  • odom_frame:里程坐标系名称,“odom”;

是否需要在TF中发布里程坐标系:
如果外部模块提供了里程信息,则cartographer无需提供里程,则设置:
provide_odom_frame = false;

机器人里程计单元会发布里程信息: odom -> base_foot_print。但是由于长时间的运行后,里程信息会发生漂移,需要修整map -> odom 的关系。

cartographer 会实时跟踪估算base_link相对于map的关系;因为base_foot_print与base_link为固定关系,所以可修正odom相对于map的关系,达到里程计校准的目的。

use_odometry = false, – 是否订阅/odom话题,订阅后将会采用里程计的位置话题来计算线速度值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值