PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktion Go() & Kollisionsabfrage



PH0B0S
17.05.2006, 12:54
Go() aus der Asuro Library zieht ja sein Ding durch obs knallt oder nicht. Hat jemand von euch schonmal Go() in Zusammenhang mit einer Kollisionsabfrage benutzt (PollSwitch()). Würde gern wissen, wie man das am besten angeht. Hinzu kommt, daß gespeichert werden muss wie weit Go() gekommen ist um nach einem Ausweichmanöver die Restdistanz ausrechnen zu können. Um eine Änderung der Asuro.c wird man wohl nicht herumkommen denk ich. Was meint ihr?

PH0B0S
17.05.2006, 13:09
00424 int Go(int distance, int speed)
00425 {
00426 int enc_count = 0;
00427 int tot_count = 0;
00428 int diff = 0;
00429 int l_speed = speed, r_speed = speed;
00430 enc_count=abs(distance);
00431
00432 // enc_count=distance*10000;
00433 // enc_count/=12823;
00434
00435 Encoder_Set(0,0); // reset encoder
00436
00437 MotorSpeed(l_speed,r_speed);
00438 if(distance<0) MotorDir(RWD,RWD);
00439 else MotorDir(FWD,FWD);
00440
00441 while((tot_count<enc_count) && (PollSwitch()!=0)) {
00442 tot_count += encoder[LEFT];
00443 diff = encoder[LEFT] - encoder[RIGHT];
00444 if (diff > 0) { //Left faster than right
00445 if ((l_speed > speed) || (r_speed > 244)) l_speed -= 10;
00446 else r_speed += 10;
00447 }
00448 if (diff < 0) { //Right faster than left
00449 if ((r_speed > speed) || (l_speed > 244)) r_speed -= 10;
00450 else l_speed += 10;
00451 }
00452 Encoder_Set(0,0); // reset encoder
00453 MotorSpeed(l_speed,r_speed);
00454 Msleep(1);
00455 }
00456 MotorDir(BREAK,BREAK);
00457 Msleep(200);
return tot_count;
}


Müsste doch eigentlich reichen, oder? Asuro steht --> man startet ein Ausweichmanöver --> man startet Go() erneut mit "distance - tot_count"

Werd ich heut Abend mal testen...