点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

本文由作者林家荣授权转载,二次转载请联系作者

https://zhuanlan.zhihu.com/p/157533731

----多图预警!请在wifi环境下食用!----

首先,先放我儿子镇下楼先

自从上次在知乎上分(吹)享(水)了我们的工作后,

https://www.zhihu.com/question/332926945/answer/836032023

我们的工作收到了很多的关注,并陆陆续续收到了来着各位朋友的咨询邮件,截止到目前,我们的开源库

https://github.com/hku-mars/loam_livox

已经收到了517个star(感谢各位老铁)。于是乎,我们趁(划)胜(水)追(摸)击(鱼),(不敢出去,年前怕被废青干,年后怕被疫情干)在实验室里面,积(通)极(宵)开展了新的研(组)究(团)工(开)作(黑)。

而今天,我要介绍的是我们最近被IROS 2020接收的工作” A decentralized framework for simultaneous calibration, localization and mapping with multiple LiDARs”即“一个多激光雷达同时定位建图以及外参的自标定的分布式框架”。我们的工作不仅能实现多(5)个雷达同时定位建图以及在线外参标定,而且分布式的去中心框架能使得我们整个系统的效率更高,鲁棒性更强。我们的定位结果和RTK的GPS相比,误差仅为0.2%。我们的论文现在已经挂在arxiv上面的了,

https://arxiv.org/abs/2007.01483

硬件平台已经开源在了,

https://github.com/hku-mars/lidar_car_platfrom

软件算法在后面会开源在

https://github.com/hku-mars/decentralized_loam

一.背景介绍

在介绍我们的工作之前,先需要回答以下2个问题,即:

  1. 为啥要用多激光雷达

  2. 为什么要做去中心化的分布式系统

对于第一个问题,我引用@瓦力(经作者同意)同学的PPT来解释,目前大部分的自动驾驶方案现在的自动驾驶方案都配备了多个激光雷达,如下图所示:

为什么这么他们要用这么多雷达呢?瓦力的ppt给出了以下三个观点:

A.多雷达组合的方案远比单雷达方案便宜:以velodyne家的雷达的为例,如下图所示,同样的价钱,我用买一个64线(32线),的雷达的价钱,去买20(10)个雷达他不香吗?说不定还能留一下一大笔钱雇几个博士生天天996,岂不美哉?

B.  部分区域点云覆盖率稀疏:使用一个雷达作为传感器,总会出现部分区域雷达测量稀疏的情况,例如置放在车顶的旋转机械式雷达,对于车周围的近距离范围,只会出现寥寥几条扫描线的情况,如下图的B区域

C.单雷达容易出现遮挡问题:这就很好理解了,由于车本身就不是一个质点,安装雷达的时候,多多少少有些雷达的测量被车本体遮挡到,这个时候就会存在视野盲区

除了PPT提到的以上三点之外,我们认为还有以下几点考虑使用多激光雷达有优势:

D.  鲁棒性的考虑:单个雷达的鲁棒性不够,万一这个雷达失效了怎么办?例如因为通讯问题,数据传输中断了,长时间雷达数据丢包了怎么办?又例如雷达故障问题,机械式旋转雷达旋转部件老化了,行驶过程中被不明物体了gank(如鸟粪,树叶)了怎么办?

E.感知的多元化需求:为了提高在某些范围的感知能力,如加几个雷达提高近距离的点云密度,使detection,segmentation的成功率更高,对于高速场景,补一个长距离(如Livox刚出的Tele 雷达就能看到距离1000米的物体)的雷达以提高避障能力 …

为什么要做成去中心的分布式系统?

  1. 基于性能的考虑:实际上由于各种原因,如驱动,通讯延时,雷达不是同一个厂商,甚至基于鲁棒性的考虑,雷达数据都不会全交给一个节点来同步以及发包,所以雷达的数据都不是一下去全部同步好然后发包的。那么问题来了,雷达的数据陆陆续续来包的时候,怎么去实时处理这些数据?加之雷达的数据又大又无序,处理储存起来也是个蛋疼的问题。在一个中央平台上无脑堆算力当然可以解决问题,但是边际效应太了,到达某个程度之后,把算力堆上去所需要花的代价太高(如同样价格的顶端处理器可以买好几个中低端的处理器了),如果你的系统能并行化,把不同时刻的雷达数据分配给分布式平台处理,最后再想办法融合在一起,那么这个问题将得到很大的缓解。

  2. 基于鲁棒性的考虑:如果你的系统只有一个处理平台的话,那万一这个平台出bug了,或者压力太大泉水挂机了怎么办?(项管表示: 开发人员也要做成去中心化并分布式的,万一996的那个博士生加班猝死了,或者删库跑路了就彻底完犊子了)。

好处这么多,那么,狗蛋,代价是什么呢?

