cartographer参数调整

摘要:
1、 制图仪安装测试的基本配置:ubuntu16.04(x64),ROSDYNAMIC 1。在sequence_ros1.0.0中安装ceres-solver.14.0、protobuf3.5.0、mapper1.0.0、mapper1) Ceres solver在ubuntu16.04下有预编译的包,可以通过apt-get安装;2) Protobuf在

一、cartographer安装测试

  基本配置:ubuntu 16.04 (x64),ROS Kinetic

  1、按顺序安装ceres-solver 1.14.0、protobuf 3.5.0、cartographer 1.0.0、cartographer_ros 1.0.0;

    1)ceres-solver在ubuntu 16.04下有预编译包,可以通过apt-get安装;

    2)protobuf在ubuntu 16.04下有预编译包,但版本不匹配,需要从源码安装;

    3)cartographer需要源码安装,安装命令参考官方文档:https://google-cartographer.readthedocs.io/en/latest/index.html

    4)安装依赖时可以通过dpkg –l | grep <software_name>查看依赖是否已经安装;

    5)cartographer_ros可以通过catkin_make直接编译;

  2、参考 https://google-cartographer-ros.readthedocs.io/en/latest/index.html 测试Demo;

    1)此处仅测试了2D Demo;

二、cartographer测试问题

  测试问题:在上述测试过程中,cartographer出现了极大的延迟(rosbag play约30min,而在rosbag play结束后,建图仍然需要大约1h),如何解决?

  1、首先检查硬件配置(i7-4500U(1.8GHz,双核四线程),8G RAM),满足cartographer的硬件需求(官方文档所述16G RAM在上述测试中限制不大,通过top命令可知上述测试的RAM使用最大30%左右);

  2、对比cartographer论文(Real-Time Loop Closure in 2D LIDAR SLAM)中的硬件配置(Intel Xeon E5-1650(3.2GHz,六核十二线程));

    (╯‵□′)╯︵┻━┻

  3、所以解决方法分为两种:

    1)分离法:将cartographer运行在高性能机器上,运动终端将传感器信息通过无线网络上传,从技术上来说,ROS作为分布式控制系统可以轻松实现这种功能分离,但是存在两个问题:稳定的无线网络和成本;

    2)妥协法:通过调整参数,降低建图质量和鲁棒性,提高实时性,适合计算资源不足的小型工控机以及中小范围建图应用;

三、cartographer参数调整

  cartographer的配置文件在/usr/local/share/cartographer/configuration_files/目录下

  参数调整主要参考cartographer_ros官方文档中的Low Latency:https://google-cartographer-ros.readthedocs.io/en/latest/tuning.html

  以下参数调整根据上述测试过程中使用的硬件配置进行

  1、MAP_BUILDER.num_background_threads=2(=核数(双核四线程=2));

  2、POSE_GRAPH.constraint_builder.sampling_ratio=0.10,对应于约束的数量上限;

  3、POSE_GRAPH.min_score=0.60,成为约束的最低分数,这个值越大,计算速度相对越快,约束数量相对越少,在sampling_ratio较小的情况下,很可能会造成约束过少而导致建图失败,这个值越小,则效果相反,因此这个值可能需要多次调整;

  4、POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.linear_search_window=5.

    POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.angular_search_window=math.rad(20.),对应于闭环检测(约束检测)时的搜索范围;

  备注:上述各参数调整核心是闭环检测(约束检测),闭环检测是图优化过程中最为重要的部分,也是最为耗时的部分,因此减少约束总数和搜索范围可以有效提高实时性。

四、cartographer_ros

  cartographer_ros配置文件在cartographer_ros/configuration_files/目录下

  cartographer_ros实际应用时需要进行一些参数调整以适配实际情况,以2D建图为例,其配置文件为backpack_2d.lua

  1、一个惯导,发布惯导数据/imu (Imu),惯导坐标系为base_link;

  2、一个普通2D激光雷达,发布雷达数据/scan (LaserScan),tf: base_link->base_laser,

    修改options.num_laser_scans=1,options.num_multi_echo_laser_scans=0;

  3、roslaunch cartographer_ros demo_backpack_2d.launch;

  如果需要使用odom

  4、一个轮速计,发布/odom (Odometry),tf: odom->base_link,

    修改options.published_frame=”odom”,options.use_odometry=true;

  如果没有惯导或不相信其他传感器,而只使用激光雷达数据:

  5、修改cartographer配置文件:

    TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching=true;

以上。

免责声明:文章转载自《cartographer参数调整》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nginx反向代理、负载均衡以及分布式下的session保持es使用term+filter查询(对type为text的查询注意点)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

无法为数据库中的对象分配空间,因为'PRIMARY'文件组已满

使用SQLServer2012保存数据时出错。错误消息:无法为数据库“***”中的对象“***”分配空间,因为“PRIMARY”文件组已满。请通过删除不必要的文件、删除文件组中的对象、将其他文件添加到文件组或启用文件组中现有文件的自动增长来增加可用磁盘空间。...

WPF LiveChart 图表详解

我不喜欢看文本版。单击我观看视频。本文主要介绍LiveChart中图表的用法。WPF:数据绑定、数据显示样式等。导入LiveChart.WpfNuGet以搜索LiveChart包并安装LiveChart.WPF。引用LiveChart.WPF在使用的接口中,引用LiveChart.WPF的类库xmlns:lvc=“clr-namespace:LiveChar...

oracle查询连接数、并发数、共享池大小

1、查看当前数据库建立的会话情况:selectsid,serial#,username,program,machine,statusfromv$session;2、查询数据库当前进程的连接数:selectcount(*)fromv$process;3、查看数据库当前会话的连接数:selectcount(*)fromv$session;4、查看数据库的并发连接...

JS事件 文本框内容改变事件(onchange)通过改变文本框的内容来触发onchange事件,同时执行被调用的程序。

以下代码显示,当用户更改文本框中的文本时,会弹出一个对话框“您更改了文本内容!”。运行结果:该任务补充了右侧编辑器的第13行。当文本框的内容发生更改时,将调用message()函数,并弹出对话框“您更改了文本内容!”。DOCTYPEHTML˃文本框内容更改事件functionmessage(){alert(“您更改了文本内容!”);}个人简介:请编写您的个人...

数据不平衡的相关

大多数常见的机器学习算法不能很好地处理不平衡的数据集。例如,搜索引擎的点击预测(点击页面往往占很小的比例)、电子商务中的产品推荐(正在购买的推荐产品的比例很低)、信用卡欺诈检测、网络攻击识别、癌症检测等。处理数据不平衡的方法主要有以下几种。2.数据级别2.1重新采样2.1.1欠采样(下采样)欠采样通过减少丰富类的大小来平衡数据集。它试图通过增加稀有样本的数量...

k8s集群上删除pod及service

删除k8s集群中的pod:找到pod的名称空间,并根据名称空间删除pod1。首先删除pod2,然后删除相应的部署。否则,删除pod是无用的。您还将看到pod,因为deployment.yaml文件中定义的副本数如下:delete the pod[root@test2~]#kubectlgetpod-njenkinsNAMEREADYSTATUSRESTART...