【泡泡传感器评测】禾赛Pandar40P激光雷达评测(一)(二)(三)合辑

泡泡传感器评测 禾赛科技 昨天

我们希望架起一座定位传感器的桥梁,在导航定位技术进化的道路上,起到一点点促进作用

作者:冯喆

编辑:周平

欢迎个人转发朋友圈;其他机构或自媒体如需转载,后台留言申请授权


目录

  1. FSG-欧洲汽车顶级工程师的摇篮

  2. 针对FSG场景的激光雷达测试方案和评估标准

  3. 卡尔斯鲁厄理工(KIT)ka-raceing车队的“核武器”

  4. SLAM pipeline

  5. 感知算法工作原理

  6. 传感器校准方案

  7. 关于卡尔斯鲁厄理工(KIT)ka-raceing车队


01

FSG-欧洲汽车顶级工程师的摇篮

德国大学生方程式汽车大赛(Formula Student Germany)每年在位于莱茵河东岸的德国F1之乡霍根海姆举办,2017年率先开始引入无人车驾驶比赛。这一被称为“全世界规模最大,参赛队水平最高,车检最复杂,赞助商最多"的顶尖赛事,素有欧洲汽车顶级工程师摇篮的美誉。随着全世界对于自动驾驶行业关注度的提升,今年的FSG无人驾驶赛事受全球疫情影响,比赛推迟至2021年已经吸引了多达42支世界各地的顶级理工院校车队报名参加。经过赛事组委会层层选拔后,最终将有25支车队进入正赛环节的角逐。


德国大学生方程式赛车比赛


