手把手自己造无人驾驶车,是什么样的体验?

1,337 阅读8分钟

文:江浩

9月中旬有幸参加了优达学城、pix 和 Autoware 联合举办的线下无人驾驶实训,收获颇丰。这篇文章的目的,一方面是我对这次线下实训的复盘总结,另一方面,感兴趣的同学也可以借此了解实训的具体内容。

本次参加实训的同学都很厉害,有来自上汽、NEVS 等主机厂的工程师,有来自滴滴的软件工程师,有来自创业公司 CEO,还有来自上海交大、同济和东北大学等知名高校的学霸。而导师们分别来自优达学城、pix 和 Autoware 3个主办方。

实训基地

实训内容

实训的最终目的是实现红绿灯的启停。具体来说,车辆在进入无人驾驶模式后,沿着录制的轨迹自动行驶,当行驶到红绿灯前方时,对其进行识别。如果是绿灯则继续行驶,是红灯则需要在规定的范围内停车。当绿灯亮起时,车辆再次启动。

说起来容易做起来难,无人驾驶是一个系统工程,想用实现这个看似简单的功能,需要的知识着实不少。下面就来说说我们小队是如何做的。顺便说一句,我们的队名是“红鲤鱼与绿鲤鱼与驴”,考虑到我是南方人实在分不清“l”和“n”的发言,简称“鲤鱼队”。

首先,在名古屋大学教授 Alex 和优达学城导师 Aaron 的指导下,我们学习了 Autoware 的基础知识,完成了 GPU 版 Tensorflow、ROS 和 Autoware 的安装。Autoware 是一款连接代码和硬件的软件,类似于百度的 Apollo.

Autoware 界面

Autoware 界面

然后,把激光雷达和摄像头连接到 Autoware,通过摄像头采集试验场地的环境数据,用来训练红绿灯检测器。

通过手机观察激光雷达发出的激光

接下来是制作高清地图。开车绕行试验场地,通过车载激光雷达(Velodyne 提供)生成点云,再通过 Autoware 制作成高清地图。

激光雷达检车到的试验场地
高精地图

制作好高清地图后,就可以实现车辆的寻迹功能了,也就是通过 Autoware,让车辆在设定好的轨道上行驶(无需人工控制),类似于火车沿着轨道行驶,只不过车辆沿着的不是金属的轨道,而是 Autoware 中的“路点”。


Autoware 模拟寻迹



实车寻迹

要实现最终目的,还需要编写一个红绿灯检测器。检测器对摄像头拍摄到的图像进行识别,识别的结果输出给 Autoware,再由 Autoware 控制车辆行驶或者停止。

最初,我们打算使用深度学习算法训练红绿灯检测器,但是检测效果并不好,后来改用传统的计算机视觉,图像识别的准确率能达到 87%,优化参数后,准确率接近 95%.

这一切都准备完毕后,就可以对车辆进行检测和优化了。由于前期进度较慢,一直到晚上 8、9 点我们才有时间去试验场。检测效果不错,优化参数后,车辆能够准确识别红绿灯,并且在规定范围内实现启停。

夜间测试

虽然晚上检测的效果不错,但是并不代表白天也是如此。第二天,也就是比赛当天,我们队的表现并不如人意。原因其实很简单,白天拍摄到的图像背景太复杂,红色的地面,绿色的树木,甚至彩色的衣服(摄影师小妹妹快走开,你的衣服上怎么红绿黄三色都有!),都会对红绿灯的检测造成影响。而在夜晚,背景一片黑色,红绿灯的检测要容易得多。

三色毛衣是鲤鱼队的噩梦

让我难以理解的是,我编写的识别红绿灯的代码,使用白天拍摄的图像进行检测,正确率接近 95%,但是两天后在试验场上却识别不出来了。想必还有许多影响因素没有考虑到,在无人驾驶领域,我还需要多多研究,提高自己。

实训收获

