嵌入式 > 嵌入式开发 > 详情

神经网络用于智能车控制的一点心得

发布时间:2020-08-24 发布时间:
|
对于小车的控制算法,神经网络应该是不错的选择。但是很多人没有用,我想是计算量和收敛特征的问题导致大家在研究算法时不敢越雷池。神经网络的研究一般是基于OFF-LINE的,而飞思卡尔比赛用的只是MCU的ON-LINE模式的,这似乎就有了矛盾;另外,神经网络无论在分类还是拟合作用上,计算精确性并不是100%,这也是航空技术不用神网的原因。
此篇博文主要讨论神经网络用在小车控制算法上的可能性以及如何利用神经网络于小车控制算法。
想必自动化的学生都对控制模型的建模有很深的印像,有的硕士论文就是研究这些模型。一般用机理分析法和系统辨识法对实验数据建模,得到传递函数,然后通过调试实际系统,从开环到闭环,不断调整参数和控制参数。举个例子:要建立小车直线、弧线行走的控制模型,即通过实测数据建立驱动控制和小车转弯偏移量的关系,那么输入的参数是当前速度,曲率大小,转弯弧度,最大安全速度,目前偏移角度等等参数,而输出的就是目标速度,目标角度。这个输入和输出之间的关系就是控制模型,一般也叫控制器。小车跑得快,跑得稳,主要就是这个”控制器“,控制器拟合得好,适应性强,OK,成绩就不差。
说了半天,小车控制算法要解决的问题是: 输入——>控制模型——>输出控制参数。
按一般的方法,控制模型的建立需要大量数据,离线在线都必需调试多遍,系统的适应性不佳。而尝试神经网络,这些问题就都可以很大程度地避免了。
1 首先,有必要介绍一下神经网络,到底神经网络是干什么用的,如何用。神经网络的理论并不复杂,我想是有些书或论文把简单问题复杂化了。大家不要对它恐惧。一堆数据A,通过一个NET不断调整,得到另一堆数据B。而A和目标结果数据C都是已知的,NET是未知的,这个调整NET的过程就是训练,NET训练好的结果是使B和C的误差最小,误差合理就收敛。收敛完了,这个NET就可以用了。神经网格的核心就是得到一个NET。控制模型就是一个NET,NET包含很多参数,如权值,隐含层数,训练方法,神经元模型,传递函数等,只要建立一个NET,那么输入和输出的关系就建立起来了。
神经网络主要有两个作用:一个是分类,另一个是回归(拟合)。如果把它运用于小车控制算法,毫无疑问是用于回归拟合的功能。回归什么呢?对,回归上面所说的控制模型,这个NET就是控制器。
神经网络用于小车控制算法上的优势比较明显,模型可以随时调整,而且模型不是通过公式表示,只是一个NET来表达,避免复杂的参数调整和试算过程。通过新的环境参数得到新的NET,增强系统的适应性。
为什么有些车在自己的场地上跑得好好的,在其它的场地上就不行呢?
为什么有些车不断地调整控制模型,控制效果却不好呢?
如何选择控制器的输入参数,参数的权重如何介定呢?
。。。。。。。。
一系列的问题,神经网络可以给大家答案。
2 WJ本人对神经网络用于小车控制的一点思考。
神经网络常用的一般有:感知器,BP,HOPFILED,RBF,ANN,ART和Kohonen网络。如果不用工具箱函数(即MATLAB的API函数),自己写的话,无所谓,说不定自己可以创造一种网络。只要收敛快,计算量小,泛化性能好,网络耗费资源小就行,话说起来简单,却有一定难度。但是小车的需求低,精度无需太高,因此应该来说比较容易实现。
神经网络比PID,模糊控制,遗传算法,bangbang等算法,更宏观,可以理解为从系统整体入手建模。但是正如本博文开头所说:计算量和收敛性必需保证,神经网络才有运用的可能性。WJ建议从以下几个方面解决这两个问题:
(1)不要指望神经网络的实时性。神经网络最要命的耗费时间是训练,神经网络在车运行时进行一两次成功的训练即可。在小车跑直线时通过获得的数据训练,因为直线时CPU会有空闲时间。另外,相信大家经常用拨码开关去选择多种控制决策,这不失一种方法。但是,这个控制决策是死的,也是事先规划好的,必定不能适应新的KT板的各种路径。
(2)最好用片内FLASH或SD卡,数据的处理是很重要的,数据也非常宝贵的,把数据存起来,传给PC,OFFLINE时研究神经网络的算法(有无数种训练算法),这是其一。其二,训练好的网络存在SD卡里,下次如果需要再训练,从老的网络开始(一般网络权值是随机开始),效率会高很多。
(3)正如数据融合一样,有决策层和数据层的融合,神经网络也一样,有决策层和数据层的运用。由于小车的路径是连续的,那么数据层的神经网络肯定是用得着的。在图像采集里,一般是40mS采集一次路径并做控制判决,那么这40mS的时间不够用怎么办?大家常用的一种方法是干脆80mS采集一次。我的建议是前60ms采集一次图像并作控制决策。后20ms运用前4Oms提取的路径信息并用神网预测路径的变化,这么一来相当于在20ms的时间里采集了一次图像。可想而知,效率提高了。
(4)上面是从数据层采用神经网络,这里讲一下从决策层采作神经网络。举个例子,假如控制器的输出-3 -2 -1 0 1 2 3分别代表舵机左偏30,左偏20,左偏10,直行,右偏10,右偏20,右偏30,而小车前7次的控制决策是:直行,右偏10,直行,左偏10,直行,右偏10,直行,(0 1 0 -1 0 1 0 )。。。。,那么第8次的决策通过神网应该就是左偏(-1)。如果实际需要的不是左偏的话,就应该把神网“惩罚”一下。
(5)寻找合适的误差阈值。小车寻迹不像激光切割,精度要求并不高。其训练的误差值可以“商量”的。
(6)神网的训练数据不是抓到一个就可以的,是要选择的。但这个选择也是要耗时间的,如果是在PC上,FCM(模糊聚类)是不错的选择。但是MCU是扛不起这个重任的,于是选择合适的训练数据和目标数据也是一个重要的研究话题。这里,如何优化神网输入不是重点,略过。
(7)重视归一化处理和神经网络训练算法。这两点很重要,归一化可以理解为把(100 45 -67 90)归一化为(1 0.45 -0.67 0.9),好处是改进数据的规范性,加快收敛。另外训练算法的重要性不言而喻,如用梯度下降法训练法使误差达到最小,什么是梯度下降法呢?打个比方,你要下山,山前的坡度是30度,山后是悬崖坡度是90度,要下山快,当然是找坡度大的直接跳。这个下山坡度和训练梯度是同一个含义
(8)个人觉得利用神经网络进行速度控制有较大优势,比PID控制起来精度会有些缺陷,但速度快。由于摩阻力,小车动力性能,小车驱动性能,电池等原因,需要对速度闭环控制。假如:小车以单位时间10ms为节拍,速度从X1m/s->Y1m/s,需要PWM为d1%占空比,速度从X2m/s->Y2m/s,需要PWM为d2%占空比.......速度从Xn m/s->Yn m/s,需要PWM为dn%占空比,那么以(X,Y)为训练输入,(D)为训练输出,建立神经网络并训练,那么建立起PWM和速度控制之间的关系是非常轻易的事。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
定时器CTC模式的测试