球;如果没有找到球,就继续处于静止状态。 void main() { //初始化函数 XlRCU_1nit(); ifIgetDat8《89)==0) { setData(89,1): setData(1,10): setData(2.1 00): ) g_speed=getData(2); if(g——speed>100)g——speed=100; setMotor(1 00.1 OO): wait(O.1): while(1) { g_degree=getComPB0;//读取指南针 g_Q_Max=geLQ_CPI(9);//前复眼最大值 g—H—Max=geLH—CPI(9);//后复眼最大值 GetAIIAl0;//读取各个模拟传感器 。 if(g—Q—Max>g—H—Max&&g_Q Max>G—BALU 机器人前方有球 { g_ftag=0; g_Q_Maxlndex=get_Q_CPI(8); findBall—Q《): qian..CD0; } else l ’机器人后方有球 g_flag=l: g—H—Maxlndex=get_H—CPI(8); findBall—H0; hou_CD0; l ' } 关于追球的处理 不管是前追球,还是后追球。机器人在很多时候不应该直 着追球,比如球在球场两侧时,就不能直着追球,要带点弧度 朝向球门追球,这样机器人在追球时要判断所处位置:离球场 左侧比较近或紧挨左侧场边、离球场左侧稍远但还没有到中间、 离球场右侧比较近或紧挨右侧场边、离球场右侧稍远但还没有 到中间,程序中就这4种情况分别以不同的速度和弧度追球。 ,,前追球 void findBall Q() { if(g_fireQ>G..NEER&&g.—Q_Maxlndex>=3&&g_Q_ Maxlndex<=5) {,/追球时,球离机器比较近时,各个眼睛看到球后进行的 //处理 if((g—degree<22119_degree>338)) {∥特球进门 if(g_ir_zuo>g—ir_you) ,/机器入带球在球场的左侧 { if(g—ir_zuo>80‘1 6)setMotor(1 00.70): ,,离球场左侧比较近或紧挨左侧场边 else if(g_ir_zuo>50’1 6l setMotor (100,80)://离球场左侧稍远f目还没有到中间 else setMotor(1 00,1 00): ,,中间 ) else {//机器人带球在球场的右侧 if(g—ir_.you>80+1 6) setMotor 170.1 00);//离球场右侧比较近或紧挨右侧场边 else if(g—ir_you>50+1 6) setMotor (80,100)://离球场右侧稍远但还没有到中间 else setMotor(1 00,1 OO)://中间 } return; l l else.f((g_degree>90&&g_degree<1 80)lI(g_degree< 270&&g_degree>1 80)) {胖0断符合乌龙球的条件时,就进行乌龙球处理。 T1=getSysTime0; qianwulon90; return; } ,,追球时,球离机器比较远时,各个眼睛看到球后进行的 ,/处理 if(g—Q_Maxlndex==7)setMotor(40,-40); else if(g一0LMaxlndex==1)setMotor(-40,40): else if(g—Q_Maxlndex==6)setMotor(40,-20); else if(g一0LMaxlndex==2)setMotor(-20,40): else { if(g_fireQ>G—NEER)setMotor(1 00,1 00): else if《g_Q—Maxlndex==5)setMotor(1 00,50): else if(g—Q_Maxlndex==3)setMotor(50,1 00); else { int var3=get_Q—CPI(3); int var5=geLQ_CPI(5); if(var3>var5) setMotor(90,1 00): else ifIvar3<varS) setMotor(1 00,90): else setMotor(1 00.1 00): } } ) 5关于乌龙球的处理 乌龙球时要对两个扇形区域进行判断.分别是大于等于 90度且小于270度之间。且机器人和球在这两个区域都是对 着自己的球门。 (1)取得指南针方位,判断方位g_degree>=90&&g._degree< 130,如果条件成立,然后判断球所处方位g_Q—Maxlndex<5或 艮Q—Maxlndex>=5,然后进行各复眼马达速度处理,调整机器 人位置。 (2)判断方位g_degree<270&&g_.degree>230,如果条件成 立,然后判断所处方位咖一Maxlndex>3或g_Q—Maxlndex<=3, 然后进行备复眼马达速度处理.调整机器人位置。 (3)判断方位g_degree<130&&g_degree<230。如果条件成 立。说明机器人和球及球门的相对位置是在一条育线上。这种 状态比较危险,需要判断机器人和球是在球场偏左侧、偏右侧 或偏中问,然后进行各复眼马达速度处理。调整机器人位置。 注:前后乌龙球的处理思想基本上是一致的。 |