笔者所在的卡尔斯鲁厄理工(KIT)ka-raceing车队(https://www.ka-raceing.de/)因为是上届比赛亚军的原因,自动获得正赛资格。下一场我们将在无人车感知系统中使用来自国际顶级激光雷达公司Hesai的产品-Pandar40P机械式雷达,共同挑战这一全球顶级工程赛事的冠军头衔。


卡尔斯鲁厄理工(KIT)ka-raceing车队赛车


车头安装禾赛Pandar40P雷达的赛车

(图片来自 Luca Wahl + Amadeus Bramsiepe)


与大家能在加州街上看到的无人出行服务车辆所处的“温和”的工作环境不同,作为一项方程式赛事,FSG复杂的赛道上充斥着狭窄直道,急弯和不可预期的颠簸路况,把它称为没有舒适区的极限挑战一点都不为过。在一掷千金的F1赛事中,“在失控与可控的边缘恣意行走”从来是顶级赛车手的专利,而在无人车比赛中,这样的挑战需要由年轻的学生工程师们利用有限的成本和资源让车辆在毫无外界控制干预的前提下通过自我“感知,规划,决策,执行”来完成。对于我们来说,一个优秀的软硬件设计可以在2m窄的赛道,让无人赛车利用空气动力学套件形成的下压力,实现20m/s的连续过弯以及2.5s的直线百公里加速,只有稳定地在所有动态赛中做到这些,才有希望获得冠军。

而高效和稳定在大学生方程式比赛中往往是自相矛盾的。在这里,几乎每一支车队的平台都是选手DIY制造的。硬件方面,除了单体壳、空气动力学套件、车架底盘、电池管理、电子线控装置之外,很多车队因为追求轻量化和某些性能的优异表现,就连赛车的驱动电机和减速器这种较为复杂、敏感、容错率低的设备都是自己设计制造的。几个月造出的“黑科技”往往难以兼顾高效与稳定。因为赛前无法在霍根海姆比赛赛道进行大量的实车测试,电脑的模拟又很难考虑到天气、地表情况,以及其他队伍传感器信号干扰过强等客观不确定因素。事实上,没有人可以保证对所有的工况都进行相应的提前策略设计因此,很多入门车队的最终目标就是能够完成比赛。


组图:赛前车队高强度的设计测试工作


独家研发的轮毂电机


非自研的标准化设备比如各类传感器,如果正确使用,的确可以满足上述既稳定又高效的要求,但在严酷的动态赛前,参赛车队还必须参加由单项车检和成本报告等组成的静态赛,某个指标合格的车队会获得对应的贴纸,只有集齐所有贴纸的队伍才能进入动态赛环节。这里值得一提的是,为了避免各支车队在传感器等电子设备上形成“军备竞赛”,赛车的电子设备功耗和制造成本效益比,被主办方进行了相应限制。组委会裁判还将在车检环节中仔细核对参赛车辆各项功能模块是否符合比赛规则标准,比如保证所有的电子设备必须由对应的车辆高低压电池供电,不可以携带其他小型独立蓄电池模块(不可以给传感器开小灶)。而在这个过程中,一支车队只要有一项指标没有达到要求,不管之前的研发投入了多少心血,裁判都会铁面无私地取消比赛资格。和FSG裁判的技术对话往往硬核到让人感觉是在和教授面试。。。


车队车检贴纸


车队设计答辩


赛车斜台测试


比赛的复杂工况和裁判的严格要求也让我们这样的老牌队伍对于标准化传感器的选择和评估非常审慎,“持证才能上岗”是德国组委会对每一支车队的考验,也是他们对于车辆工程这门艺术的坚持。各家供应商生产的传感器是否合规,是否可以在规则限制下发挥应有的性能,这也是各支车队需要思考解决的问题。

赛车直线加速


基于上述考量,为了满足我们车队对环境感知的需求,一款经济可靠、精确稳定的激光雷达显得尤为重要关键。它可以让赛车实时、精准地获取赛道上障碍物信息,例如高度只有35cm左右的landmark(桩桶)的位置和反射率,从而为后续的SLAM和路径规划提供输入保障。而与它配套的软件开发套件(SDK),多模式的操作界面,传感器网络数据协议,也方便我们在感知算法的开发过程中构思出丰富多样的解决方案。通过广泛的调研和反复比较,我们选择了来自中国的禾赛Pandar40P激光雷达

在对Pandar40P长达数月的使用过程中,我们根据比赛的要求,客观测试了Hesai Pandar40P的各项性能指标。并根据雷达产生的数据特点以及未来的比赛场景,编写了点云特征提取代码,再利用Hesai雷达自身通信协议的特点(支持PTP)与摄像头和IMU+odometer构建实时传感器网络,并进行数据融合,从而设计了针对该项赛事的独特感知策略。笔者将在下周二和下下周二连载的文章中详解对Hesai雷达的性能测评以及在此基础上的方程式赛事感知方案研发思路,希望向同样参与无人车赛事的同学提供参考借鉴。


02

针对FSG场景的激光雷达测试方案和评估标准

      FSG赛场由蓝⻩两种颜色的桩桶标出边界,蓝⾊桩桶和⻩⾊桩桶分别保持在赛⻋行驶方向的左右两侧。

赛场上黄、蓝桩桶设定的赛道边界


所以获取场地landmark,提取特征的方法就是对这些桩桶进行检测,获取他们的位置和种类信息(蓝或者黄),从而在SLAM中表达出赛道边界与行驶方向。


通过特征提取识别黄、蓝桩桶


在熟悉了雷达的使用和配置后,我们围绕“雷达对于35cm的黄蓝两种颜色桩桶的感知能力”设计了一套针对FSG场景的测试方案和评估标准。其中,雷达的精度、测远、反射率、抗干扰能力是我们重点关注的指标。


1.精度

Hesai给我们提供了通过精密光学仪器测量的雷达绝对精度,数据显示,Pandar40P的测距精度在正负2厘米以内,作为独立传感器的静态精度,远远满足我们用于比赛的要求。但事实上无人车上安装有多种传感器,组合起来的整体精度会一定程度上弱于单个雷达的精度,考虑到比赛过程是动态的,因此我们选择做更有意义的动态环境下SLAM精度测试,考察SLAM算法精度是否能满足比赛要求。

我们在车的起点处做上标记,并以此作为欧几里得坐标系的原点构建我们测试时的WCS(World Coordinate System),接着用差分GPS(DGPS)的方法,记录场地中每一个桩桶的位置,并将数据记录并整合成地图作为Ground Truth。接着我们使用SLAM进行建图,因为比赛没有GPS基站,所以这里的位置输入信息就没有使用GPS数据了。


SLAM运动地图示意


体积较大的点是Ground Truth,体积较小点是测试过程中累积结果的中点值。我们在这里的定位还没有使用SLAM进行每一帧的更新修正,而是直接累积的原始探测结果,并将结果的中心位置与Ground Truth位置进行比较分析。计算误差后发现整体精度能够满足比赛要求。


SLAM的平均运动误差和最大运动误差


最大误差是SLAM构建出的桩桶位置和DGPS测绘的参考桩桶位置的当前最大距离差距。

平均误差是SLAM构建出的桩桶位置和DGPS测绘的参考桩桶位置从开始测量累积到当前时间的平均距离差距。

这是我们在目前有限的硬件条件下,构思出的对SLAM质量进行评判的一个方法。需要说明的是SLAM的精度除了与LiDAR本身的精度有关之外,还与LiDAR与IMU的标定、LiDAR与Tachometer(轮速传感器)的标定、IMU的精度、Tachometer的精度、以及相应的点云畸变运动补偿有关。同样,Ground Truth的质量也受到GPS品质的约束。



2.测远

雷达安装在不同高度下对桩桶的测远结果


测远结果如上图,显示的是下雨天(蓝色框内)和晴天(红色框内)雷达安装在车不同高度下至少探测到桩桶两个点的距离,一般我们认为利用传统方法,至少探测到两个点才能被检测为桩桶,所以我们最终大致确定Pandar40P在我们的场景下最远探测桩桶可以到47m左右,并在充分考虑了安装点对于赛车空气动力学的影响后,选在了395mm高的安装点。


3.反射率

比赛中黄色和蓝色桩桶在哪一侧会决定赛车行驶方向是顺时针还是逆时针,所以我们采用摄像头取获取桩桶的颜色信息,但是如果激光雷达能够分辨差异比较大的反射率信息,我们也可以据此做一个简单的分类器当作感知系统的冗余补充。根据Pandar40P捕获的单帧intensity信息,比赛桩桶在中部颜色的显著差异性(黑白)被成功抓取,我们也在随后的算法模块颜色识别环节中,成功对10m内的两种桩桶进行了分类。


           左图:黄、蓝两种桩桶在禾赛雷达点云中明显的反射率差异
           右图:桩桶反射回来的intensity信息沿z轴(高度轴)呈现出来的直方图分布


这种良好的intensity的识别能力也让我们后续在用棋盘格标定雷达和摄像头时获得了帮助。


4.抗干扰能力

这是禾赛的Pandar40P的一大独特优势,他们声称用了一个神秘的光束加密黑科技用来区分自身雷达发出的光和其他光。而对于赛车现场,几十家比赛队伍同时打开雷达的情况下,雷达能够抗干扰是个真香功能了。我们对于某普通雷达进行了实测,普通雷达有杂点增加,Pandar40P几乎没有。无奈测试匆忙,没有留下数据素材,残念。感兴趣的小伙伴可以去禾赛官网看下,类似下图这个效果。


抗干扰示意图

左:禾赛抗干扰雷达点云    右:无抗干扰雷达点云


03

卡尔斯鲁厄车队的“核武器”-禾赛Pandar40P


安装禾赛Pandar40P雷达的赛车和雷达感知的点云


这是一款40线的机械激光雷达,技术参数见下图。根据使用手册,首先连接电源和电脑的数据传输接口Ethernet线)。


禾赛Pandar40P激光雷达技术参数


Pandar40P连接示意图


根据手册设置PC端的局域网IP,并在LiDAR的html网页控制页面设置LiDAR的IP和其他端口参数。在这里可以设置雷达所有线束的水平发光FOV(0-360度),还可以进一步单独设置每一根线束的水平发光FOV。除此之外,触发模式(时间触发 or 角度触发)、时间来源(GPS or PTP)、单双回波、待机模式等均可在网页控制页面相应设置。

Pandar40P设置水平FOV的网页控制界面


Pandar40P保留了GPS输入的串联数据口,用来支持GPS直接授时模式。

当然,我们在选择时间同步模式时直接选择了PTP协议,原因有二:

1.精确UTC时间并不是我们赛车工况下的必需品,减小传感器与计算机相对时间戳误差才是我们追求的目标。

2.一款足以给我们的localization性能提供加成的GPS过于昂贵。


随后的传感器网络时间对齐模块,会介绍我们构思的传感器时序对齐方案。 

在Hesai官网下载页面,我们可以找到雷达对应的SDK页面,Pandar40P分别提供了普通版和基于Baidu Apollo和ROS框架的开发套件。通过官方Github,我们可以git clone获取他们并创建自己的工作空间,编译通过后,可以用SDK解析雷达,通过以太网UDP/IP发送出来的数据包,获取可读的点云信息。ka-raceing的软件架构基于ROS melodie开发,虽说理论上也可以基于普通的SDK去写适合自己开发目的的ROS register。我们在这里还是偷了个懒,直接使用了禾赛Pandar40P提供的ROS SDK,在ROSlaunch指定node后,接着使用ROS自带的可视化Gui rviz,就可以看到Pandar40P感知的结果。


