素材巴巴 > 程序开发 >

Cartographer调参与系统资源使用情况分析

程序开发 2023-09-03 16:02:44

任务动机:通过Cartographer调参,达到在Rockchip rk3399开发板上实时和精度兼顾的效果。

任务描述:参照Cartographer官方调参文档,通过逐个调参,记录真实机器人建立的地图和系统资源消耗。

1. 硬件及OS信息

nametypeCPURK3399 双核Cortex-A72(大核)+四核Cortex-A53(小核)Kernel4.4.179ROSMeloclidarToFbagSpeed 0.266 m/s Turn 1.0 Rad/s

使用预先录制好的bag,然后用同一个bag对比不同的参数效果

2. 参数效果

评判调参效果,从两方面进行:

  1. 建图中的优化实时性,即在建图中纠偏优化的实时速度;
  2. 建图完成后的优化速度或者优化时间。

建图完成以后,地图的保存分成三步,写成一个脚本文件,这里并没有用通用变量,用起来需要进入脚本修改名称。使用cartographer_ros/offline_node 进行参数粗调,找到建图质量较好的地图后,记录实时的CPU使用情况。

2.1 官方给出的调参教程

### Low latency 调整
 #### local
 - 提高 voxel_filter_size
 - 提高 submaps.resolution
 - 降低 min_num_points max_range 提高 max_length
 - 降低 max_range
 - 降低 submap.num_range_data#### global
 - 降低 optimize_every_n_nodes
 - 提高 num_background_threads <= CPU 核数
 - 降低 linear_xy_search_window linear_z_search_window angular_search_window
 - 提高global_constraint_search_after_n_seconds
 - 降低max_num_iterations

2.2 参数调整

第一个调整的参数推荐 MAP_BUILDER.num_background_threads 先明确预留的CPU资源,在这个基础上进行调整。

2.2.1 Local SLAM(optimize_every_n_nodes = 0)

a.submap.num_range_data

构建子图需要的scan数据量

过程效果 = 1

90

最终效果 = 4

90-2

CPU使用情况

90

过程中

10

优化后

10-afterAPeriod

CPU

10

过程中

50

优化后

50-afterAPeriod

过程中

30

优化后

30-afterAPeriod

CPU

30

过程中

70

优化后

70-afterFinishedTraj

CPU

70

优化后

40-finishedTraj

过程中 60

优化后 60-finishedTraj

Result:

可以看出,num_range_data设置的值与CPU有这样一种关系,值小(10),CPU使用率比较稳定,整体偏高,值大时,CPU短暂爆发使用(插入子图的时候),平时使用率低,呈现极大的波动状态。

num_range_data表示多少个scan来构成submap,这个值的设定需要根据laser和运动速度进行具体的调整。

b. real_time_correlative_scan_matcher.rotation_delta_cost_weiht

finish_trajectory 后,及完成优化效果均相同

0

CPU

original 0.1

finish_trajectory and optimized 0.1-optimized

CPU

original 0.3

finish_trajectory & optimized 0.3-optimized

CPU

0.3

original 0.6

finish_trajectory & optimized 0.6-optimized

original 

optimized 

1.0-optimized

CPU

original 2.0

finish_trajectory & unoptimized 2.0-optimized

CPU

2.0

Results:

从CPU使用率来看,该参数并不会产生明显的影响,主要影响的是过程中的效果,间接会影响最后的优化时间长

2.2.2 Global SLAM

调整scan_matcher中的求解方法

a. bool use_online_correlative_scan_matching

选择是否先求解online scan matching,然后用correlative scan matcher为Ceres求解器产生一个好的初始解

完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)23024

最终优化效果于使用初值相同。

完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)26034

use_online_true

b. Ceres.POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.branch_and_bound_depth

branch and bound是优化器中fast_correlative_matcher搜索方法,界定分支法,求解问题构成一个搜索树,depth是构造树的深度。

完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)23034

过程中

b7

优化后

7-1

完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)so long优化时间太长,放弃放弃 完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)131624

优化完成后

5-1

完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)24534

过程1 9-1 优化完成后 9-2--146

完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)14244

过程1 8-1 优化完成后 8-2

这里走了一个大坑,在从机使用bag play,省掉了一个ssh到主机的过程,结果网络延迟造成了结果不稳定。

c. real_time_correlative_scan_matcher.real_time_correlative_scan_matcher.linear_search_window

线距离搜索框,在这个框的大小内,搜索最佳scan匹配.

完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)27134 完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)unknown实时效果极差,舍弃unknown 完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)unknown实时效果差,舍弃unknown 完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)unknown实时效果不佳,延迟感太强,舍弃unknown 完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)38344

减小该参数可以增强实时的建图效果,降低闭环优化的效果,形成闭环时,产生的重影较多

d. real_time_correlative_scan_matcher.real_time_correlative_scan_matcher.angular_search_window

同上,角度搜索框的大小

完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)27134 完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)太长,不等了14

过程中出现

 

40-1

完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)40933

过程中 10-1

过程中2 10-2

优化后

10-3

d.real_time_correlative_scan_matcher( translation_delta_cost_weight)/(rotation_delta_cost_weight)

这两个参数相当于最小化误差函数中的权重值,两者的比值,决定了更侧重与平移和旋转中的哪部分

这个值大小的设定,可以参照local latency rotation_delta_cost_weight的修改

完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)27134 完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)long ...24

0.5-1

完成优化时间过程效果(1-4/差-佳)最终效果(1-4/差-佳)long...2.54

0.5-s-1

3. 其他相似参数

parameterstypeannotationweightdouble优化轨迹时的重点优化部分,相对translation和rotation的比例max_num_iterationsint优化迭代步数linear_search_windowintscan匹配的帧数范围odometry_rotation/translation weightdouble调整比例,改变优化误差函数的着重部分huber_scaledouble鲁棒核函数,去噪

4. 参考

1.https://google-cartographer-ros.readthedocs.io/en/latest/tuning.html

2.https://google-cartographer-ros.readthedocs.io/en/latest/algo_walkthrough.html

3.https://google-cartographer.readthedocs.io/en/latest/configuration.html


标签:

上一篇: Spring与SpringMVC 下一篇: Canvas 基础使用
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。