PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro Rechteckverfolgung mit Kollision



hans9191
02.12.2011, 16:47
hallo,

ich möchte ein programm erstellen mit dem der asuro folgendes macht:

http://www.youtube.com/watch?v=h5qPi0qSVXI

also er soll erst normal der linie folgen, und anschließend leicht drehen.
soweit klappt das programm recht gut.
nur der asuro sollte eigentlich mit dem wenden aufhören, wenn er die linie wiederfindet und diese weiterverfolgen.
und hier liegt das problem: der roboter dreht einfach immer weiter.

hier mal mein aktuelles programm:

#include "asuro.h"
#include <stdio.h>
int main(void)
{
Init();

while(1) {

FrontLED(1); //LED an

int lData[2]; // Speicher für die Messwerte zur Verfügung stellen
LineData(lData); // Einlesen der Messwerte

if (PollSwitch()==0){ //wenn kein taster gedrückt
if (lData[1] > lData[0]) { //Linienverfolgung
MotorDir(FWD,FWD);
MotorSpeed(150,225); }

else if (lData[1] < lData[0]) {
MotorDir(FWD,FWD);
MotorSpeed(225,150); }
}
else if(PollSwitch()!=0) //Kollisionsfall
{

int u=0;
while(u==0)
{
if (lData[1] > 100 && lData[0]>100) //Linie gefunden?
{
MotorDir(FWD,RWD); //drehen
MotorSpeed(150,0);
u=0;
}
else
{
u=1;
}
}
}
}



return 0;
}

edit: alte, inaktive programmteile gelöscht.

radbruch
02.12.2011, 21:50
Hallo

In der while(u==0)-Schleife sollten die Linienwerte neu eingelesen werden:


#include "asuro.h"
#include <stdio.h>
int main(void)
{
Init();

while(1)
{

FrontLED(1); //LED an

int lData[2]; // Speicher für die Messwerte zur Verfügung stellen
LineData(lData); // Einlesen der Messwerte

if (PollSwitch()==0) // wenn kein taster gedrückt
{
if (lData[1] > lData[0]) // Linienverfolgung
{
MotorDir(FWD,FWD);
MotorSpeed(150,225);
}

else if (lData[1] < lData[0])
{
MotorDir(FWD,FWD);
MotorSpeed(225,150);
}
}
else if(PollSwitch()!=0) //Kollisionsfall
{

int u=0;
while(u==0)
{
LineData(lData); // erneutes Einlesen der Messwerte !!!
if (lData[1] > 100 && lData[0]>100) //Linie gefunden?
{
MotorDir(FWD,RWD); //drehen
MotorSpeed(150,0);
u=0;
}
else
{
u=1;
}
}
}
}
return 0;
}Besser, weil für den asuro schonender, wäre wohl die Ecke in der Linie zu suchen als immer mit Speed gegen ein Hinderniss zu knallen...

Gruß

mic

hans9191
03.12.2011, 12:54
ok, vielen dank radbruch :)
das programm geht jetzt aus der schleife, ich muss bloss noch die werte für die helligkeit anpassen

deinen tipp mit der eckenerkennung werde ich auch mal umsetzen, aber ich bin jetzt erst mal froh, dass das programm überhaupt läuft, bin ewig davor gehockt^^