多传感器安装的需求:首先你得把多个雷达安装上去对吧,如果车是定制的还好,不是定制的还需要考虑改装的成本;其次,雷达和雷达之间的连接应该足够刚性对吧,baseline比较短的话还好,baseline一长的话就要花很大的代价去保证连接的刚性;最后,雷达安装的位置如果机械振动太大了怎么办?是不是要加一些阻尼器消除掉一些机械振动?

对外参标定的需求: 标定的需求包括离线标定和在线标定的需求,离线标定相对来说简单一些,我总可以使用各种marker,或者周围建筑规则的面线来完成离线标定;在线标定主要是考虑到机械形变的带来的外参变化问题,如使用时间久了材料变形了呀,冬暖夏凉,从凉爽的地下室停车场到骄阳似火的马路上,材料的热胀冷缩带来的机械形变…

对数据融合算法的需求: 这个就是老生常谈的问题了,这么多传感器我怎么把数据结果融合在一起,多传感器的多个测量值我应该相信谁?

二.实验平台

既然我们的工作是多雷达的工作,那首先得有一个平台吧,但是我们的实验室刚成立不久,实验室的foundings非常有限,于是乎我们基于Robomaster的小车底盘,用3D打印机打印的3D支撑件,搭建了下面的多雷达数据采集平台。

我们的雷达系统由1个Livox-Mid100以及4个Livox-Mid40组成,整套弄下来不到4K美刀,还抵不上人家一个velodyne VLP16的价格,可想而知我们的系统(实验室)是有多低(穷)成本(PS. 没错,我们组的Livox雷达也是白嫖的)。

雷达的配置和FoV覆盖图如下所示:

三.实现方法

想要了解这里面细节的同学可以查阅我们的论文,以论文为主。这里我只简单介绍下我们的大致流程以及算法。

简单地说,我们的思路是:如论文中Fig.4和Fig.5 所示,分布式的LiDAR节点从网络里面订阅(由其他雷达更新的)最新的系统EKF状态接收到最新帧的雷达点云是,EKF根据运动学模型预测当前雷达6D姿态,然后使用这个预测值作为LiDAR odometry and mapping (LOAM)的起始点完成当前帧点云的配准(registration),点云配准完成之后,节点更新最新的系统EKF状态,并将注册完的点云以及最新的EKF状态广播到网络里面去。

EKF模型:

我们文章的Section V主要介绍了我们的模型(vehicle model),在Section IV.A 我们介绍了我们的一些notation,例如:T表示一个SE3的刚体转换,R,t 分别代表旋转和位移等等…

在Section IV.B 我们介绍了小车的恒速模型,根据小车在第k帧的角速度以及线速度我们就可以估计∆t时间后第k+1 帧小车的为旋转角度以及位置。

在Section IV.C 我们介绍了雷达的外参模型,我们使用估计的i-th雷达的外参以及Section IV.B估计的小车姿态既可以预测雷达在k+1帧的位置

在Section IV.E我们介绍了我们的观测模型,如之前提到的,我们使用k+1帧的EKF预测值作为此次LOAM的起始点,迭代地最小化最邻近“点-线”和“点-面”的距离,以完成k+1帧的点云配准。

  1. 去中心的EKF算法

我们文章的Section V主要介绍了我们的分布式EKF预测以及更新,值得注意的是,为了防止EKF发散,我们在Section V.B引进了对雷达外参的约束是,我们的算法如下图所示:

2.初始化:

为了给外参估计提供一个良好的初始值,我们可以使用手眼标定算法标定出雷达之间的外参,也可以使用CAD模型的设计的外参值作为EKF的迭代的初始值。除此之外,我们也可以尝试在一开始用ICP把不同雷达的外参尝试匹配到一起,算出一个更为准确的初始值。

初始值只要不是太离谱,我们的算法也能逐渐将外参收敛到一个最优值上,只不过一开始的外参不准确的话,一开始建出来的图可能会有重影

四. 实验以及结论

我们的实验室视频见:

https://zhuanlan.zhihu.com/p/157533731

外参在线标定的结果图:

估计的中心位置,角度角度,角速度和线速度

在2个测试场景下,我们的轨迹和D-GPS的轨迹的对比如下图所示(单雷达后面的轨迹飘了主要是因为场景退化了):

最大误差值的表格如下:

误差分布的箱线图:

最后就是我们的建图效果啦(不同雷达的点云已经用不同的颜色上色了):

五. 讨论和未来的工作

由于实验条件受限,一时半会儿找不到那么多电脑并安装到小车上面,所以我们的所有实验都跑在了一个PC上面,用多线程”反正”分布式的多节点,未来的工作可能会把这个系统实在在真正的多分布式系统上面,以探讨和解决可能出现的问题。

六.致谢

感谢帮我做实验的刘晰源以及帮我改了好几版论文的张富老师

感谢DJI在这个工作中提供的设备支持,包括但不限于:Robomaster的小车底盘, A3的RTK套件, Manifold机载计算机…

感谢Livox提供的免费雷达

