Programm Ãœberholen in NXC

Mindstorms im Unterricht. Ideen, Vorstellungen

Moderator: Moderatoren

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Programm Überholen in NXC

Beitragvon Nakiri » 14. Okt 2010 18:18

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
Zuletzt geändert von Nakiri am 18. Okt 2010 13:56, insgesamt 2-mal geändert.

Linus
Enorm-Viel-Schreiber
Enorm-Viel-Schreiber
Beiträge: 512
Registriert: 13. Jul 2007 15:50

Re: Programm Überholen

Beitragvon Linus » 15. Okt 2010 00:38

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?
RWTH - Mindstorms NXT Toolbox for MATLAB - www.mindstorms.rwth-aachen.de
Beispielvideo mit der Toolbox in Aktion

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 15. Okt 2010 18:57

schulisch. Also von meinem Seminar aus. Da muss jeder zu nem Thema was machen, und ein Grüppchen befasst sich eben mit Lego Mindstorms.
;)

Linus
Enorm-Viel-Schreiber
Enorm-Viel-Schreiber
Beiträge: 512
Registriert: 13. Jul 2007 15:50

Beitragvon Linus » 16. Okt 2010 03:34

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.
RWTH - Mindstorms NXT Toolbox for MATLAB - www.mindstorms.rwth-aachen.de
Beispielvideo mit der Toolbox in Aktion

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5256
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Beitragvon HaWe » 16. Okt 2010 09:16

und schreib in den Titel deiner Fragestellung im 1. Post bitte auch die Programmiersprahen mit dazu, um die es geht (NXC).
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 16. Okt 2010 12:46

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^^

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 18. Okt 2010 14:01

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-.-

Benutzeravatar
NXT pro
Super-Enorm-Viel-Schreiber
Super-Enorm-Viel-Schreiber
Beiträge: 930
Registriert: 27. Sep 2010 21:38

Beitragvon NXT pro » 18. Okt 2010 14:42

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)
Real coders don't comment their code - it was hard to write, it should be hard to understand!

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 19. Okt 2010 12:44

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...

Benutzeravatar
NXT pro
Super-Enorm-Viel-Schreiber
Super-Enorm-Viel-Schreiber
Beiträge: 930
Registriert: 27. Sep 2010 21:38

Beitragvon NXT pro » 19. Okt 2010 16:00

zeig mal den programmcode dieser methode her
Real coders don't comment their code - it was hard to write, it should be hard to understand!

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 19. Okt 2010 22:38

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);

}
Zuletzt geändert von Nakiri am 20. Okt 2010 13:05, insgesamt 1-mal geändert.

Benutzeravatar
NXT pro
Super-Enorm-Viel-Schreiber
Super-Enorm-Viel-Schreiber
Beiträge: 930
Registriert: 27. Sep 2010 21:38

Beitragvon NXT pro » 20. Okt 2010 05:20

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"
Real coders don't comment their code - it was hard to write, it should be hard to understand!

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 20. Okt 2010 13:02

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?

Benutzeravatar
NXT pro
Super-Enorm-Viel-Schreiber
Super-Enorm-Viel-Schreiber
Beiträge: 930
Registriert: 27. Sep 2010 21:38

Beitragvon NXT pro » 20. Okt 2010 13:13

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?
Real coders don't comment their code - it was hard to write, it should be hard to understand!

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 20. Okt 2010 14:33

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?


Zurück zu „Unterricht & AG“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss