赞
踩
本文整理自禾多科技轩辕平台负责人李文俊主讲,主题为《如何快速搭建自动驾驶的硬件系统》。整个演讲内容非常详尽、为了方便读者阅读,作者对原文(该演讲发布于2年前)进行了二次整理并添加了最新的解释说明。整个文章布局如下:
第一部分:
(1)一图展示自动驾驶硬件系统的总体架构;
(2)庖丁解牛说内容
第二部分:
(1)传感器普遍问题
(2)传感器的标定
(3)传感器的时间同步
如下图所示,自动驾驶的硬件架构总体分为三大模块:1,车辆自身的控制模块;2,传感器模块;3,计算模块
三个模块的关系依次递进:若一辆车仅有自身控制模块,就好像一个人又瞎又聋还没脑子,行动没有任何依据,必须有监护人全程陪同(司机);此时给这个人把眼睛和耳朵修理好,这个时候这个人能看见前方是否有障碍物,但是由于这个人没带脑子,因此无法判断障碍物的距离以及不知道该如何做出反应,自己出行依然问题很大;最后给这个人配上一个脑子,那么这个人就知道,哦,前面有行人,我得避让。当然了这个时候是否能独立开车还得看脑子是不是好用。以上就是自动驾驶三大基本模块的功能。下面将为大家展开来详细介绍三大模块涵盖的内容。
首先,自动驾驶最基本的硬件组成,就是一部车,并且是具备线控功能的车。所谓的线控就是指车辆可以通过上层发出的某些数字或者模拟的信号来控制车辆的某些行为,这里的上层就是大家平常所使用的比如电脑这样的控制单元,可以理解为自动驾驶的大脑,而这里的线控车辆可以认为是自动驾驶车辆的四肢。
线控车辆的控制行为又可以细分为以下几个模块:
1.1、纵向控制,
纵向控制可以说是车辆的驱动和制动,目前纵向模块比较常见的接口有控制车辆的速度、加速度、发动机或者轮端的扭距;
解读:纵向控制顾名思义控制车辆的前后运动
1.2、横向控制,
目前横向控制的接口主要有两种,一种是通过控制方向盘上的扭距来控制方向盘,第二种是直接控制方向盘的角度和转动速度。
横向控制顾名思义控制车辆的前后运动
车辆的纵向和横向控制可以认为是线控车辆最基本的线控功能,一辆车如果具备了这两种控制能力,已经可以完成一些比如高速巡航之类的简单自动驾驶功能。
除此之外,车辆的线控还应该包括一些其他的功能。比如档位的控制、转向灯控制、双闪控制等,只是这些控制与纵向、横向控制不同,大多都是一些定性控制,比如转向灯的开关。
如果把前进、后退、左右方向变更看做是汽车行驶的基本条件,那么当车辆降速时候的提示灯、
车辆出问题时候的双闪灯、车辆转向时候的转向灯等则是车辆对外界发出的信号,是车辆与外界交互的基础。
线控车辆除了对大脑发出的一系列指令做出反应之外,作为自动驾驶的四肢,车辆还需要向大脑反馈自己一系列的状态,比如车辆是处于自动驾驶状态还是人工驾驶状态;另外,一旦驾驶员接管车辆,控制车辆也应该给予上传相应的反馈。除此之外,还有一些车辆自身状态的信息,比如车速、轮速等信息都是比较重要的。对于上层算法的输入,比如上层的控制单元、定位单元,都可以用到这些车辆信息。
还有一个我们认为比较关键的地方,就是一旦车辆不能正确地反馈上层的控制命令,那么车辆本身就需要反馈一种车辆的错误状态,这样开发人员才能根据车辆的错误状态来解决车辆报错的问题。
除了车辆的控制和反馈之外,线控车辆在通信接口上还会有一些不同的地方。目前绝大多数的线控车辆应该都是用CAN总线作为通信接口,但是不排除有些车辆会使用类似车载以太网这些结构作为控制接口。
第二个自动驾驶硬件系统必要的组成部分是相关的传感器。前面有提到过,其实车辆本身也可以算做自动驾驶的一个最基本的传感器,本身会提供车辆的一些基本信息,而其他的一些自动驾驶相关的传感器就可以认为是自动驾驶的眼睛和耳朵。下面列举了一些比较有代表性的传感器。
摄像头:
这种传感器有一个非常大的优点,就是成本非常低廉,目前市场上已经有很多量产级别和车规级别的摄像头可以供大家挑选。目前很多量产车都可以在不同的位置上安装摄像头这种传感器。另外一方面是在算法层面,由于摄像头相关算法(比如视觉定位)已经发展很长时间,有些算法已经比较成熟了,已经能够很快地在自动驾驶上实现,并且目前看来是有一些算法的效果还不错。
但是摄像头的缺点也是有的,在做硬件的人看来,摄像头本身的时间同步比较困难,对于摄像头本身来说,需要考虑它是GlobalShutter(全局快门)还是RollingShutter(卷帘快门)。如果我们要做到精准的时间同步,还需要考虑从摄像头底层去得到每张图的曝光时间,从而得到每张图精确的成像时间,因此这种同步往往是非常困难的,也会影响后续传感器融合的算法性能。
禾多科本身是聚焦在自动驾驶的量产项目上的,我们发现相机还有一个问题是视觉算法对于计算单元的需求比较高,目前很多的算法可能都需要高性能的GPU或者定制化的FPGA,这些芯片目前很难有量产化的前景,至少最近几年不会。
另外相机本身的输出量非常大,如果想要无损地保存相机里面的数据,在量产的方案里几乎不太可能。最后还有一个相机最显而易见的问题是,它不是一个全天候工作的传感器,在一些比较恶劣的天气或者是在天黑的时候,相机的一些算法就不能正常工作了。
激光雷达:
激光雷达可以是自动驾驶的宠儿,从最早的DARPA挑战赛开始,到现在很多的自动驾驶解决方案都依赖于激光雷达,所以从现在看来,无论国内还是国外都有很多激光雷达的供应商,当然激光雷达这么受青睐也是有原因的,它的优点是能够非常精确地拿到厘米级的数据,而且能够非常精确地测量出周围的3D信息。
从激光雷达立足于自动驾驶量产方面来看,成本还是降不下来,虽然固态雷达这样的低成本方案已经提出很长时间了,但是目前市面上依然没有特别成熟的固态雷达解决方案。另一个问题是激光雷达目前都是属于旋转式的机械结构,这种结构往往是很难通过车规的,因此想要做到前装量产是比较困难的。而在我们的了解中,现在也只有法雷奥Valeo的四线激光雷达通过了车规,装到了量产车上面。
以前我们在使用激光雷达的时候出现过这种问题,在下雨天时,地上的积水和天空中的雨水都会对激光雷达的测量造成非常大的噪声。所以激光雷达也不能认为是一个全天候的传感器,但是它对天气的要求并没有相机那么苛刻,因此我相信,不止是禾多,很多从事自动驾驶相关的工作人员也都很期待下一代激光雷达的产品,不管是固态的还是一些其他形式的激光雷达。
当前AGV上配备激光雷达非常常见,激光雷达多用于室内导航,且激光雷达有一个严重问题是射程有限,
在空旷的位置上常常由于找不到参照物而迷失了自己的方位
超声波雷达:
这是一款已经大量量产并且安装上车的传感器,现在大部分的车已经在用超声波雷达做一些倒车相关的功能,所以在自动驾驶上使用超声波雷达会使得传感器的成本非常低,因为一方面超声波雷达本身造价低,另一方面不需要再去额外安装这些传感器。但是超声波雷达在自动驾驶中扮演的角色并不是那么重要,因为其本身的使用场景比较有限,有效的探测距离也只不过在几米范围内,不过在一些特定场景,比如自动停车功能中,超声波雷达是不可或缺的一环。
不管你是老司机还是新司机,倒车时候一定都依靠过超声波雷达的辅助。
毫米波雷达:
也是一款量产级别的传感器,目前很多的量产车都安装了至少一个毫米波雷达来实现ACC这样的功能,甚至有一些高配的车安装了5-6个毫米波雷达,我们认为,如果在一辆车上安装了5-6个毫米波雷达,那么这种配置可以看作是已经到了L4级别下可使用的配置,因此在今后的方案中,毫米波雷达的使用成本也会比较低。
而且毫米波雷达本身的探测距离和速度也是非常重要的优点,对于障碍物的速度,毫米波雷达是能够直接检测出来的,而不像其它传感器是算出来的。并且很多毫米波雷达是全天候工作的传感器,从经验来看,毫米波雷达确实可以比较好的应付下雨、下雪这样的天气。
不过毫米波雷达的缺点也比较明显,毫米波雷达的检测结果往往缺乏3D信息,只是检测到一个障碍物的点,会导致毫米波雷达与其他传感器或者与车身的标定变得非常困难。好消息是,一些大的毫米波雷达供应商都在开发下一代产品,比如博世的第五代毫米波雷达,他们会开放出毫米波雷达更加底层、类似激光点云的信息,相信这种产品的问世,会使自动驾驶受益匪浅。
毫米波雷达的特点如下: 1、频带极宽,在目前所利用的35G、94G这两个大气窗口中可利用带宽分别为16G和23G,适用与各种宽带信号处理; 2、可以在小的天线孔径下得到窄波束,方向性好,有极高的空间分辨力,跟踪精度高; 3、有较高的多普勒带宽,多普勒效应明显,具有良好的多普勒分辨力,测速精度较高; 4、地面杂波和多径效应影响小,跟踪性能好; 5、毫米波散射特性对目标形状的细节敏感,因而,可提高多目标分辨和对目标识别的能力与成像质量; 6、由于毫米波雷达以窄波束发射,具有低被截获性能,抗电子干扰性能好; 7、毫米波雷达具有一定的反隐身功能。 8、毫米波具有穿透烟、灰尘和雾的能力,可全天候工作。 毫米波雷达的基本结构如下图
毫米波雷达的工作原理:
1)利用高频电路产生特定调制频率(FMCW)的电磁波,并通过天线发送电磁波和接收从目标反射回来的电磁波,
通过发送和接收电磁波的参数来计算目标的各个参数。
2)可以同时对多个目标进行测距、测速以及方位测量;测速是根据多普勒效应,而方位测量(包括水平角度和垂直
角度)是通过天线的阵列方式来实现的。
GNSS/IMU组合惯导:
我们通常把这两个传感器放在一起,因为这两个传感器经常一起配合使用来提供比较稳定精准的定位信息,而且他们之间的融合算法也已经相对比较成熟,可以大量使用在各种自动驾驶方案中。除了获得定位信息之外,GNSS也可以为整个自动驾驶系统提供稳定的时间源,可以用这个时间源做各个传感器和车身之间的同步信息等同步方案。
关于GNSS的使用原理,大家可以关注我的博客导航定位系统的原理解析(一个小白写给另一个小白)
3计算单元
也就是我们前面提到的自动驾驶的大脑,从自动驾驶的研发或者量产来说,计算单元大概可以分为以下的三种情况:
1、使用比较成熟的工控机,这种方法最快也最方便,很适合自动驾驶初期的算法开发与验证,不过使用工控机,日后的量产就难以实现;
2、使用第三方提供的研发平台,这里面最著名的就是NVIDIA提供的Drive PX2,但是从使用经验上来看,也存在一些问题,比如定制化不足,容易出现资源浪费或者资源不足的问题;
3、自研研发平台,这种做法在研发上往往需要耗费很多精力和时间。
以上就是自动驾驶硬件系统的三个组成部分:自动驾驶的四肢——线控车辆、自动驾驶的眼睛——传感器、自动驾驶的大脑——计算单元。
首先是线控功能的不稳定,有一些线控车辆虽然具备线控能力,但是往往会出现功能不稳定的情况,比如做三次测试,有两次测试是有问题的,只有一次测试才能成功,这往往会影响算法的调试效率;另外是控制逻辑的复杂性,具体表现在有些线控车辆要实现线控指令,必须按照一定的时间顺序和先后顺序向车辆发送一系列的指令,一旦中间有哪个环节出错,就会出现车辆报错的情况。
还有一些车辆本身的控制存在响应延时较长的问题,这种大延时往往是控制算法所担心的,会加大车辆的控制误差;另外有一些线控平台是通过外加装设备的方式来达到线控作用,通过外加装的方式,除了会有一定的延时以外,还会造成线控性能的不可靠,虽然线控平台的控制接口已经成功实现,但还是绕不开底层的一些限制,比如有些车辆的纵向控制只有当车速达到某个速度以上才能激活。
线控车辆的纵向和横向控制不准确也是一个问题,比如车辆的底层控制调试得不是很好,方向盘的控制有时候会有很大的超调出现,这种不精准的控制肯定会影响上层的算法调试。我们就曾经遇到过车辆的线控和车辆的状态强相关的情况,比如方向盘上可施加的力矩和当前的车速成反比,导致上层的控制算法会根据车辆的状态做出不同的调试,在不同的车速下会有两套不同的参数等类似问题。
最后一个问题是线控车辆的供电问题,因为整个自动驾驶硬件系统的供电可能都要由线控平台来提供,所以供电的稳定性也非常关键,尤其是目前有一些计算单元对供电的稳定性有着非常严格的要求,我们之前也遇到过因为车辆点火导致车辆电瓶抖动而损坏了GPU的情况。
激光雷达和车体的外参标定:
激光雷达是我们在车上装的一个比较鲁棒的传感器,因此很多的传感器(比如毫米波雷达、摄像头)可能都是通过将它们与激光雷达进行标定,再与车身之间得到一个外参,可以看出激光雷达与车体的外参标定是十分重要的。
上图展示了标定前和标定后两种情况,左边是把激光雷达放在车辆上,同时工程师手量了一个外参,包括XYZ以及旋转的角度,然后根据外参让车辆动起来,将车在不同的pose下采集到的激光点云叠加,根据叠加的效果发现量出来的外参有时是很不准确的,从图上可以看出,在右上角的位置应该是有一面墙的,由于外参的不准确,所以导致点云叠加起来的墙非常模糊。
因此我们通过一些算法将激光与车体外参进行了充分的标定,标定后的结果就是右边这幅图。从这幅度可以看到标定之后再将点云叠加,这时墙面已经变得很薄了,同时这个直角已经很明显了,如果我没有记错,应该是使用Velodyne16线激光雷达和车体的标定。
毫米波雷达的标定:
一直以来,毫米波雷达的标定都是一个比较困难的问题,前面讲过毫米波雷达的输出是缺乏3D信息的,因此它检测到的障碍物只是一个点,而这个点又不是物体上非常有规律的点,比如如果是一个正方形,那么它就会返回正方形的一个角点,通常是根据角度和毫米波发生的角度来返回一个能量最集中的点。
这种不确定性和缺乏3D信息会造成一种标定的困难,这里有两幅图,同样也是标定前和标定后。其中红色的线是激光点云叠加后的线,黄色的大点是我们标定时使用的一些柱子工具,我们想通过这些柱子来标出毫米波雷达和激光雷达的位置,这些黄色的点是我们用来标记出这些柱子在激光雷达点云中的位置。
如果大家放大图片,可以看到左侧图像中黄色点附近有很多零零星星排布的小黄点,这些黄色的点就是当我们的车绕着这些柱子开的时候,毫米波雷达在某些时刻记录下来的障碍物的位置。
这些位置跟激光点云中的点还是比较分散的,如果把这种结果直接用来做后面的障碍物标注,影响会非常大,很难将激光点云中黄色的点跟这些散列分布的小黄点进行融合到一起。
而我们是经过一个毫米波雷达标定,最后的标定结果是呈右图显示,虽然没有完全让黄色的激光雷达点云和毫米波雷达障碍物的点重合到一起,但是目前他们已经很集中了,因此再把这种的结果交还给后续的融合算法,就会得到一个比较好的效果。
摄像头的标定:
我们将摄像头的位置与激光雷达的位置进行标定,从而反推到车体坐标系下摄像头的位置。其中摄像头的标定分为内参的标定和外参的标定。
内参的标定主要是体现在去畸变上,大家可以看左边图,我们选用的是一个广角的相机,区别还是比较明显的,在现实中,我们的棋盘格应该是一个直角的棋盘格,但在相机上已经产生了弯曲的弧线。
通过内参的标定把畸变去了之后,虽然图片的尺寸发生了变化,但是这种现实生活中的直线在图像中也会还原成直的,这样能更加好地去进行外参的标定,可以把激光雷达的点云投射在棋盘格上,包括投射在我们的工作人员身上,这样就把摄像头和激光雷达的外参位置给标定出来了。
接下来分享下传感器的时间同步问题,有一些传感器其硬件本身可能就具备时间同步的功能,比如激光雷达、GPS/IMU等传感器,这类传感器的同步可能会比较容易实现,因此我们也不需要去考虑。比较麻烦的是CAN总线的时间同步,由于CAN总线没有时间源,因此我们也只能使用一个接近的方法去推断CAN总线的时间戳信息。
在这里我主要分享一下相机的时间同步,就像前面的相机实验,并不是一个比较困难的事情,我们需要知道每一帧图像的出发时间、相机的曝光时间,这样才能知道相机的真正成像时间,当然也可以把相机信息传到电脑上的时间作为图像的时间戳,但是这样就变成了从出发时间到曝光成像时间,再加上从相机传输到电脑的传输时间,而需要经过这么长的延误时间才能达成一个时间戳。
时间戳延误会造成什么问题呢?大家可以看左边的这幅图,在上一张图片中,我们看到了在静止的状态下,我们的点云跟相机上的图片已经可以很好地重合到一起了。但是在这幅图中,由于车辆是在高速行驶状态下,时间戳延误会导致即便是标定好的外参,但是点云投射到相机上也会出现不吻合的情况,也就是左边这张图。
如果我们把相机的同步时间做精准了之后,就可以通过刚才的外参把点云投射到相对应的时间戳图像中,这样就会保证点云和图像中的元素还是重合的,即右图所展示的这样。
这里的时间延误问题类似于GPS的时钟问题,大家可以参考我的博客
导航定位系统的原理解析(一个小白写给另一个小白)
以上就是本期给大家整理的关于自动驾驶的硬件系统搭建,以及作者的一些感受。再次感谢李文俊老师的演讲材料。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。