自动驾驶技术涉及的环境感知传感器主要包括视觉类摄像机(包括单目、双目立体视觉、全景视觉及红外相机)和雷达类测距传感器(激光雷达、毫米波雷达、超声波雷达等),如图1所示。这些传感器目前都可以找到开源的SDK快速开发。小可根据这几年的开发经验,特此整理了目前常用传感器的一些API,方便初学者节省开发时间。当然,对于可以根据需求自主定制传感器的土豪公司而言,本篇显得多余,请绕行。本篇主要适用于自动驾驶初级开发者,主要面向高校和科研院所的研究人员,以性能为主,较少考虑成本问题。笔者主要基于Linux系统进行开发,所介绍的API均以Ubuntu14.04及以上版本为准(4月份出Ubuntu18.04了,2年一个稳定版本,值得期待)。
图1 自动驾驶主流传感器
单目摄像机
首推AVT工业相机,国内代理商较多。包含的相机种类较为齐全,接口包括1394火线接口、网口接口等,价格从几千元到几万元不等。
应用:单目相机的应用开发主要包括特征类符号的检测与识别,如车道线检测、交通标志识别、交通灯识别、行人和车辆检测等,基于机器学习的视觉计算在自动驾驶普及之日一定会是必不可少的部分,尽管目前来说视觉检测可靠性并不是很高,在以激光雷达为主要感知手段的自动驾驶车辆中应用并未达到预期。
图2 路面及车辆识别
双目摄像机
应用于室外场景的双目视觉确实不多见,笔者之前用过的bumblebee双目也是应用于室内场景,之后接触了ZED相机也是室内比较好用(毕竟基线长度固定了,就那么短!)。建议用于室外做视觉里程计或者识别类算法的,自行搭建双目传感器,在保证同步触发的情况下,根据具体需求确定基线长度。双目视觉绕不开视差图和双目标定,目前比较通用的双目标定做法是采用张正友法,利用Camera Calibration Toolbox进行标定,当然,openCV中也集成了该方法,习惯C编程的可以看下,OpenCV经典教材《学习OpenCV》中文版464页至492页有详细内容,更有代码,不多说。
图3 双目立体视觉标定
应用:障碍物检测可以,限于室内,结构光,近距离;视觉里程计确实是目前比较好的应用领域,用于路口定位等,各种开源SLAM技术中也都有应用,如ORB SLAM2,《视觉SLAM十四讲》有详细介绍和应用,好书,推荐一下。
全景相机
分为单镜头全景相机和多镜头拼接全景相机。笔者基于全景视觉的开发应用不多(当多目镜头使用,未完全发挥其全景优势),2015年腾讯做街景地图的时候貌似见过他们车上装着一个。
应用:比较推荐用全景相机做视觉里程计,视野范围大,特征点关联度高,个人始终觉得用全景视觉配合组合导航做高精度地图重建是个不错的选择,实现自动驾驶汽车车道级别定位,其他的没有深入研究。
红外相机
红外相机应该属于视觉的另外一个门类,夜视效果比白昼效果好,可应用于行人、车辆检测等。以前觉得在激光雷达出现以后,红外相机在自动驾驶应用中处于一个比较尴尬的地位,价格不菲且没有激光雷达结果来的直接,使用之后发现,在障碍物(如人)识别上,激光离散点云还是比不上空间上连续的图像。另外,测试中惊奇的发现,红外相机具体可以捕捉玻璃上的人影!细思极恐!红外相机在一定程度上可以对发热体进行区分,如路面、行人等,但毕竟需要后处理,没有激光雷达利用绝对高度或者梯度进行障碍物检测来的直接。夜晚条件下可以替代彩色相机,进行前视障碍物检测与监控。
图4 红外视觉成像
毫米波雷达
适用于高速环境和编队行驶,其他场景貌似没有必要安装。单买贵,批发便宜。使用过delphi的一款,应该也是国内应用的比较多的,距离上最远到150米,分为单点跟踪和多目标检测两种工作模式,前者适用于编队行驶过程中前车检测,后者适用于高速环境下的远距离目标检测。由于毫米波雷达的成像原理为锥面成像(相当于从一点往外发散成一个锥面),依据锥面中障碍物的面积来推算障碍物,因而对于复杂场景,障碍物较为杂乱。而高速公路场景较为理想,道路环境好,车辆相对较少,适用于前方车辆的提前预警。(Tesla认为视觉+毫米足够支撑自动驾驶系统,个人相当认同,但是貌似算法上还需要推进一步)
开发:通过can收发数据,数据格式较为简单,一般协议文件中都有定义,对can口开发没有基础也不要恐慌,相当简单,买一个USBCAN转换器,有Ubuntu系统下can接收数据的依赖库,之后的数据解析按照协议来即可。
激光雷达。
应用:障碍物检测主流,waymo、百度、各大传统汽车厂商、各大创业公司、各大高校、研究院所……那么多自动驾驶汽车顶上装着的几乎都是激光雷达(Tesla除外);高精度地图重建与环境建模;SLAM等。
图 多雷达融合
目前实际开发中笔者用到的传感器就这么多,希望对于初学者有所帮助吧。对于设备选型有选择困难症的也可以私信我,多多交流。
来源:CSDN
领取专属 10元无门槛券
私享最新 技术干货