Seite 1 von 7

Programm Überholen in NXC

Verfasst: 14. Okt 2010 18:18
von Nakiri
Hallo liebe Mindstormler,

seit kurzem beschäftige ich mit den Lego Mindstorms. Ich habe weder Ahnung von Programmieren noch von Lego Mindstorms selbst. Nun ist mein Problem, dass ich ein Programm (NXC in BricCC) schreiben muss, welches meinen Roboter ein Hindernis überholen lässt.
Gibt es hier jemanden der mir dabei helfen kann?
Ich hab die Idee schon draußen und es müsste eigentlich nur noch in Programmschreibweise umgeschrieben werden, denn das bereitet mir Probleme...ich hab es zwar schon versucht, aber es ist ziemlich Freestyle mäßig und hat viele Fehler.
Wenn sich jemand meldet, dann leg ich mal meine Idee dar ;)


Viele Grüße
Nakiri

Re: Programm Überholen

Verfasst: 15. Okt 2010 00:38
von Linus
Nakiri hat geschrieben:Nun ist mein Problem, dass ich ein Programm (NXC in BricCC) schreiben muss, welches meinen Roboter ein Hindernis überholen lässt.

Was heißt denn genau du musst?

Verfasst: 15. Okt 2010 18:57
von Nakiri
schulisch. Also von meinem Seminar aus. Da muss jeder zu nem Thema was machen, und ein Grüppchen befasst sich eben mit Lego Mindstorms.
;)

Verfasst: 16. Okt 2010 03:34
von Linus
Nakiri hat geschrieben:schulisch. Also von meinem Seminar aus. Da muss jeder zu nem Thema was machen, und ein Grüppchen befasst sich eben mit Lego Mindstorms.
;)

Dann schreib mal deine Überlegungen. Und die genaue Aufgabe. Damit sichergestellt ist, dass wir nicht deine Hausaufgaben lösen.

Verfasst: 16. Okt 2010 09:16
von HaWe
und schreib in den Titel deiner Fragestellung im 1. Post bitte auch die Programmiersprahen mit dazu, um die es geht (NXC).

Verfasst: 16. Okt 2010 12:46
von Nakiri
danke für die hilfe im vorraus ;)


also die aufgabe ist ziemlich frei...es geht eben darum ein hindernis zu überholen...am anfang wollte ich es mit einem 2. fahrenden roboter machen, aber ich hab schnell gemerkt, dass es so kompliziert genug für mich anfänger ist :D

hier meine überlegungen:
Es wird links überholt.
Wir haben das Hindernis und der Roboter steht ungefähr eine Hindernisslänge dahinter. Der roboter hat einen Ultraschallsensor nach vorne gerichtet und einen rechts hintem am heck. der roboter fährt bis zum hindernis bis der ultraschallsensor den abstand von ungefähr 50 erkennt. dann fängt der roboter an, sich um 30° nach links zu drehen, am besten während dem fahren, wenn dies möglich ist. nach dem drehen fängt der roboter an die motorrotationen mit zuzählen, damit die gefahrene strecke mitgezählt wird. der rob fährt dann solange gerade aus, bis der hintere ultraschallsensor das hinderniss erkennt und dreht sich dann wieder 30 grad zurück und hört gleichzeitig das zählen auf und speichert die rotationen als variablen. dann überholt er durch ganz normales grade ausfahren, bis der hintere ultraschallsensor kein hinderniss mehr erkennt. dann lenkt der roboter wieder ein, sollte dann die variablen nutzen um die davor gefahrene strecke nochmal zu fahren und dann am ende dreht er sich wieder gerade...

mein programm dazu wollt ihr glaube ich nicht sehen, da blick ich selbst schon nicht mehr durch^^

Verfasst: 18. Okt 2010 14:01
von Nakiri
also nochmal in kurzform:
-wenn abstand <50 cm(1. sensor), roboter drehen um 30°
-wenn gedreht, rotationen zählen und grade ausfahren
-wenn 2. sensor gegenstand erkennt, dann zählen stoppen (und als variable speichern) und drehen um 30° zurück
- dann gradeausfahren bis 2. sensor nichts mehr erkennt
- wenn 2. sensor nichts mehr erkennt, 30° drehen, die gezählte strecke von vorher geradeausfahren, am ende 30° zurückdrehen und wieder gradeaus fahren

