PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verbesserungen



Boscha
18.09.2008, 20:45
Hey Leute,

bin gerade dabei ein bisschen mit dem Folgen von Linien beschäftigt, habe auch ein "Programm" dafür geschrieben, dass irgendwie nicht das tut, was es soll...

Hier der Code :


#include "asuro.h"

int LinkSpeed = 200;
int RightSpeed = 200;
int ADOffset;
int i;


void LinksFahren(void)
{
LinkSpeed += 1;
RightSpeed -= 1;
}


void RechtsFahren(void)
{
RightSpeed += 1;
LinkSpeed -= 1;
}



int main(void)
{
unsigned int Data[2];


Init();

FrontLED(ON);
MotorDir(FWD,FWD);
MotorSpeed(LinkSpeed,RightSpeed);

LineData(Data);
ADOffset = Data[LEFT] - Data[RIGHT];

for(;;)
{
i = (Data[LEFT] - Data[RIGHT]) - ADOffset;

LineData(Data);
if(i < -4)
{
RechtsFahren();
BackLED(OFF, ON);
}
else if(i > 4)
{
LinksFahren();
BackLED(ON, OFF);
}
else
{
BackLED(OFF, OFF);
StatusLED(RED);
}

MotorSpeed(LinkSpeed,RightSpeed);
}


while(1)
return 0;
}

Ich weiß, da sind bestimmt einpaar Logik Fehler drinne, finde aber jetzt grad keine.
Das Fahren auf der Linie, wenn eine gefunden wurde, klappt irgendwie nicht richtig... (Der Asuro bleibt nicht auf der Linie).

Und was gibt LineData eig. zurück? Versteh das irgendwie nicht...

Hat jemand Fehler, Verbesserungstips oder sonstiges ?
Würde mich auf eine Antwort freuen :)

PS: Habe die Lib 2.8 .
PPS: Bin müde, also sorry, wenn ich alles irgendwie schlecht beschrieben habe... Morgen werd ich mir alles nochmal richtig angucken :)

MFG

hai1991
19.09.2008, 16:07
hallo

was mir sofort aufgefallen ist:
bei LinksFahren erhöst du die geschwindigkeit auf der linken seite und erniedrigst sie auf der rechten. dadurch fährt er aber links schneller und macht eine rechtskurve.
ebenso bei RechtsFahren. versuch einfachmal, die beiden zu vertauschen. dann müsste es zumindes mit der richtung stimmen.

und nochwas:
in der endlosschleife berechnest du zuerst die differenz der beiden sensorwerte und rufst derst danach die funktion LineData auf (diese gibt die aktuellen werte der sensoren zurück).
das heißt der berechnete wert in i ist immer einen durchlauf alt (dürfte aber trotzdem kein problem sein, nur ein hinweis)

einen tipp habe ich noch für dich:
wenn du die geschwindigkeit immer nur um 1 änderst kann es unter umständen (je nach größe der radien bei deiner linie) dazuführen, dass er nicht eng genug einlenken kann in der zur verfügung stehenden zeit.
im normalfall müsste es mit einem wert von 5 bis 10 gut klappen (je höher der wert, desto mehr ruckelt Asuro jedoch)

ich hoffe, dass dir das weiter hilft

Boscha
19.09.2008, 17:45
Ok, danke für die Tips :)
Werd die später Verbessern, bin grad bei meinem Freund ^^