自动驾驶高尔夫球车项目

苏州利凯士得电动车有限公司  2021-10-25 09:44:37 作者:SystemMaster
       Neil Nie 是马萨诸塞大学阿默斯特分校Joshua J. Yang实验室的研究助理,在电子工程和微控制器方面有丰富的经验。他在App Store上发布了数十款应用,曾在一次TEDx讲座中,向大众科普过机器学习算法。
      从2017年9月开始,他和他的朋友迈克尔一直在开发一款自动驾驶高尔夫球车。现在,车辆可以在某些道路上完成自动跟随,同时避开障碍物,物体检测、交通灯检测、车道检测、路径规划以及本地化和地图等内容也在逐步实现。在Neil 的博客上,他们公布了开发的过程以及处理的模块/组件列表。智车科技整理了其博客的主要内容,以供研究者参考。

一、线控驱动系统
线控驱动系统(DBW)是自动驾驶汽车最基础的部分之一,Neil也碰了很多次壁。擅长硬件的他,首选了通过硬件去控制车辆转向。在方向盘的底部安装了 TETRIX齿轮,并制作了一个电机支架,将电机安装在转向柱上,使用高扭矩直流电机来控制车辆,然而硬件控制并不可靠。
历时三个月的探索,Neil决定换一种思路,他拆开了原来的转向系统,用买来的ServoCity执行器换掉了原有的线性执行器,然后将其连接到 Arduino(黑客加速器),来控制车辆。

二、具有深度学习的自主转向系统

       完成了线控改装后,Neil 将整个系统整合在高尔夫球车上。改装组件主要包括:NVIDIA Jetson(车辆的主控制器)、车辆前部的网络摄像头、电脑显示器、鼠标键盘、用于转向的直流电机、带有电机控制器模块的Arduino、用于为转向电机供电的NiMH电池、外部电源等,不同布线将各个元件安装在车上。

       车辆改装完毕后,自然要让无人车动起来。Neil选择了有名的NVIDIA 端到端控制,使用深度学习预测转向角度,将单个前置摄像头的原始像素直接映射到转向命令。在自主转向系统神经网络架构设计中,分别参考了Comma.AI、NVIDIA、小型VGG网络、以及训练的 ConvNet 网络。

三、使用分割和检测的基本避障系统

       自动驾驶汽车最重要的一个方面是了解周围的世界。Neil深信使用相机和计算机视觉技术就可以实现这一目标,而不是使用传统的雷达或激光雷达。
       多年来,在FCN(完全卷积网络)的初始提议之后,存在许多用于图像分割的不同网络架构,如SegNet和DeepLab。尽管它们具有出色的性能,但这些网络并不适合所有情况,处理能力非常有限。Neil最终选择了使用由普渡大学和波兰华沙大学的研究人员提出的实时图像分割网络ENet。
       ENet的好处是它可以在Jetson上以~10fps的速度运行。这是一个巨大的好处,特别是在自动驾驶车等应用中。使用CityScapes数据集进行培训,拿到在模拟软件中训练好的模型,迈克尔和Neil 开始测试车辆的自动转向和巡航控制系统。不幸的是,测试基本上没有成功。在系统和测试条件方面遇到很多问题。这促使他们开始思考系统的鲁棒性,特别是语义分割系统。
首先是阴影,卷积神经网络在处理阴影方面非常糟糕。他们的训练数据集没有很多阴影图像训练模型,导致图像分割网络感觉是根据颜色和形状来执行像素分类。
右边是原始图像,部分区域有阴影。左边是分割结果。带圆圈的区域表明网络将阴影既视为道路,也认为是障碍。
       再一个是路面积水,在测试期间遇到潮湿路面时,网络表现极差。可能是太阳的反射和道路的奇怪色彩。


图片



还有太阳眩光,神经网络可以通过眩光正确地分割道路。然而,空中的部分往往会被略过,车辆在这条路上行驶时,误分类不会影响性能。


阴影的问题是困扰大多数ConvNets的问题。最直接的解决方案是使数据集多样化,并包含更多带阴影和反射的图像。但是,创建该数据集非常困难。第二种解决方案是使用更好的网络进行分段,例如RCNN。更准确的权衡是速度和记忆。使用更好的网络将意味着需要升级当前的车辆计算机。



有了语义分割图像,Jetson简单地处理来自摄像机的视觉输入,并运行分段分析,然后利用串行通信从Jetson发送到Arduino,根据图像输入逐步控制车辆的不同状态,实现自动巡航。



目前,Neil 已完成了第一阶段的开发,第二阶段将更专注于使系统更安全,更可靠。逐步实施本地化系统,写一个路径规划器,在地理围栏环境中收集更多数据,改善计算机硬件并改进传感器系统。定位模块使用GPS(全球定位系统)来找到车辆的精确位置远远不够。需要开发使用激光雷达和雷达(传感器融合和粒子滤波器)的定位。



尽管Neil的方案还比较粗糙,但是他们对无人驾驶的热情值得肯定,期待他们逐步完善系统,打造更可靠的无人驾驶高尔夫球车。