更多DIY项目,请关注微信公众号  疯狂电子DIY        

        之前做过一个非常简单粗略版本的无人驾驶小车(点击打开链接
<http://v.youku.com/v_show/id_XMzUyMDU4NDAyMA==.html?spm=a2hzp.8244740.0.0>
)。曾经答应过一些朋友出教程的,可是一直没有兑现。现在下定决心要把这个教程写完。而且会重新制作一辆更好的无人驾驶小车(使用标准的4车道,增加其他车辆模型作为干扰,增加红绿灯,增加行人模型。。。)但是周期会比较长,因为毕竟这个一个比较大的DIY项目了,而且程序猿还经常加班的说。这个教程的目的就是把深度学习应用在一个DIY项目中,然后尽量写的详细,通俗,保证0基础(那也不是真的0基础哈,C语言你总得会的吧,动手能力你总得有点吧)的人能够看明白,能够复现,当中涉及的所有源码,电路图都会开源出来。我会分好几篇来写。这篇主要是讲一下整个项目的框架。先上一下上次那个简略版本的无人驾驶小车的视频。虽然实现的功能很简单,但是千真万却用到了当今全宇宙最火爆的技术:“深度学习”。。。(此处应该有掌声,what?你不知道“深度学习”是什么?好吧,我再解释一下,它是实现人工智能的一种有效的方法,从神经网络发展而来,暂时理解成一种高大上的方法就妥了。后面我会花一个篇幅来介绍这个最牛B方法的基本原理)。看了这个视频后,有人会不屑的说:使用简单的模式识别,判断线条位置,角度也能很好的完成相应的功能。en,
非常正确,但是如果把场景增加的再复杂一些,路况的多样性再丰富一些,就能体现出“深度学习”的优势了。



May I have your attention, please?


        下面进入非常非常重要的环节,编写项目总体设计说明书。哦,不对,自己diy的项目写个蛋的说明书,不过核心模块的思路还是有必要说明一下的。深度学习虽然效果好,但是往往是需要巨大的计算量。很多终端是没有这个能力的。所以一般来说就有两种方案,一种是直接在终端做掉,这种方法的效果好,没有延时,但是需要终端有很强的计算能力;另一种是在云中心去做,或者说是后端的服务器去做。这种方法的话延时会比较长,因为终端需要将数据(图片)传输给后端的服务器,服务器做出识别之后,再将结果返回给终端。





        显而易见,方案二依赖一个后端的服务器,那我的小车的使用范围就非常受到限制了。如果我的服务器是在局域网的,那我的小车还只能在接入局域网内才能运行了,想去妹子家装个逼?of
course , you can't 除非你把服务器也搬到妹子家里去。
。那用阿里云呗?可以啊,一天100块,你玩的起吗?所以说为了更方便的装逼,还是应该采用方案1,不受后端服务器的限制。可是骚年,图样图森破!如果采用方案1,那就必须在小车上实现完整的深度学习推理流程,这可不是一般的微控制器(单片机)能做的事情。就算是用了ARM高端一点的芯片,也还是够呛,识别一张图片需要好几秒,那还无人驾驶个球啊,都撞了人了,你再给我返回5秒前应该刹车的!除非你用nvidia的芯片,TK1,TX1。这些芯片里面有显卡模块,非常擅长做深度学习推理相关的应用。可是醒醒吧,这样一套开发板至少得几千大洋。土豪可以忽略






        想想我们只是做个DIY,没有必要为nvidia做贡献,逼就不要装了,在家玩玩得了。想通了这点,我们就毫(shi)不(shu)犹(wu)豫(nai)的选择了方案2.那有的小伙伴就问了,方案2的服务器不是更费钱?恩,你若去买一台深度学习专用服务器的话,确实是这样,估计老婆本都得搭进去。但是对于咱这个小项目来说,你那台用来看小电影的笔记本/台式机已经够了。因为我们的深度学习网络不复杂,使用intel的CPU就已经可以准实时了。如果你的本本上能够有一块nvidia的独立显卡,那就更完美了!好了,核心方案定了。那么再把整个项目的硬件流程捋一遍。






        注意这里我采用了一个android手机作为小车上面的视频采集装置。这有很多好处。首先如果用普通的摄像头,那么还需要一个wifi模块用于连接wifi,将图像上传到服务器上面。使用android手机的话,相当于摄像头和wifi都不要另外准备了。另外很多人都有过时的的旧手机,废物利用,又环保就节约成本。还有一个优点就是andoird上面编程特别方便,编写一个视频采集和网络交互的app也不是什么难事。(什么?你担心自己不会andoird编程,没事的啦。因为这个项目的重点不是在android上面编写一个视频采集app,重点在于服务器上面如何实现深度学习训练的推理,至于android上面的app,我会开源的噻。)好了,再把这个流程捋一遍。首先是手机连接上wifi,笔记本连接上wifi。然后小车可以开始无人驾驶了(好开心,好激动。。。)由于我们的小车速度较慢。我们100毫秒采集一张当前道路的图片,然后通过手机发送给笔记本。笔记本接收到图片之后进行深度学习推理,得出当前需要采取的控制策略,例如直行,左转,右转等。然后将控制策略通过wifi发送给手机。手机收到该策略之后通过蓝牙传输给MCU(单片机),MCU根据控制策略对电机进行相应的控制,实现对应的直行,左转,右转的等操作。恩,听着是不是还挺简单的。想想马上能够把全宇宙最热门的技术用起来,心里还有点小激动呢。。。下面这张清晰的流程图,再给小伙伴们加深一下映像。







这次大概就介绍这么些东西,接下去的几期大纲如下:

深度学习原理(训练和推理)

搭建小车(绘制电路板+元器件组装+单片机端的程序编写)

手机端app编写(视频采集,网络传输,蓝牙通信)

笔记本端深度学习框架搭建(训练,包括训练数据的收集)

笔记本端推理应用的开发(接收网络图片,推理后返回结果)

系统调试,完成无人驾驶小车