第一步 雷达型号

本节将对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探秘第三章之对比实验相关推荐

  1. 数据库系统概论 第三章 第五大题 实验报告

    实验目标: 根据课本p71提供的表格,实现p130第五大题的问题,理解和掌握关系数据库标准SQL语言,能够熟练使用SQL语言完成各种数据库操作和管理任务.包括使用SQL DDL语句创建.更改和删除数据 ...

  2. python程序设计上机实践第三章答案_20192419 实验三《Python程序设计》实验报告

    学号 2019-2020-2 <Python程序设计>实验3报告 课程:<Python程序设计> 班级:1924 姓名: 万腾阳 学号:20192419 实验教师:王志强 实验 ...

  3. 《MATLAB智能算法30个案例》:第30章 极限学习机的回归拟合及分类——对比实验研究

    <MATLAB智能算法30个案例>:第30章 极限学习机的回归拟合及分类--对比实验研究 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30 ...

  4. 1709 ltsb 内存占用_「正点原子STM32Mini板资料连载」第三十二章 内存管理实验

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十二章 内存管理实验 上一章,我 ...

  5. 计算机操作系统课后题答案第三章,计算机操作系统教程习题与实验指导(第3版)...

    操作系统习题解答篇 第一章 操作系统概述 1.1 学习指导 1.2 习题解答 第二章 进程.线程与作业 2.1 学习指导 2.2 习题解答 第三章 中断与处理器调度 3.1 学习指导 3.2 习题解答 ...

  6. stm32 读取sd卡图片显示_「正点原子STM32Mini板资料连载」第三十五章 汉字显示实验...

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十五章 汉字显示实验 汉字显示在 ...

  7. 西安交大梁力上机实验第三章12,从0到180度每隔5度输出该角度的正弦值余弦值

    西安交大梁力上机实验第三章12 从0到180度每隔5度输出该角度的正弦值余弦值 ` #include<bits/stdc++.h> using namespace std; int mai ...

  8. 【正点原子FPGA连载】第三十四章RGB-LCD触摸屏实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  9. 西安交大梁力上机实验第三章5,绝对温度为T的黑体,对波长为入的辐射功率为

    西安交通大学梁力上机实验第三章5 绝对温度为T的黑体,对波长为入的辐射功率为 题目 # include<iostream> #include<cmath> using name ...

  10. 【网络工程管理 第三章】 各类网络设备 交换机 VLAN配置实验

    网络工程管理 第三章 各类网络设备 交换机 VLAN配置实验 网络设备的功能层次 OSI层次 地址类型 设备 传输层及以上 应用程序进程地址(端口号) 网关(协议转换器) 网络层 网络地址(IP地址) ...

最新文章

  1. Kprobe在Linux kernel debug中的应用
  2. python入门作业编程题-Python语言编写有趣练习题!
  3. C++(STL):26 ---关联式容器set用法
  4. Apache OpenJPA 2.1.0 发布
  5. “杨振宁理论物理研究所”
  6. Z-blog拓源纯净主题
  7. 贪心算法——洛谷(P1106)删数问题
  8. 三星uboot1.1.6源码分析——start.s(1)
  9. 4 合并grid列_Grid教程
  10. 有关Visual Studio Code的说明
  11. php使用cookie获取浏览记录,php 使用COOKIE制作浏览记录_PHP教程
  12. 三种方法打印 main函数的返回地址的值(old EIP)(用途,你懂得!)
  13. APP上架市场隐私政策被拒(关于未经用户同意收集用户信息)
  14. Android 分享到LINE
  15. arduino触须传感器使用方法
  16. matlab求基音频率,语音中提取基音频率matlab程序.doc
  17. GateWay坑——context-path
  18. 计算机软件标杆企业,张军平老师—人工智能专家,复旦大学教授,博士生导师,中国计算机协会人工智能专委会委员,软件学报和自动化学报责任编辑...
  19. Springboot项目搭建有ftpClientPool的Ftp工具类
  20. 秉火429笔记之十五 DMA--直接存储区访问

热门文章

  1. 领域驱动设计(domain driven design)战略篇之一 战略 Bounded Context
  2. 公平的席位分配(Q值方法)
  3. 何为挂载(mount)?
  4. 乐Pro3 乐视X720/乐视X722通刷官方线刷包_救砖包_解账户锁
  5. 空间|时间|对象 圈人 + 目标人群透视 - 暨PostgreSQL 10与Greenplum的对比和选择
  6. remix下ballot.sol调试
  7. php zend_extension,extension 和zend_extension 两种扩展
  8. networks.demo_dev.ipam.config value Additional properties are not allowed (‘gateway‘ was unexpected)
  9. 應電鍍廠要求把5個ITEM的主單位PRIMARY UOM由L改為KG
  10. TPYBoard中编译MicroPython并利用DfuSe经行固件烧录