Roboter AAR-04 Linienverfolgung und Ausweichen

Hallo Zusammen,

ich möchte meinen Roboter AAR-04 so programmieren das er eine Linie verfolgen kann, falls ein Objekt auf der Linie steht sollte er ausweichen können. Ich habe jetzt schon viele Ansätze probiert aber irgendwie hat nichts funktioniert.

Wäre nett wenn mir einer von euch seinen Programmcode zur Verfügung stellt oder mir so helfen kann das ich es dann verstehe.

Hoffe das sie viele Melden.

Und bei denen die sich melden möchte ich mich schon mal recht herzlich bedanken.

MfG

PMK11

Wo hängts denn?

Ich melde mich mal. BITTE. :wink:

Aber ohne deinen vorhandenen Sketch (Code-Tags verwenden, Schaltfläche </>) können wir nicht helfen.
Und dann zeig uns mal einen Link deiner verwendeten Hardware.

Also irgendwie hängt es an allem, denn ich bin sehr neu im Programmieren. Und hab mir gedacht wenn der Roboter jetzt mal "nur" eine Linie verfolgen kann dann wäre das ein kleiner erfolg für mich :smiley:

Leider bricht er immer wieder die Linien verfolgung nach ein paar metern ab und fängt an im Kreis zu fahren :confused:

Denke das hat etwas mit dem Motor zu tun, bin mir aber nicht sicher.

Programmcode Linienverfolgung

#define SPEED 0x8F

int speedLeft,speedRight;
unsigned int lineData[2];
int ADOffset;

void setup()
{
//Setup: Initalization
//pin 9 left foreward
pinMode(9, OUTPUT);
//pin 10 left backward
pinMode(10, OUTPUT);
//pin 5 right foreward
pinMode(5, OUTPUT);
//pin 6 right backward
pinMode(6, OUTPUT);
//Front led
pinMode(7,OUTPUT);

//Then set the start value of the signals to zero:
digitalWrite(9, 0); //pin 9 to ground
analogWrite(10, 0);
analogWrite(5, 0);
digitalWrite(6, 0); //pin 6 to ground
digitalWrite(7,HIGH); //FrontLED ON
//Startup delay:
delay(2000);

}

void LineLeft (void)
{
speedLeft += 1;
if (speedLeft > 0xFE) speedLeft = 0xFF;
}

void LineRight (void)
{
speedRight += 1;
if (speedRight > 0xFE) speedRight = 0xFF;
}
void loop()
{
LineDemo();
}

void LineDemo(void)
{
int i;
unsigned char j;

for (j = 0; j < 0xFF; j++) LineData(lineData);
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
for(;:wink: {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
if ( i > 4) {
LineLeft();
}
else if ( i < -4) {
LineRight();
}
else {
speedLeft = speedRight = SPEED;
}
analogWrite(9,speedLeft);
analogWrite(5,speedRight);
}
}
void LineData(unsigned int *linedata)
{
linedata[0]=analogRead(A6); //left linesensor
delay(10);
linedata[1]=analogRead(A7); //right linesensor
delay(10);
}

Wenn du Code-Tags verwendet hättest, könnten wir den Sketch besser lesen.
Und wo ist der Link zum Roboter?

@HotSystems: das ist der Arduino-Roboter von Arexx.

@PMK11: mutig, was du dir da vorgenommen hast. Das schafft ein Anfänger ohne etwas Ahnung von der Materie nicht.
Ich hab den Roboter nicht (in der Preisklasse geht das besser), aber das sieht nach nem mitgelieferten Beispielprogramm aus?
Und das läuft nicht, oder hast du da schon drin herum gebastelt?

Generell rate ich dir dringend, erst einmal nen paar Grundlagen zu lernen, dein Code sieht nicht aus, als wüsstest du, was du tust.

Fang einfach an: leg dir ne Linie aus, 1-2cm breit (nich mehr, nich weniger), ohne scharfe Knicke, Unterbrechungen oder Abzweige.
Also einfach nen Oval oder ähnlich (billiges Isolierband auf Parkett funktioniert super), keine engen Kurvenradien.
Dann nimmst du das Beispielprogramm als Vorlage, und versuchst, es selbst zu schreiben- und zwar "mit deinen eigenen Worten".
So wirst du erst mal verstehen, wie das überhaupt alles gemacht wird.
Wenn der Robbi das in beide Richtungen immer fehlerfrei schafft, hast du ne ganze Menge gelernt, und verstehst auch, wie es prinzipiell funktioniert.
Arbeite auch die anderen Beispiele auf diese Weise durch- nur so kanst du programmieren lernen, und ohne das gehts nich...

Der Rest ist dann mehr oder weniger Strategie- und da gibts sehr viele Möglichkeiten, wie man mit Unterbrechungen, Kurven, die der Roboter nicht fahren kann, Hindernissen usw. umgeht.
Das ist nicht so einfach, wie es klingt.
Linienfolger sind nicht deswegen bei Wettkämpfen immer noch die Nummer eins, weil "das jeder kann"- das kann man nämlich enorm schwer machen.