cartographer源码编译和参数优化

建图整体流程代码分析

cartographer安装以及环境配置相关

cartographer源码链接

相关库安装脚本:

cartographer优化调参相关

一、优化方向

算法分析

   该算法主要分为两个部分,第一个部分称为Local SLAM, 该部分通过一帧帧的Laser Scan建立并维护一系列的Submap,而所谓的submap就是一系列的Grid Map。当再有新的Laser Scan中会通过Ceres Scan Matching的方法将其插入到子图中的最佳位置。但是submap会产生误差累积的问题,因此,算法的第二个部分,称为Global SLAM的部分,就是通过Loop Closure来进行闭环检测,来消除累积误差:当一个submap构建完成,也就是不会再有新的laser scan插入到该submap时,算法会将该submap加入到闭环检测中。闭环检测的本质也是一个优化问题,该优化问题被表达成了一个pixel-accurate match的形式,解决优化问题的方法是Branch-and-Bound Approach.

1. 提高子图大小阈值,减少子图数量。这会减少优化问题规模和内存占用。

具体操作:调整trajectory_builder_2d.lua配置中trajectory_builder_2d.submaps.num_range_data参数

增加这个参数的值,会直接增加每个子图的大小,从而减少子图的总数量。
例如,默认配置中这两个参数的值分别为90如果计算资源受限,可以将它们改为更高的值,如150,就会直接减少子图的数量,降低内存和计算需求。
但是需要注意,过度增加子图大小也有负面影响:

  • 每次子图优化计算量会增大
  • 增加优化时的距离外推误差
  • 减少全局优化的频率
    所以最好多次调整测试,找到一个平衡的子图大小。具体值需要根据传感器配置和运动速度确定。
    除此之外,还可以调整优化频率相关参数来进一步减少优化计算。但都需要权衡精度和效率
2. 增大子图优化间隔,减少优化频率。每次优化计算量会减小。

POSE_GRAPH.optimize_every_n_nodes 插入的节点数大于optimize_every_n_nodes时执行一次优化

3. 降低扫描匹配过程的分辨率。这会加速匹配过程。
4. 使用更简单的优化算法,如增量优化而不是全优化。
5. 剔除冗余扫描点云数据,只保留特征点,减少数据规模。
6. 适当增加匹配和优化的容差,降低精度要求。
7. 在线生成地图时,及时保存并清除历史子图数据,减少内存占用。
8. 在离线模式下,使用关键帧稀疏地表示轨迹与地图。
9. 利用GPU加速矩阵运算、点云处理等计算密集模块。

目前小车是否支持GPU还得再看(BL板卡就不用考虑此项)

10. 屏蔽非必要Ros的topic和service发布订阅
11. 调参数
  • num_accumulated_range_data 目前该参数表示用几帧雷达数据合并

是否考虑调大次参数,减少直线提取频率

12. 减少拷贝

RangeDataCollator::AddRangeData() 和 RangeDataCollator::CropAndMerge()函数优化,只用一个传感器建图时,可以下图位置减少id_to_pending_data_数据的拷贝和删除

13. 加载和保存地图时优化

二、具体调整参数

cartographer官方调参

----调整参数降低cpu影响较大的

--绑定qslam_c为大核 降低100cpu

TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching=false --false 关闭暴力匹配结果初值

TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 3 --1 5 降低雷达数据采样频率

POSE_GRAPH.constraint_builder.sampling_ratio = 0.15 --0.3 0.2 降低采样频率

TRAJECTORY_BUILDER_2D.motion_filter.max_distance_meters=0.25 --0.2 0.3 增大运动滤波距离

----以下参数可根据现场实际情况调整

POSE_GRAPH.global_constraint_search_after_n_seconds = 12 --10

--适当降低线程数

MAP_BUILDER.num_background_threads=2 --8 4

POSE_GRAPH.constraint_builder.ceres_scan_matcher.ceres_solver_options.num_threads=2 --8 4

POSE_GRAPH.optimization_problem.ceres_solver_options.num_threads=2--8 4

TRAJECTORY_BUILDER_2D.ceres_scan_matcher.ceres_solver_options.num_threads=2 --1 4

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值