智能车控制算法.docx
3页智能车转角与速度控制算法1•检测黑线中点Center:设黑、白点两个计数数组black、white,从第一个白点开始,检测到一个白点,白点计数器就加1,检测到第一个黑点,黑点计数器就加1,并且白点计数器停止,以此类推扫描每一行;黑线中点=白点个数+(黑点的个数/2)2•判断弯直道:找出黑线的平均位置avg(以每10行或者20…作为参照,行数待定)Center[N]/N算出相对位移之和(每一行黑线中点与黑线平均位置距离的绝对值之和Curve=鳥|伽册[N]・avg|然后用Curve的大小来确定是否弯直道(Curve的阀值待定)3•控制速度:根据弯度的大小控制速度大小f*****************************Curvecontrol(){intblack[N];intwhite[N];intcenter[N];intavg;intcurve;if(白点)++white[N];else++black[N];弯度检测函数*******************************////黑点计数器//白点计数器//黑线中点位置//黑线中点平均位置//N行的相对位移之和//判断黑白点的个数center[N]=white[N]+black[N]/2;//每一行的黑线中点avg=(center[1]+center[2]+...+center[N])/N;//求出黑线中点的平均位置curve=(|avg_center[1]|+|avg-center[2]|+...+|avg_center[N]|)/N移之和returncurve;//求出N行的相对位//返回弯度大小//*****************************舵舱转角控制函数******************************////****黑线轨迹会指引小车的行驶方向,所以向左还是向右是由黑线决定的。
////****设0为小车正向行驶,-10为向左的最大转角,+10为向右的最大转角////****设小车实际行驶路线中心A相对于黑线中线B偏移量为gap;gap有正负之分,//gap为正时,小车在黑线中线的右侧,应该左转;gap为负时,小车在黑线中线左侧,应//该右转转角的大小由刚刚得到的弯度Curve确定//Viewpointcontrol(){Intgap,A,B;Inty;//****y为舵舱的转角角度gap=A-B;If(gap>0)左转elseif(gap<0)右转else不变//****y有正负之分//****返回转角角度丫=与Curve和gap有关的公式returny;}//*****************************速度控制函数*********************************////*******根据弯度的大小来改变速度大小*****//Speedcontrol(){Returnspeed;}5.3.1偏航距离的计算由于已经获得了赛道中心线的位置,所以计算偏航距离的问题是选取何处的中心线的距离为当前的偏航距离控制算法的执行周期为40ms,如果赛车的速度为2m/s,则在两次控制算法的执行中间,赛车要前进8cm,赛车所处的环境将发生比较大的改变,所以赛车的控制只能算是半实时控制,这是所有使用摄像头作为主要寻线传感器的参赛队都避免不了的问题。
因为算法的滞后性,赛车需要将“当前位置”进行适当前移前移量应该跟赛车当前速度成正比,但实际中我们发现,适当增加一些前移距离是有好处的,因为可以在入弯处提前转弯,使得赛车沿弯道内侧行驶,缩短了过弯距离532偏航角度的计算计算偏航角度的实质是直线拟合问题,因为赛道中心线所在的直线确定了,而直线的斜率与偏航角度对应直线拟合最有效的方法是最小二乘法[7],但是直接应用存在一个问题,即如何确定进行直线拟合的区间?在整个成功识别出赛道的区间内进行直线拟合显然是欠缺考虑的,因为在弯道的情况下,这种方法拟合出的是一条弦线,而不是当前该弯道处的切线摄像头视野越大,弯道曲率越大,弦线偏离切线的程度也就越大为了能够在直道和弯道上都能正确的拟合出正确的直线,我们采用了直线检测的方法,即首先根据残差的大小确定直线的范围,然后在这一范围内进行直线拟合5.3.3曲率的计算如果说斜率的计算需要某种技巧的话,计算曲率则更是一种技巧的应用首届时很多参赛队针对各自的实际需要,提出了自己的方法其中最普遍的是根据斜率的导数来计算曲率[8]但是斜率的计算本身就很不准确,特别是某个点的斜率,对斜率求导就更不准确,所以使用这种方法只能得出一个大致的结果。
本文作者提出了另外一种方法,首先对获得的路径进行滤波,使得路径尽可能平滑,然后取其两个端点和中间点,计算这3个点组成的三角形的外接圆的半径,半径的倒数就是这段路径的曲率经过多次实验,这种方法的误差一般不大于20%,对智能车的控制来说已经足够了让赛车从起跑线开始,在赛道上行驶一圈,记录下每个时刻的曲率,如图5.9图5.9计算出的赛道曲率从图5.9可以看出,计算出的曲率能较为正确的反映实际赛道的弯曲情况但是这种方法得出的曲率不是摄像头所看到的当前位置的曲率,而是摄像头所看到的路径的整体曲率,因为这种算法仅仅与路径中三个点的位置有关然而实验中却发现,这种特点反而给赛车带来了一个好处:即摄像头在小S型弯道时舵机几乎不跟随路径的摆动而摆动,而是直线冲过这是因为较小的S型路径其弯曲部分能完整的显现在摄像头的视野中,而算法中对路径进行了滤波,滤除了中间部分的弯曲,使得路径变直了,赛车因此就直线走过。

卡西欧5800p使用说明书资料.ppt
锂金属电池界面稳定化-全面剖析.docx
SG3525斩控式单相交流调压电路设计要点.doc
话剧《枕头人》剧本.docx
重视家风建设全面从严治党治家应成为领导干部必修课PPT模板.pptx
黄渤海区拖网渔具综合调查分析.docx
2024年一级造价工程师考试《建设工程技术与计量(交通运输工程)-公路篇》真题及答案.docx
【课件】Unit+3+Reading+and+Thinking公开课课件人教版(2019)必修第一册.pptx
嵌入式软件开发流程566841551.doc
生命密码PPT课件.ppt
爱与责任-师德之魂.ppt
制冷空调装置自动控制技术讲义.ppt


