光电组武汉科技大学首安一队技术报告 - 图文 下载本文

havego=1; smartstate=1; } } }

4.3.2 弯道策略分析

其中,切弯路径主要决定了车辆是选择内道过弯还是外道过弯。切内道,路经最短,但是如果地面附着系数过小会导致车辆出现侧滑的不稳定行驶状态,原因是切内道时,曲率半径过小,同时速度又很快,所以模型车需要的向心力会很大,而赛道本身是平面结构,向心力将全部由地面的摩擦力提供,因此赛道表面的附着系数将对赛车的运行状态有很大影响。切外道,路径会略长,但是有更多的调整机会,同时曲率半径的增加会使得模型车可以拥有更高的过弯速度。

我们对于赛道的主要处理是通过第一和第二个CCD得到赛道偏差的加权进行处理的。当位于直道时,第一第二个CCD的偏差各取0.5,而当位于弯道时,第一个的偏差取0.3,第二个的取0.7.因为第二个CCD的前瞻更远,权值取得大能够获得更大的偏差,打角更加迅速。当我们得到的偏差比较小时,经过实际测量,小S的偏差在8~15时,我们直接不打角,当作直道进行处理。当偏差较大时,当作弯道进行处理。偏差的获取就像我之前说的那样。

4.3.3 直角策略分析

本届先加了直角赛道元素,在直角弯道两边距离1米处路面上有宽度为 10厘米、长度等于路宽的黑色标识,如图4.4所示,用于光电平衡组和摄像头组检测提前减速。为了防止小车在直道一直加速导致冲出跑道,这就需要我们提前检测到并且实现直道减速。我们这里选用的是一对红外对管进行路宽的黑色标识的检测。如图4.5所示,这里之所以使用一对而不是一个的原因是为了防止在单线上出现误判。检测到黑色标识后,经过一米后,当我们检测到单边丢线,我们判断它为直角,然后直接给小车一个固定的打角,直接通过直角。具体程序如下:

35

第九届全国大学生智能汽车邀请赛技术报告

图4.4 直角弯道

图4.5 红外对管

void right_roadsort() {

uint8 i=0;

ave_pixel2=aveu16(128,pixel2); ave_pixel1=aveu16(128,pixel1);

36

for(i=9;i>0;i--) {

average_pixel1[i]=average_pixel1[i-1]; average_pixel2[i]=average_pixel2[i-1]; }

average_pixel2[0]=ave_pixel2; average_pixel1[0]=ave_pixel1; { if(

(ccd2_roadwidth[0]>=60&&ccd2_roadwidth[0]<=75)//路宽 &&ccd2_leftlost_count>=2 &&ccd2_both_lost_count==0 &&ccd2_rightlost_count==0 &&error2>0

&&(ccd1_roadwidth[0]>=50&&ccd1_roadwidth[0]<=75)//路宽 &&ccd1_leftlost_count>=5 &&ccd1_both_lost_count==0 &&ccd1_rightlost_count==0 &&error1>0 )

{turn_left=1;bellring=30;right_roadlength=0;right_roadpass=0;right_delay_count=0;rotate_flag=1; right_distance=0; right_blackline=0; } if(

(ccd2_roadwidth[0]>=60&&ccd2_roadwidth[0]<=75)//路宽 &&ccd2_leftlost_count==0 &&ccd2_both_lost_count==0 &&ccd2_rightlost_count>=2 &&error2<0

&&(ccd1_roadwidth[0]>=50&&ccd1_roadwidth[0]<=75)//路宽 &&ccd1_leftlost_count==0 &&ccd1_both_lost_count==0 &&ccd1_rightlost_count>=5 &&error1<0 )

{turn_right=1;bellring=30;right_roadlength=0;right_roadpass=0;rotate_flag=1;

37

第九届全国大学生智能汽车邀请赛技术报告

right_distance=0; right_blackline=0;} }

if(rotate_flag==1) rotate_angle+=rotate_w*0.01; if(ABS(rotate_angle)>right_angle_limit) {

rotate_flag=0; rotate_angle=0; turn_right=0; turn_left=0; }

right_roadpass++; if(real_v>250)

{right_limit=1;right_error_limit=12;right_angle_limit=50;} else if(real_v>240) {right_limit=3;right_error_limit=10;right_angle_limit=50;} else if(real_v>230) {right_limit=5;right_error_limit=12;right_angle_limit=50;} else if(real_v>220) {right_limit=7;right_error_limit=11;right_angle_limit=50;}// else if(real_v>200) {right_limit=10;right_error_limit=10;right_angle_limit=60;} else if(real_v>180) {right_limit=15;right_error_limit=13;right_angle_limit=60;} else if(real_v>150) {right_limit=25;right_error_limit=3;right_angle_limit=60;} else {right_limit=5;right_error_limit=12;}

if(right_roadpass>=right_limit) right_roadpass=right_limit;//6cm 6_9cm

if(turn_right==1&&ABS(rotate_angle)<50&&right_roadpass==right_limit)

{error=-right_error_limit;bellring=100;}

if(turn_left==1&&ABS(rotate_angle)<50&&right_roadpass==right_limit)

{error=right_error_limit;bellring=100;} mian_ccd_middle=64+5*right_roadpass; mian_ccd_middle=64-5*right_roadpass; }

4.3.4十字策略分析

38