cartographer探秘第三章之对比实验
第一步 雷达型号
本节将对4种雷达进行室外环境下的对比建图实验,并进行地图分析,最终给出每种雷达的最优参数。
4种雷达分别为:
1 倍加福的二维激光雷达-R2000(型号貌似只有一种):
在10Hz频率下角分辨率能达到0.042度,频率越高角分辨率越大。当出点数太多时carto会出现drop points 的情况,如下实验是在25Hz的最大出点数的情况下进行的,也就是25Hz允许的最小角分辨率。跑carto雷达的频率最好是35-40Hz之间,这个频率caro不出现drop points的出点数还需再进行试验。雷达最远范围大致为30m.
2 velodyne的VLP-16:
16线雷达,18.08Hz,每秒点数为30万;逆时针旋转,Y轴向前,X轴向右;电机RPM可以为300,600,900,1200,对应的角分辨率分别为0.1,0.2,0.3,0.4度。最远大致为130m。
需要用VLP-16分别进行二维与三维的建图实验。
3 hokuyo:
4 sick:
第二步 实验结果对比
1 倍加福雷达-2D-室内:
1.1 只用倍加福雷达,雷达频率25hz,打开online这个参数,其余默认。
1.2 倍加福雷达25hz+9轴imu,没开online
雷达最远范围设置为15米(因为距离远了偏差一点角度,最远处的偏差就很明显)。
经过调参之后的建图效果(使用默认参数建不成地图):
2 倍加福雷达-2D-室外:
2.1 25hz雷达+online
下图中绿点是起始点,红点是终止点,可以看到,图中的圆弧部分产生了偏移,并且非常明显。后来找原因是由于闭环没有闭环上导致的。
下图为carto中的约束的显示,中间部分相距10米左右的部分并没有检测出来闭环约束,导致了建图的偏差很大。
所以,第二次又进行实验,这次控制机器人回到起始点,以让他能够找到闭环。可以看到,圆弧部分的偏差很小,成功的添加了闭环约束并进行了累计误差的消除。同时,也可以得到,carto的后端优化不能很好的消除累计误差,主要是靠闭环约束来消除累计误差的。
3 vlp16-室内-2D
3.1 imu猜测
室内环境下进行建图,实验了半个月始终建不成图,困扰了很久。什么叫建不成图呢,结果如下图所示:
这是在配置了使用imu的时候才出现这种情况。如果是laser+online,或者是laser+odom,都不会出现这种状况。所以基本可以确定是imu的原因,但具体是什么就不知道了。
那原因是什么呢?探索了很久。。。很久。。。得有半个月吧。这期间实验了carto的各种调参,各种录制数据包,都是不行。
原因猜测1:
加速度太大,导致Imu数据不好。结果录制了全程慢速的数据包,还是会飘。。。
原因猜测2:
urdf的问题。由于我用的是9轴的Imu,型号如下,但是我实际放置imu的位置和urdf的位置不一致。在carto的github的issue中官方人员说这种强烈的旋转是由于urdf不对导致的。之后我又把urdf调整正确,发现效果确实好很多,但是还是会在某一时刻发生莫名的旋转导致图重叠。所以这个原因也不能解决我的问题。
原因猜测3:
carto的github的issue中遇到差不多问题的人提供了一种解决方案,就是将 imu的角速度中的x ,y 设置为0,他说他imu不准,这样只用z轴的角速度。我自己试了,还是不行。。。
这没啥办法了。。。换一个Imu试试,由于carto需要角速度和线速度,实验室还有一个4轴的Imu,数据量不够所以一直不愿意用。。。而且9轴的频率可以设置为200hz,最好400hz。4轴的这个最高只有100hz。为了让大家少走弯路所以我将具体型号放出来了。换上了这个imu之后发现数据非常稳定,一点也不漂,就是在突然停车时点云会冲出去一下,不能瞬间停住,但是caro会将他修回来,不会影响建图效果。
真实原因(补充):
经过对4轴和9轴的imu进行对比测试,发现9轴imu的数据准确度确实没有4轴imu高,但是也没有差很多。后来经过对lua文件进行调参,发现imu并不是影响地图强烈旋转的主要因素。
主要因素是ceres的平移和旋转的权重没有进行重新配置,当时使用的是默认的权重参数。
3.2 使用默认参数 建图效果如下:
参数配置为 laser(20hz)+imu,
submap.num_range_data=60,
num_accumulated_range_data = 2 (velodyne在20hz时只能输出一半的点云,所以这个参数设置为2,2帧scan为一个完整的点云)
(注:velodyne 在20hz下可以输出360度范围的点云,当时只改了launch里的电机转速为1200,没进雷达的配置网页里改rpm。)
POSE_GRAPH.optimize_every_n_nodes = 60. 没开online的结果如下:
开了online,并把submap.num_range_data=40(因为发现地图的偏移比较大)。结果如下:
好吧,开与不开感觉没啥区别。。。github的issue中官方人员说,在urdf不准时只用laser+online 依然可以很好的建图。urdf和imu准了online的效果就一般了???
虽然稍微有点偏,但是终于建成图了,还是很开心的。同时,在调参时发现,室内场景下,当雷达的范围为100米时,建图时只要稍微偏了一度,那这个100米的边就偏出去很大,所以可以得知,并不是雷达的范围越远越好。而且,velodyne的频率为10hz,在20hz时只有一半的点云,而carto的扫描匹配 是 对雷达的频率 依赖比较高的。因为只有频率越高,2帧间的时间越短,误差才能越小。所以20hz的频率的累积误差是很大的,室内环境下都会发生较明显的偏移。
caro的demo的数据包的雷达频率不知道怎么写的驱动,雷达的频率能达到1500hz,每一帧数据只有大概10度的点云,可能是这样数据处理起来比较省资源???
3.3 经过调参之后的效果:
图的质量总是上不去,每次旋转都会有偏差,虽然后端优化能够修正一下但不会完全消除误差。
大致猜测是由于雷达频率的问题,20hz的点云只有一半,就相当去10hz的雷达数据,频率太低导致预测的偏差很大,难以修正回来。之前使用倍加福雷达在30hz时这样的旋转偏差就很微小。
不管怎么调参,在旋转时机器人位姿都会向当前朝向的右侧偏,还不知道原因,还有待深入发掘实验。
4 vlp16-室内-3D
还是用的20hz的velodyne,4轴的imu,submap.num_range_data=90, POSE_GRAPH.optimize_every_n_nodes = 90
一次成图,实验了将 POSE_GRAPH.optimize_every_n_nodes = 0 ,即不进行后端优化,发现建图效果依然很好,从房间里走出去,在走廊转一圈回到房间时点云依然能房间匹配上。
点云图如下:
4.1 如何生成点云:
使用asset,具体说明https://google-cartographer-ros.readthedocs.io/en/latest/assets_writer.html
voxel_filter_and_remove_moving_objects 这个配置可以去处移动的物体。这个配置文件读取pbstream,和bag,可以生成ply和pcd 两种类型的点云。还可以生成点云的图片的3视图图片,透视效果。
--assets_writer_vlp16_3d.luaVOXEL_SIZE = 5e-2
include "transform.lua"options = {tracking_frame = "footprint",pipeline = {{action = "min_max_range_filter",min_range = 0.2,max_range = 100.,},{action = "voxel_filter_and_remove_moving_objects",voxel_size = 0.1,},{action = "dump_num_points",},{action = "intensity_to_color",min_intensity = 0.,max_intensity = 4095.,},-- We also write a PLY file at this stage, because gray points look good.-- The points in the PLY can be visualized using-- https://github.com/googlecartographer/point_cloud_viewer.
-- {
-- action = "write_ply",
-- filename = "points.ply",
-- },{action = "write_pcd",filename = "b3-2imu-backend+offline.pcd",},{action = "write_xray_image",voxel_size = VOXEL_SIZE,filename = "xray_xy_all_intensity",transform = XY_TRANSFORM,},}
}
return options
第一个点云地图是没加voxel_filter_and_remove_moving_objects的效果,下图是加了voxel_filter_and_remove_moving_objects之后的结果,发现点云图确实干净了一些,但是它也把地面删去了不少。
4.2 如何看点云:
谷歌的文档说可以通过 point_cloud_viewer or meshlab 看 ply的点云。point_cloud_viewer 的安装可以参考如下链接:
https://blog.csdn.net/chongzi865458/article/details/84137531
我根据这个安装了一下,安装过程特别繁琐。。。装完了之后发现是全黑屏,以为没打开,结果是太黑了。。。我真是醉了,一直按8调亮亮度,发现了点云,结果动起来特别卡,旋转操作也没太清楚,一卡一卡的根本调整不到好视角,可能是由于我工控机的显卡驱动没装的原因。
也装了meshlab。。。没找到能打开的文件。。。不懂这个。
我是用hdl_localization看的点云图,他能加载pcd的点云。
下图是我用9轴的Imu和20hz的雷达 使用 hdl_graph_slam 建的点云图,这个slam能够时实的生成点云图,不像carto只能后期处理。大致一看效果还不错,但是发现他的地面翘起来了。
在配置hdl的时候出现了一个问题,就是机器人在不动的时候始终 向上 或者 向下 跳动,并且一下向下。后来发现是launch配置雷达高度的问题,hdl根据雷达高度检测地面,而地面对于hdl是一个很强的约束,后来把高度调对了就好了很多。
4.3 调参之后的效果
vlp+9轴imu,没开online,参数大致调了调,没太细调,还是有点偏差的。由于我对点云还不太了解,很难查看偏差的程度,只能通过肉眼观察偏差。
以为pbstream单纯保存位姿,想着用3d 的pbstream文件生成二维的栅格地图,结果发现pbstream文件中会将点云也保存下来,并不能用于生成二维地图。
5 vlp16-室外-2D
还是存在和室内一样的问题,在纯旋转时地图会偏移很大。
经过调参之后的地图:
在走到尽头之后再回来之后的地图不能完全重叠,会产生偏移,因此这是走了一遍的结果。
在建图的过程中发现,雷达点的跳动达到10CM,因此地图的边为10cm,由于旋转导致的偏移能够到30cm。
6 vlp16-室外-3D
室外环境,使用vlp-16 20hz + 9轴imu 。这9轴imu在后续的实验中发现imu数据本身问题不太大,只不过数据没有4轴的那个准。后来我将使用200hz的imu建成了室外环境的3d图。当然,我把imu的link 改成正确的了,之前imu是随意贴的。
效果非常好,墙很直,误差也很小。跑的过程中的内存占用和cpu占用都不多。
但是2d的内存占用非常高,跑5分钟就已经占7个G了,所以到现在为止vlp-16室外的二维图还没有做出来。不过有一点很奇怪,我用倍加福25hz跑室外时内存占用不高,用vlp16 20hz(可以看成10hz) 时内存占用就很高。(原因为 submap大小的值设置的太小,室外环境下设置为40,太小,导致了内存占用过高)。
第三步 实验分析
1 carto对雷达频率要求比较高
在纯旋转的状态下,分别用10hz, 20hz, 30hz +9轴imu 进行建图实验。
10hz情况下:
20hz情况下:
30hz情况下:
结果:
发现当频率达到30hz时,做纯旋转运动时不会产生地图的偏移。
2 vlp16 20hz 时整体地图会向前进方向的右侧偏,目前没找到原因。
3 vlp16 室外情况下,地图的边为10cm,旋转导致的偏移将偏差30cm,并且在远处偏移更多。
cartographer探秘第三章之对比实验相关推荐
- 数据库系统概论 第三章 第五大题 实验报告
实验目标: 根据课本p71提供的表格,实现p130第五大题的问题,理解和掌握关系数据库标准SQL语言,能够熟练使用SQL语言完成各种数据库操作和管理任务.包括使用SQL DDL语句创建.更改和删除数据 ...
- python程序设计上机实践第三章答案_20192419 实验三《Python程序设计》实验报告
学号 2019-2020-2 <Python程序设计>实验3报告 课程:<Python程序设计> 班级:1924 姓名: 万腾阳 学号:20192419 实验教师:王志强 实验 ...
- 《MATLAB智能算法30个案例》:第30章 极限学习机的回归拟合及分类——对比实验研究
<MATLAB智能算法30个案例>:第30章 极限学习机的回归拟合及分类--对比实验研究 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30 ...
- 1709 ltsb 内存占用_「正点原子STM32Mini板资料连载」第三十二章 内存管理实验
1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十二章 内存管理实验 上一章,我 ...
- 计算机操作系统课后题答案第三章,计算机操作系统教程习题与实验指导(第3版)...
操作系统习题解答篇 第一章 操作系统概述 1.1 学习指导 1.2 习题解答 第二章 进程.线程与作业 2.1 学习指导 2.2 习题解答 第三章 中断与处理器调度 3.1 学习指导 3.2 习题解答 ...
- stm32 读取sd卡图片显示_「正点原子STM32Mini板资料连载」第三十五章 汉字显示实验...
1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十五章 汉字显示实验 汉字显示在 ...
- 西安交大梁力上机实验第三章12,从0到180度每隔5度输出该角度的正弦值余弦值
西安交大梁力上机实验第三章12 从0到180度每隔5度输出该角度的正弦值余弦值 ` #include<bits/stdc++.h> using namespace std; int mai ...
- 【正点原子FPGA连载】第三十四章RGB-LCD触摸屏实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...
- 西安交大梁力上机实验第三章5,绝对温度为T的黑体,对波长为入的辐射功率为
西安交通大学梁力上机实验第三章5 绝对温度为T的黑体,对波长为入的辐射功率为 题目 # include<iostream> #include<cmath> using name ...
- 【网络工程管理 第三章】 各类网络设备 交换机 VLAN配置实验
网络工程管理 第三章 各类网络设备 交换机 VLAN配置实验 网络设备的功能层次 OSI层次 地址类型 设备 传输层及以上 应用程序进程地址(端口号) 网关(协议转换器) 网络层 网络地址(IP地址) ...
最新文章
- Kprobe在Linux kernel debug中的应用
- python入门作业编程题-Python语言编写有趣练习题!
- C++(STL):26 ---关联式容器set用法
- Apache OpenJPA 2.1.0 发布
- “杨振宁理论物理研究所”
- Z-blog拓源纯净主题
- 贪心算法——洛谷(P1106)删数问题
- 三星uboot1.1.6源码分析——start.s(1)
- 4 合并grid列_Grid教程
- 有关Visual Studio Code的说明
- php使用cookie获取浏览记录,php 使用COOKIE制作浏览记录_PHP教程
- 三种方法打印 main函数的返回地址的值(old EIP)(用途,你懂得!)
- APP上架市场隐私政策被拒(关于未经用户同意收集用户信息)
- Android 分享到LINE
- arduino触须传感器使用方法
- matlab求基音频率,语音中提取基音频率matlab程序.doc
- GateWay坑——context-path
- 计算机软件标杆企业,张军平老师—人工智能专家,复旦大学教授,博士生导师,中国计算机协会人工智能专委会委员,软件学报和自动化学报责任编辑...
- Springboot项目搭建有ftpClientPool的Ftp工具类
- 秉火429笔记之十五 DMA--直接存储区访问
热门文章
- 领域驱动设计(domain driven design)战略篇之一 战略 Bounded Context
- 公平的席位分配(Q值方法)
- 何为挂载(mount)?
- 乐Pro3 乐视X720/乐视X722通刷官方线刷包_救砖包_解账户锁
- 空间|时间|对象 圈人 + 目标人群透视 - 暨PostgreSQL 10与Greenplum的对比和选择
- remix下ballot.sol调试
- php zend_extension,extension 和zend_extension 两种扩展
- networks.demo_dev.ipam.config value Additional properties are not allowed (‘gateway‘ was unexpected)
- 應電鍍廠要求把5個ITEM的主單位PRIMARY UOM由L改為KG
- TPYBoard中编译MicroPython并利用DfuSe经行固件烧录