das bräuchte ich nun in NXC...das einzige was da bisher geklappt hat war das heranfahren bis 50 cm-.-

Verfasst: 18. Okt 2010 14:42
von NXT pro
das bräuchte ich nun in NXC...das einzige was da bisher geklappt hat war das heranfahren bis 50 cm-.-


und was hat er dannach gemacht? (stehengeblieben, aufgefahren)

Verfasst: 19. Okt 2010 12:44
von Nakiri
ohne weitere befehle ist er dann einfach stehen geblieben...mit befehlen hat er sich noch bissl gedreht glaube ich und das wars dann...auch bei einfachen befehlen wie weiter geradeausfahren...aber sonst ist kein programm zu nennen, weil ich nicht weiss wie ich das machen soll...

Verfasst: 19. Okt 2010 16:00
von NXT pro
zeig mal den programmcode dieser methode her

Verfasst: 19. Okt 2010 22:38
von Nakiri
wäre cool wenn dus korrigieren könntest :P

Code: Alles auswählen

#define Abstand 50
#define x


task main ()
{
SetSensorLowspeed(IN_1);
SetSensorLowspeed(IN_2);
SetSensorMode(IN_2, SENSOR_MODE_BOOL);

until(SensorUS(IN_1)<Abstand)                                       
{
OnFwdReg(OUT_AB, 50, OUT_REGMODE_SYNC);
}
OnFwdReg(OUT_AB, 60, OUT_REGMODE_SYNC);
Wait(1000);

RotateMotor(OUT_A,50,-100); 
RotateMotor(OUT_B,50,100);


ResetRotationCount(OUT_A);



until (SensorUS(IN_2)(true));
{
OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
}


if (SensorUS(IN_2)true);
{
Off (OUT_AB);
x = MotorRotationCount(OUT_A);

}

RotateMotor(OUT_A,50,100);
RotateMotor(OUT_B,50,-100);

until (SensorUS(IN_2)(false));
{
OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
}

RotateMotor(OUT_A,50,100);
RotateMotor(OUT_B,50,-100);

ResetRotationCount(OUT_A);


until (MotorRotationCount (OUT_A) = x);
{
OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
}

RotateMotor(OUT_A,50,-100);
RotateMotor(OUT_B,50,100);

OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);

}

Verfasst: 20. Okt 2010 05:20
von NXT pro
Ich kenne mich nicht so mit nxc aus ich meine eigentlich für die guten Kannst aber trotzdem mal folgendes probieren

Probiere mal statt dem definierten Abstand jeweils 50 zu schreiben

Übrigens gibt es im Forum extra ein Fenster "Code"

Verfasst: 20. Okt 2010 13:02
von Nakiri
naja das mit abstand hat ja funktioniert...bloß alles danach kann ich vergessen-.- und des bräucht ich halt richtig :D
kann da nicht jmd helfen bitte?

Verfasst: 20. Okt 2010 13:13
von NXT pro
Nakiri hat geschrieben:

Code: Alles auswählen


until(SensorUS(IN_1)<Abstand)                                       
{
OnFwdReg(OUT_AB, 50, OUT_REGMODE_SYNC);
}
OnFwdReg(OUT_AB, 60, OUT_REGMODE_SYNC);
Wait(1000);

RotateMotor(OUT_A,50,-100); 
RotateMotor(OUT_B,50,100);


Du musst (denke ich) nach
OnFwdReg(OUT_AB, 50, OUT_REGMODE_SYNC);


ein wait setzen und
was soll das zweite OnFwdReg?

Verfasst: 20. Okt 2010 14:33
von Nakiri
glaube das zweite onfwd war ein überbleibsel von nem anderen programm...des gehört da nicht rein...das mit dem wait ist so richtig?

Code: Alles auswählen

until(SensorUS(IN_1)<Abstand)
{
OnFwdReg(OUT_AB, 50, OUT_REGMODE_SYNC);Wait(1000);
}


weisst du wie das mit der variable speichern und dem solange fahren bis variable erfüllt ist, ausschaut?