手把手自己造无人驾驶车,是什么样的体验?
文:江浩
9月中旬有幸参加了优达学城、pix 和 Autoware 联合举办的线下无人驾驶实训,收获颇丰。这篇文章的目的,一方面是我对这次线下实训的复盘总结,另一方面,感兴趣的同学也可以借此了解实训的具体内容。
本次参加实训的同学都很厉害,有来自上汽、NEVS 等主机厂的工程师,有来自滴滴的软件工程师,有来自创业公司 CEO,还有来自上海交大、同济和东北大学等知名高校的学霸。而导师们分别来自优达学城、pix 和 Autoware 3个主办方。
实训内容
实训的最终目的是实现红绿灯的启停。具体来说,车辆在进入无人驾驶模式后,沿着录制的轨迹自动行驶,当行驶到红绿灯前方时,对其进行识别。如果是绿灯则继续行驶,是红灯则需要在规定的范围内停车。当绿灯亮起时,车辆再次启动。
说起来容易做起来难,无人驾驶是一个系统工程,想用实现这个看似简单的功能,需要的知识着实不少。下面就来说说我们小队是如何做的。顺便说一句,我们的队名是“红鲤鱼与绿鲤鱼与驴”,考虑到我是南方人实在分不清“l”和“n”的发言,简称“鲤鱼队”。
首先,在名古屋大学教授 Alex 和优达学城导师 Aaron 的指导下,我们学习了 Autoware 的基础知识,完成了 GPU 版 Tensorflow、ROS 和 Autoware 的安装。Autoware 是一款连接代码和硬件的软件,类似于百度的 Apollo.
Autoware 界面
然后,把激光雷达和摄像头连接到 Autoware,通过摄像头采集试验场地的环境数据,用来训练红绿灯检测器。
接下来是制作高清地图。开车绕行试验场地,通过车载激光雷达(Velodyne 提供)生成点云,再通过 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
手把手自己造无人驾驶车,是什么样的体验?相关推荐
- 百度要造什么车?汽车依然逃不出 BAT 的手掌心 | 撩车
作者 | 王贺 编辑丨大湿兄 来源 | 创业邦(ID:ichuangyebang) 很多人或许会认为,百度和吉利的造车合作,从2019年时就已经注定的. 那一年,在百度AI开发者大会上,李彦宏和李书福 ...
- 宝马与intel合作 2021年推全自动无人驾驶车
在16日当天进行的英特尔2016年开发者大会(IDF)现场,一辆宝马i3轿车缓缓驶上舞台中央,透过车内的摄像头,大屏幕上展示出车内的驾驶者完全没有触碰方向盘,宝马无人驾驶事业部高级副总裁ElmarFr ...
- 基于linux的智能小车_ROS全开源阿克曼转向智能网联无人驾驶车
ROS 世界上最主流的机器人开发框架 ROS(Robot Operating System,机器人操作系统)是目前世界上最主流的机器人开源操作系统.它可以提供操作系统应有的服务,包括硬件抽象,底层设备 ...
- 建造属于你的无人驾驶车——(七)为XACRO模型添加GAZEBO属性与运动控制插件
建造属于你的无人驾驶车! 本专栏持续更新中- 程序源码:https://github.com/kkmd66/ZZX_RUN Solidworks模型文件:https://github.com/kkmd ...
- 从小康到极狐,华为的“造好车”答卷,你准备打几分?
到今天为止,没有人敢忽视华为的技术能力.但,从技术到产品,再到市场,却并非"一家之言",竞争永远是残酷的. "坐拥全景天幕,简约之下皆是享受.搭载HarmonyOS 智能 ...
- 【基础导航软件架构】无人驾驶车/机器人的基本导航软件系统框架(自己总结)
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.感知模块的理解 1.环境感知 传感器sensor 目标检测det ...
- 5分钟构建一个自己的无人驾驶车
心情不够振奋,学个新技术吧! 翻译来源: https://www.youtube.com/watch?v=hBedCdzCoWM 发现了一个特逗儿的小伙儿,有一些5分钟系列的视频,介绍一些人工智能的技 ...
- 百度无人驾驶车北京上路!网友:没有司机我有点慌
新智元报道 编辑:卫民 [新智元导读]10月11日,百度官方微博发布消息,百度自动驾驶出租车服务在北京全面开放,用户可在海淀.亦庄的自动驾驶出租车站点,无需预约,直接下单免费试乘自动驾驶出租车 ...
- 5G无人驾驶车上路雄安 中兴通讯携手中国电信、百度完成国内首测
点击上方"中兴开发者社区",关注我们 每天读一篇一线开发者原创好文 近日,中兴通讯携手中国电信.百度在河北雄安新区完成了基于5G网络实况环境下的无人驾驶车测试,这是国内首个在5G网 ...
最新文章
- 来自新手Banana Pi香蕉派初体验
- 同步电路设计的一些问题(时序分析基础,同步电路设计规则)
- LruCache缓存处理及异步加载图片类的封装
- Visual Studio 2013 Web开发新特性
- 史上最详细“截图”搭建Hexo博客——For Windows
- opencv鼠标操作,画矩形
- long 比较大小_Long-Term Feature Banks
- RabbitMQ direct交换机
- python + pyqt5 UI和信号槽分离方法
- Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
- 十分钟学习python_10分钟带你入门Cython
- 【周记:距gdoi43天】
- (110)FPGA面试题-介绍Verilog块语句begin-end执行过程
- maven下载安装环境配置
- 隔离 docker 容器中的用户-------分享链接
- VBA函数定义及说明
- WordPress 5.2中的致命错误恢复模式
- Obsolete属性
- 十大简单排序:桶排序
- Yeti Feather贴图着色与Arnold 渲染