推荐阅读:

  • 专辑|相机标定

  • 专辑|3D点云

  • 专辑|SLAM

  • 专辑|深度学习与自动驾驶

  • 专辑|结构光

  • 专辑|事件相机

  • 专辑|OpenCV学习

  • 专辑|学习资源汇总

  • 专辑|招聘与项目对接

  • 专辑|读书笔记

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近1000+星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

IROS2020开源软硬件!多激光雷达的协同定位建图及在线外参自标定相关推荐

  1. 采用16线激光雷达调用cartographer室内建图

    采用16线激光雷达调用cartographer室内建图 要用cartographer建图,我们需要的前期准备工作有: 1 安装cartographer功能包 这是一个谷歌编写的开源功能包,还是非常好用 ...

  2. 3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图

    3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图 激光雷达里程计 针对LOAM的改进 激光雷达建图 原文 激光雷达里程计 激光雷达里程计模块的功能就是:估计相邻帧之间的位姿变换. ...

  3. 超强激光SLAM LIO-SAM!高精度机器人定位建图!

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨robot L@知乎 来源丨https://zhuanlan.zhihu.com/p/15339 ...

  4. 无目标场景下高分辨率激光雷达和相机的像素级外参自标定

    文章:Pixel-level Extrinsic Self Calibration of High Resolution LiDAR and Camera in Targetless Environm ...

  5. 经典文献阅读之--Lifelong SLAM(变化环境中Lifelong定位建图)

    0. 简介 商场.超市等大多数现实场景的环境随时都在变化.不考虑这些变化的预建地图很容易变得过时.因此,有必要拥有一个最新的环境模型,以促进机器人的长期运行.为此<A General Frame ...

  6. Rplidar A2 激光雷达使用hector_slam进行建图

    手头上有一个Rplidar A2 激光雷达,通过其进行slam建图,如下. 环境: 1.Rplidar A2 激光雷达: 2.笔记本电脑: 3.Ubuntu 16.04; 4.ROS Kinetic. ...

  7. 论文笔记——基于多传感器融合的定位建图及导航研究

    Gmapping算法总结: 分解了定位和建图的过程.Gmapping算法针对RBPF算法因为粒子数较多占用大量内存和频繁执行重采样造成的例子退化的问题进行了改进,首先根据里程计观测结果对机器人位姿的影 ...

  8. 谷歌cartographer使用速腾聚创3d激光雷达数据进行三维建图

    原链接: https://community.bwbot.org/topic/523 谷歌cartographer_ros请参考这篇安装教程:http://community.bwbot.org/to ...

  9. 基于树莓派4b的ubuntu20.04mate配合思岚科技A1激光雷达读取数据,建图、保存和基于arduino的下位机控制

    首先确保你已经在树莓派或者自己的电脑上配置好ROS 安装准备 mkdir -p ~/turtlebot_ws/src cd ~/turtlebot_ws/src git clone https://g ...

最新文章

  1. np.percentile()函数超详解 异常值极端值百分位四分位数
  2. 办公效率提升200%,新款华为笔记本真香!送一台
  3. 【pytorch】nn.GRU的使用
  4. 工具安装===Sublime Text-安装
  5. 2018计算机一级题库百度云,2018年全国计算机一级考试题库及答案
  6. [转]Vi 教程(Unix行编辑器)
  7. 全网首个OpenPrompt尝鲜报告:Prompt研究者必备实验利器
  8. java重定向设置header_java – 重定向时将标题添加到Zuul
  9. SpringMVC快速入门-代码实现
  10. 让美团、京东、搜狐都说好的数据仓库,牛在哪?
  11. 跳槽了,但是面试官问的总答不到点上……
  12. 最短路中部分点只能从中任意选取K个问题
  13. python读写csv与数据库性能_使用python将csv文件写入SQL Server数据库
  14. 模型融合之stacking和blending
  15. python学习笔记:python字符串
  16. 使用RabbitMQ做的一些工作及经验教训
  17. 【GIMP教程探索系列】GIMP将照片修改为符合要求的证件照吗,修改尺寸与像素,压缩图像大小
  18. 基于matlab的适应度曲线的代码,matlab常用的几个适应度评价函数分析.docx
  19. 一文掌握大数据架构师需要具备的能力和格局
  20. Scikit入门指南

热门文章

  1. C++之类和对象1:望尽天涯路
  2. Shakira feat Lil Wayne - Give it up to me
  3. freescale imx6 编译 linux ltib,i.MX6 Ltib编译报错,请版主解决一下。(已解决)
  4. CM+CDH构建企业大数据平台系列(一)
  5. [WinForm]写一个小程序把指定目录的程序添加到开机自动启动(无法绕过360检查)
  6. promise--又双叒叕学
  7. html中row位置居中,rownumber
  8. 一直不懂scope.$index, scope.row是什么意思,现在知道了
  9. Cat_Lee 的博客开张了。 欢迎各位 有空常来坐坐。
  10. 寒假刷题实录-基础语法-02判断语句