虽然最终结果不是太理想,但是在在 5 天的实训中,我们收获太多。

1 实车测试

作为优达学城《无人驾驶工程师》的学员,我们都具备一定的相关知识,但是几乎没有在真车上做过测试,运行自己的代码。这次实训,让我们在短短5天的时间里,实现了从0到1的跨越。我们不但掌握了Autoware的基本操作,编写了相关代码,学习了线控知识,还亲手生成了点云和高精地图,亲眼看到自己编写的代码在车辆上运行,亲身体验了测试车辆的整个过程...

2 实践学过的知识

知识不是用来学的,而是用来实践的。只有实践过的知识才能显示其价值。在完成《高级车道线识别》项目的过程中,为了消除图像失真,需要对摄像头进行校准。校准很简单,只需要几行代码。不过,能在实践中应用这几行代码,仍然让我有点激动。

围棋棋盘校准摄像头

3 体会到模拟和试验的差距

我是《无人驾驶入门》的助教、《无人驾驶工程师》的学员,完成过红绿灯检测、车道线识别、交通标志识别等项目,但是它们和实训项目有很大的区别。

首先,以前的项目使用的都是课程中提供的数据集,而实训中使用的数据都是我们自己采集的。后者需要考虑更多事情比前者多得多。比如,在使用摄像头采集红绿灯数据时,需要对摄像头对焦,否则采集的图像模糊不清,根本无法使用。我们队由于缺乏经验,就犯过这样的错误。再比如,《交通路牌识别》这个项目使用深度学习的方法识别 43 种交通标志,数据集是课程中提供的。而在实训中,我们需要自己给采集的图像打上标签,以区分红绿灯。

其次,模拟中可行的方案,在实车上未必有用。我们的最终目的是在实车上实现红绿灯的启停,所以编写一个红绿灯检测器。我做过一个识别红绿灯的项目,准确率达到 95%,这样的准确率完全可以满足项目的要求,本来想直接用在这里,结果却发现不可行。为什么?因为项目中使用的数据集只包含红绿灯,没有其他干扰,识别起来相对容易。


课程提供的图像

但是摄像头采集到的图像却并不是这样的,图像中还包大量背景信息,绿色的树,蓝色的天空,红色的地面,刺眼的阳光,甚至身穿红绿黄三色毛衣的摄影师小妹妹(曾经的噩梦啊,不过很好奇代码会识别成什么呢?),都会对识别结果造成影响。如何排除这些干扰,也是必须要考虑的。

摄像头采集的图像

最后,在完成实训项目的过程中,我对学过的知识又有了更深的理解。比如,曾经做过一个小习题,让我利用给定的yaw rate数据,求出汽车行驶时的角度。在数学上这是一个很简单的问题,只需要对 yaw rate 求积分就可以了,然而我并不知道这些数据是如何得到的。在这次实训中,我发现 autoware 导出的路点数据就包括了这些数据。虽然都是获得数据,但是自己亲手测量数据,和使用别人给的数据,感觉完全不同,这两者的区别,就好像一个是看别人玩游戏,另一个则是自己亲自参与游戏。

路点数据

4 遇到了不少困难

在实训过程中,我们也遇到了不少困难。比如,机器部署出现错误、操作系统奔溃了、工控机电源烧了、激光雷达烧了...多亏了优达学城 Aaron、pix 曾工以及名古屋大学教授 Alex 的帮助,让我们在第一时间解决了这些问题。遇到困难并不一定是坏事,没有什么事情是一帆风顺了,如果真的有,那也不值得做。

最后,非常感谢优达学城、pix 和 Autoware 联合举办的这次线下实训,感谢三位导师 Aaron、曾工和 Alex 对我们的帮助。还得感谢pix的行政人员,每餐都有贵阳美食,每天都有丰富的夜宵,而且还不带重样的!回重庆后我称了下体重,足足重了 5 斤。

如果你想了解线下实训的更多细节,可以移步阅读导师 Aaron 的文章:

TBA