首页 > 汽车技术 > 正文

自动驾驶中方向盘控制的方法

2020-06-30 23:43:41·  来源:清研车联  
 
今天来源|清研车联知圈 |进高精度地图社群,请加微信15221054164,备注地图如何实现自动驾驶中方向盘的操作,就是方向盘转的方向和角度。在自动驾驶中需要深度学
如何实现自动驾驶中方向盘的操作,就是方向盘转的方向和角度。

在自动驾驶中需要深度学习根据自动驾驶车上的车载摄像头可以捕捉到画面,如下图:

 
来判断方向盘转动角度和方向。如何判断深度学习训练出来的模型控制方向盘转动的方向和角度好不好,可以用通过一个图片自动预测出来的方向盘的转动方向和角度与真实人控制方向盘转动的方向和角度一致,

 
他们转动方向盘的方向和角度几乎是一样的,那么神经网络就模仿到了人在在不同开车场景下如何转动方向盘的。

深度学习控制方向盘的方向和角度有如下几个难点:

· 
准确性,方向盘的控制一定要准确,深度学习一旦对方向盘转向判断错误,或者控制方向盘产生偏差,就有可能伤害到周围的行人。

·  
实时性,因为车在高速行驶,所以要求算法的速度不能太慢。

·  
应对不同天气情况/天线/白天/夜晚。

在没有深度学习前,传统的解决方案是:

 
第一步,对一个给定的图片,先转为黑白图像

 
第二步:用高斯低通滤波器把图像处理的更加平滑,把不需要的噪点剔除

 
第三步:边缘检测,用sobel,canny等方法。

 
第四步:边检检测的二值化

 
因为边缘检测的输出的图像是二维矩阵,每个值是浮点数,二值化之后矩阵的值就是0和1了。

第五步:切割出重点区域

 
汽车在正常行驶的过程中,在第四步处理后的图片中有些线(如山的边缘线)是不重要的,我们只关心的是车道线的区域(如上图),所以用切割的方式把车道线的区域给切割出来了。

第六步:霍夫转换(hough transform)直线检测

 
霍夫线变换是一种用来寻找直线的方法,在用霍夫线变换之前,直接输入的图像只能是边缘二值图像.所以用它很容易把第六步中的点连接起来寻找出直线。

第八步:根据道路方向预测

 
有了两条线就知道汽车行驶过程中,行车道两边的边界线是什么样子的,就可以判断方向盘可以向左还是向右了。

总之根据输入图片,找到方法判断车道的两个边界线,然后确定汽车转动的方向和角度,要确定两条线的交接处在车的正前方。

论文《End to End Learning for Self-Driving Cars》(arxiv.org/abs/1604.0731 ) 是基于深度学习的解决方案:
 
论文中首先收集数据,采用的方法是在汽车上加了nvidia drive的设备,收集车上摄像头采集的数据和人在开车的时候转动方向盘的方向和角度的数据,并把它们同时存储在硬盘(ssd)中。现在汽车一般都有一个接口,用来收集人转动方向盘和踩刹车,有没有加油等数据。

收集数据之后,论文中定义了一个深度神经网络,
 
把人转动方向盘方向和角度的数据和摄像头捕捉的画面都输入到模型中去,然后训练cnn,模型在开始训练出来的方向盘转动预测结果和人转动方向盘的结果不一致,用误差(error)方向传播给cnn(上图)。
 
训练好网络后,用车上中间摄像头捕捉的画面输入给卷积神经网络,结果输出应该转动的方向和角度,把输出的值直接传给汽车,汽车就可以做出相应的动作了。

 
这个卷积神经网络结构很简单,首先输入高为66,宽为200像素,3个chanel的彩色图像,做normalization归一化处理,经过三个5*5kernel和两个3*3的kernel的卷积计算, 再经过全链接层的计算输出。

论文中实际测试之前,在模拟器上进行了测试

 
它有行车记录仪记录的视频对应的每一帧的图片,在自动驾驶中转动方向盘产生左转右转之后,它让图片做了shift和rotate,也就是让图片上下左右偏转生成一张新的图片,再用卷积神经网络(cnn),判断在这张图片下,应该如何转动方向盘,因为cnn判断的转动方向盘的角度让汽车前进又出现一张新的图片(上图中视频的输出图片),用这张图片做shift和rotate(平移和旋转),再得到一张新的图片,在输入给cnn。

论文作者还做了一个界面来观察汽车行驶(下图),帮助判断无人驾驶的安全度。
 
自动驾驶中方向盘控制的方法

比较有趣的是把卷积神经系统的feature map,把卷积计算的数值当成当成图像的方式可视化,

 
可以看到如果输入的(上图)图片中有汽车行驶的道路,论文中的卷积神经网络第一卷积层通过激活函数输出的值(feature map),上图下左一的图中通过激活函数计算后值比较大,接近1的点,恰好是道路边界的地方。就是说训练这套神经网络自己找到了转动方向的边界的值就是对应真实道路的边界。

 
输入杂乱无章,没有道路的图片,论文中训练的神经网路系统第一层经过激活函数输出的二维矩阵的值没有明显的特征,像噪声一样,这表示深度学习的神经网络不知道如何通过该图像显示的场景,不知道转动多少方向盘的方向和角度。

论文作者还上路测试了,开了20分钟从新泽西州的holmdel到atlantic highlands,他们判断自动驾驶有效性的方法是如果自动驾驶跑偏了,人会干预纠正方向。通过公式1减去(每次人为interventions干预,假设耗时6秒钟),干预次数和6秒相乘除以总行驶时间,他们的结果再乘以100。
 
这个最后结果的值越高越好。

假设行车了600秒,中间人为干预了10次(interventions),值就是90%。(如下图)

 
论文作者宣称在holmdel到atlantic highlands的行驶时间中,可以做到98%的自动行驶时间,也就是人为干预总时间只有总时间的2%,值还是比较有效的。

其实在真实世界中,深度学习如果在某种情况下处理不好,我们又很难知道为什么或者怎么去调整神经网络的结构和权重,现阶段对与神经网络的微调还是很有难度的,传统的方式虽然步骤很多很繁琐,还有很多图像的技巧在里面,但是好处就是遇到处理不好地方可以加特别的处理,达到好的处理效果。所以可以在实际情况中可以把它们结合在一起,利用投票的方式,在不同的场景下采用不同的解决方案。
 
 
分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026917号-25