禾赛Github主页


值得注意的是,Pandar40P提供了支持windows和Ubuntu两个版本的pcap(一种数据流格式)可视化软件PandarView(这个软件在这里把UDP数据转换成了pcap的格式),个人推荐可以用这个软件看LiDAR是否在成功地设置了IP地址,并能够稳定通过Ethernet接口向pc端发送数据包。当然,如果开发环境是Ubuntu,也可以使用Wireshark抓包工具轻量化地实现这个功能。


雷达配套的可视化软件


这里有一个使用感悟,就是雷达的Manual不能像汽车说明书那样,需要用才看,而是应该像考雅思时候的红宝书那样,通览一遍后时不时还要拿出来看看细节。虽然只有60页,但熟悉了雷达的Manual后对于后续的感知方案开发真的大有裨益。笔者机械工程毕业,仔细读了里面关于雷达数据包的细节知识,再查了相关资料后,真的是耳目一新,学到了很多东西。


无论是使用SDK还是PandarView,如果得到的可视化点云与眼前场景明显不符,不要紧张,雷达包装内都有一支U盘,内含点云标定修正csv文件。里面记录了工厂经过标准方法检测后雷达实际的线束分布,导入这个参数文件后,重新加载时候就可以得到准确的点云输出数据。值得欣慰的是,Hesai在后续的雷达批次中已经把这个修正值嵌入雷达的内部软件层面,使用者可以更加方便地使用雷达数据。


我们为了更好地保护雷达,在初次使用测试时,根据手册提示给雷达设计了一个有一定抗震功能的支撑架。在安装位置的选择上,结合雷达的线束分布以及赛场上桩桶是算法主要识别对象,我们用Matlab画了一个粗糙的模拟图。我们为了更好地保护雷达,在初次使用测试时,根据手册提示给雷达设计了一个有一定抗震功能的支撑架。在安装位置的选择上,结合雷达的线束分布以及赛场上桩桶是算法主要识别对象,我们用Matlab画了一个粗糙的模拟图。如前面测远部分所述,结合不同高度的动态测试后,我们决定把雷达安装在赛车中鼻部,距离地面395mm位置。此外,为了方便在后续更多测试中找到最优异的雷达仰角,我们在雷达的支架上设置了一个pitch角度可调的功能。


雷达支架

Matlab线束分布与安装位置模拟图

赛方对于传感器安装位置的要求


中国智造给予的底气


能够在德国这样一个制造业强国的大学生方程式车队,天天乐呵呵地使用国产的激光雷达,凭借地是什么?

    -  产品性能稳定强大

    -  团队管理扁平高效

    -  生产供应健康充足


 对,我说的是Hesai,和我本人其实关系不太大…


故事的开端,要从2019年9月黑森林山谷里的一通电话说起,

当时车队新人在斯图加特北边的山区团建拉练。


车队在美丽的斯图加特黑森林团建


刚刚加入自动驾驶部门的负责感知算法的我一边啃着肘子一边和自动驾驶部门的组长Simon讨论明年比赛的激光雷达方案。


雷达选型参数对比


他和我抱怨傲娇的老牌大厂V家赞助申请流程复杂,当时迟迟不给回复,以前的赞助商Ib家因为资金问题不想提供除了4线以上的雷达设备。我忽然想起自己有朋友就在国内一家激光雷达公司工作,便想帮组长打电话咨询了解一下情况。结果朋友直接给我联系了营销部的领导James。James在知道我是中国人和Ka-Raceing车队去年的成绩后(FSG NO.2)后,当即决定赞助车队一台四十线雷达


禾赛雷达之印象


没过多久,我们就收到了这颗颜值和性能都非常“能打”的激光雷达-Hesai Pandar40P。其实,当时在车队内部,对于是否使用Hesai雷达,德国人的反应比较消极,在后来的具体方案讨论中,他们就差点把“中国制造质量都不好”这种偏见当成论据直接说出口了。令人欣喜的是,相比于其他欧美公司,Hesai的产品在实际使用过程中展现了明显的性能优势,并且Hesai营销和供应链部门的执行效率实在惊人,不到30天就让我们拿到了一台崭新的四十线雷达与之相比,日薄西山的V厂在今年二月才慢慢悠悠,一点不像科技公司地以邮件形式询问我,想不想要一台16线雷达(嫌弃脸。。。)我只能表示遗憾了。新时代的中国速度和中国品质让我不得不告知德国童鞋一个事实:好好珍惜这次赞助,错过了这次,下一次成绩不好就得买了……

这个小故事切实让我对Hesai的产品及服务的水准有发言权。


04

SLAM pipeline


SLAM 流程图示意


我们目前使用的SLAM pipeline如上图所示,这里涉及到多个传感器信息的融合操作(multi-sensors fusion)。雷达获取的点云数据先进行预处理(pre-processing),经过剪裁(clipper),动态畸变矫正(distortion correction),地面滤波(ground removal)后,我们根据赛事特点对点云特征进行聚类(clustering)和进一步的滤波,直接获取只属于桩桶的点云的position information,并将这个proposal传给分类器(classifier)。

分类器中,我们可以通过处理聚类点云并返回原始点云提取更多intensity信息从而做出桩桶颜色判断,也可以使用摄像头获取的图像信息估计桩桶的颜色信息,这是一个冗余(redundancy)设计, 最后通过一个简单的管理器评估一个最优结果,向下一个节点递交数据。

与此同时,我们使用一个卡尔曼滤波(Kalman filter)融合了轮速计,IMU光学地面测速计的信息来提供一个稳定(robust)的速度估计,获取的动态信息用来做刚才提到的“点云动态畸变矫正”,也输入进姿态估计模块(pose estimation)。

获取landmarks后就可以用它们累积建图(accumulation),同时把它们与位姿估计(pose estimation)的结果进行数据联结(date association),执行特征追踪(feature tracking):通过关联“特征点”,计算帧与帧之间的位移,做点云配准(registration),并把不断获取的landmark信息和先验地图(prior map)进行匹配,完成回环检测(loop closure),从而通过这个节点不断修正位姿以及更新地图。

算法实现上,我们在本篇中重点介绍下识别桩桶,提取其特征的Pipeline。

经过了前期多种测试评估,我们确定了雷达在赛车上的安装点,也收集了雷达在各种速度下的原始点云数据包,用于接下来做雷达数据特征提取算法的测试。


05

感知算法工作原理

1.运动畸变补偿 Motion-caused Distortion Correction


我们在测试中发现,做过处理的点云在高速驾驶过程中,会出现一定程度的偏移。以直线跑为例,如果前方出现的桩桶分布是很规律的矩形结构,那速度越快,感知后累积出来的点云就更像是一个倾斜的平行四边形。后来我们发现,因为雷达的最快频率只有20hz,而每一帧的点云数据都是以雷达自身作为坐标系原点的,如果在0.05s的时间内,坐标原点发生了快速移动,它对于一帧内目标点的感知就会发生畸变。于是我们根据这篇论文(https://www.ifr.ing.tu-bs.de/static/files/forschung/papers/download_pdf.php?id=919)的思想对点云进行了error补偿。

在经典激光SLAM开源方案 loam中也有处理点云运动畸变的模块,感兴趣的可以在开发过程中同时参考。

这里做补偿比较关键的一点是,对瞬时矢量和速度要有比较好的预估。虽然我们有Kisler的optical  Ground Speed Sensor作为比较精确的动态信息来源,但是我们还是用卡尔曼滤波融合IMU和轮速传感器的数据做了一个速度估计的容错设计,以防止比赛中某个传感器出现故障。


2.地面分割Ground Removal


我们根据日本名古屋大学的一篇论文(https://www.researchgate.net/publication/329612826_A_Slope-robust_Cascaded_Ground_Segmentation_in_3D_Point_Cloud_for_Autonomous_Vehicles)进行复现,这篇论文实现的算法原理很简单,多线机械旋转雷达因为发射器列式分布的原因,一般而言都会在完全平坦的地面上会产生经典的多环图案,环与环的间距与“线束角度分布和雷达安装高度”直接相关。而这时如果在地面上出现坡度差异或者有障碍物,这种间距会产生变化,这时可以根据对地形坡度的判断,引入一个角度阈值,去补偿这个坡度对间距造成的影响

论文中介绍了两层滤波,为了防止上述第一层效果不好,作者又设计了一种基于网格划分的滤波,他将场地以LiDAR为中心画成蜘蛛网格形状,并在每一个网格中做Ransac算法。我们也实现了这种滤波,但在使用过程中,发现第一层滤波效果已经很好,而第二层滤波容易出现网格欠分割滤波效果差或者过分割资源消耗过多的问题。最后在应用上,我们只使用了第一种。具体的原理和实现方法请参见上面论文链接

Tips: 深度学习是点云处理算法的一个发展趋势,我们也在开发一种语义分割(semantic segmentation)的方法,尝试解决这个问题。目前在不断测试赛车,收集用于训练的数据,大家敬请期待,这里可以推荐一种不错的神经网络架构。(https://github.com/xuanyuzhou98/SqueezeSegV2)

下图是滤波前后效果对比图的gif:


滤波前后效果对比(第一人称视角)


滤波前后效果对比(俯视视角)


3.网格聚类Occupancy Grid Clustering


聚类算法可以在这里让几何距离比较近的点云被识别成同类物体,因为要应用到赛车的工作环境,所以时间和空间复杂度自然是越小越好。我们观察到比赛场地除了各种尺寸相仿的桩桶和周围墙体外没有其他物体,所以需要聚类的点云,高度差基本都在0.35m以内,于是我们实现了一种基于2D网格的Occupancy Grid Clustering,在网格中对高度差在一定阈值范围内的点云进行聚类。实时性和聚类效果都不错。

Tip:我们实现的Euclidean Clustering(来源于PCL)和DBSCAN  Clustering在这里的表现并不是很好,推荐大家都尝试一下。


网格聚类示意



黑色为聚类物体中心点



4.邻域检测滤波Neighborhood Detection Filter


为了进一步滤去周围环境物体形成的聚类,只留下桩桶的聚类,我们基于桩桶自身几何特点和分布规律开发了一种滤波。

1. 我们首先去除了体积远超过桩桶尺寸的聚类(比如周围围墙),剩下的聚类中心点成为集合A;

2. 接着考虑到动态赛中每四个桩桶都以一种面积差异不大的四边形结构分布(根据具体的动态赛项目有差异),根据这个特点,我们先设置两个阈值a和b,去尽可能贴近这种四边形的面积,见下图。然后对每个聚类的中心点以a做半径做领域检测,筛选出拥有四个以上领域点的中心点集C;


面积检测方法示意


3. 接着我们再进行高度检测,筛选出符合离地高度明显大于桩桶的点集B;

4.再进行如图所示的面积检测:找到邻域中(以a为半径)离中心点最远的点及离它们之间连线最远的点,获得两个距离m,n,再进一步筛选出符合((mxn > axb)&&(n>b))的中心点集S;

5. 最后我们把做完地面滤波的原始点和聚类的中心点一起输入系统,检测中心点在一米范围内原始点的点集中是否有两个以上的相邻点,符合这个要求的成为中心点集M,从而得到我们检测出的属于桩桶的中心点集(A∩ C∩ B∩ S∩ M)。

我们设置了两个长度和宽度的阈值a和b

滤波处理后的效果如图所示:


红色物体为最终筛选出的桩桶点云

(赛车最高速度为18m/s左右)


5.激光雷达桩桶分类LiDAR Cone Classification


将上述算法识别出来桩桶的点云与原始点云比对,还原出更多因为滤波算法损失的点云,并将沿Z轴点云的intensity作为输入训练SVM(Support Vector Machine)。最后得到的SVM模型可以分类识别10m内的两种类别桩桶,效果如下图。


黄、蓝两种桩桶在禾赛雷达点云中明显的反射率差异



桩桶反射回来的intensity信息沿z轴(高度轴)呈现出来的直方图分布


黄、蓝桩桶识别结果(Rviz中没有特意显示颜色,但算法已经做出区分)


因为只有两种桩桶需要识别,所以处理点云可视化时,没有刻意调出准确的颜色,重要的是把两种颜色区分即可。


6.激光雷达和摄像头融合 Fusion with Camera and IMU


为了给系统增加更多冗余,我们安装了三个总视野覆盖率达到200度的摄像头,两个传感器的融合方案如下所示:

点云空间:雷达信息经过处理后,只留下桩桶点云的中心点信息。

图像空间:将cone proposal generator生成的的中心点投影到图像空间后,给出较大的bounding box(尺寸会随着深度增加按比例缩小)。Calibration做好的话,可以大概率圈住图像空间桩桶的所有像素,然后通过计算bounding box中像素颜色信息的center of gravity,对bounding box中心位置进行矫正(利用场地中除了桩桶没有鲜艳颜色物体的特点)。然后将bouding box 中的图像裁剪出来,输入一个轻量化的、能够识别桩桶的神经网络模型,从而做到对桩桶的分类。这个简洁的方法可以延展感知模块对桩桶种类信息分辨的探测距离。而且理论上图像可以检测更多种类的桩桶(如图所示),尽管在我们比赛中能够检测两种颜色的桩桶就已经足够了。


组图:图像处理和识别桩桶


06

传感器校准方案


我们的多传感器融合架构需要雷达,摄像头,IMU做很好的时序和空间对齐,我们根据Pandar40P的特点采取了对应的方法:


1. 摄像机和IMU空间校准 

Pandar40P雷达对棋盘格的识别能力出奇的好(如下图所示),几乎每一行的黑白色块都可以表达出来。

Hesai Pandar40P点云可清楚地识别棋盘格


我们尝试了几种开源的使用Checkerboard的方法进行标定,都取得了不错的标定效果。这里可以推荐下Autoware,Butler,Baidu Apollo的开源方法,网上都可以找到资料。

今年二月在和欧洲老牌强队苏黎世理工AMZ(去年FSG第一)参加在汉堡举行的ARWO交流会的时候,他们的老队员和我们推荐了这篇paper(https://arxiv.org/abs/1705.09785)。其中介绍的标定方法因为使用了一种带类似二维码图案的立方体,所以对雷达和相机的识别都很友好,他们已经复现了这种方法,并取得了不错的标定效果。有意思的是,他们在接下来的比赛中也将使用Hesai的雷达。

相机和IMU的标定我们使用了Kalibr(https://github.com/ethz-asl/kalibr)。

LiDARIMU的标定可以推荐大家使用Apollo开源方案。标定IMU是因为点云运动畸变补偿融合了IMU的信息,我们需要知道LiDAR坐标到IMU坐标的TF信息。


2. 基于PTP网络进行雷达和相机的时间校准


要想达到激光雷达和相机有很好的融合质量,良好的时序对齐在这里很重要,而并不是精确的绝对时间。我们这里将GPS作为一个架构补充使用,如果我们可以获得足以提升localization精度的GPS,可以考虑将它作为时钟来源。

在这个架构中Car PC时钟作为PTP master使用,通过工业级的Internet Switch,Arduino Yun, Pandar40P和Car PC构成PTP网络。

其中,Arduino Yun通过自己的Linux系统向自带的MCU发送PPS指令从而让MCU对三个摄像头发射trigger信号。Arduino Yun在发送PPS信号的同时也向网络中发布一个带有时间戳信息的topic。

我们默认PTP网络中的节点时间误差精度达到微秒级,所以最后通过获取Arduino Yun端Linux到MCU 的delay,我们可以较为准确地把握网络中各个节点的时间戳.

这个架构允许我们不需要过多设置,直接通过网线可以接入任何支持PTP协议的设备

当然PTP想要达到比较好的效果还是需要每个节点硬件拥有支持“硬件PTP”的NIC(Network Interface Controller)。


摄像头和雷达传感器网络结构示意


07

关于车队

卡尔斯鲁厄理工(KIT)ka-raceing车队,欢迎大佬前来赞助!


本文作者:冯喆

文章贡献者为卡尔斯鲁理工Formular Student车队


车队其他成员:Simon Schärfer, Nico Denner, Nick le Large, Luca Wahl, Josua Janus, Sherif Nekkah, David Borberly, Benjamin Schmidt, Lukas Harsh, Haocen Yu, Carlos Rosero, Stefan Hirsch, Yuchen Liu, Mario Boxheimer, Sebastian Herz, Felix Bening, Luca Bauer, Felix Rodach, Emir Smajic, Beatrice Morhard, Frederic Witkind Hirth, Hendrik Knispel, Jan Beyer, Johannes Mohr, Leif Kahler, Max Ehrfeld, Niklas Friedrich, Paul Roschka, Robert Timmermann, Simon Noll, Yannick Reuter, Yifan Cai, Meng Zhang, Anna Glöckler