Frage zur Programmierung vom NXT - AG

Mindstorms im Unterricht. Ideen, Vorstellungen

Moderator: Moderatoren

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Frage zur Programmierung vom NXT - AG

Beitragvon Diphthong » 18. Aug 2010 16:52

Hallo,
ich bin jetzt seit einem Jahr in der Roboter-AG unserer Schule. Dort arbeiten wir mit dem NXT 2.0 Aufgabe ist es, einen Parcours mit Linien, Lücken und Hindernissen zu durchfahren und oben ein ,,Opfer" in den sicheren Bereich schieben. Der Parcours soll ein brennendes Haus darstellen.
Jetzt haben wir Problem: Vor dem oberen Raum ist eine silberne Linie, sodass der Roboter mit den Lichtsensoren erkennt, dass er da ist. Die Linie hat einen Lichtwert von 60. Jetzt ist das Problem, dass wenn wir eingeben, dass er wenn der Lichtsensor einen Wert von mehr als 60 hat, das Programm für die Rettung abspielt das macht - aber er macht es auch zwischendurch in den anderen Abschnitten des Parcours beim weißen Boden.
Dasandere Problem ist, dass wir nicht wissen, wie wir es machen sollen, dass er die Dose in die ,,schwarze Zone" schiebt.
Hier ein Bild, wie der obere Abscnitt aufgebaut ist:
Bild
Soll er es einfach nach einem bestimmten Muster abfahren? Was schlagt ihr vor?
Viele Grüße
Diphthong

Benutzeravatar
Plüschtier
Moderator
Moderator
Beiträge: 861
Registriert: 3. Sep 2007 14:47
Wohnort: Salzbergen

Beitragvon Plüschtier » 18. Aug 2010 17:11

Um dir helfen zu können, musst du uns sagen, welche Programmiersprache ihr verwendet.

Wegen dem silbernen: Da musst du einfach sagen, wenn LS >60 && LS <80.
Also bereich zwischen 60-80. Das sollte auch passen mit weiß, weiß fängt meisten so bei 85 an.
Gruß Plüschtier

Benutzeravatar
N X T
Schreibt super viel
Schreibt super viel
Beiträge: 426
Registriert: 13. Jan 2008 15:01
Wohnort: Niedersachsen
Kontaktdaten:

Beitragvon N X T » 18. Aug 2010 18:16

den schwarzen bereich könntest du ja vieleicht mit einem Kommpass oder Infrarotsensor aufspüren. dann brauch man eine IR Lampe.
Ich kenne mich mit dem kompassensor nicht aus, aber er würde doch bestimmt einen starken magneten im schwarzen feld erkennen?
Wer Rechtschreibfehler findet, darf sie behalten!

http://www.lego-technik-nxt.de.tl/

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 18. Aug 2010 18:25

Danke für deine schnelle Antwort.
Wir verwenden NXC, habe ich ganz vergessen zu schreiben! :oops:

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 18. Aug 2010 18:30

N X T hat geschrieben:den schwarzen bereich könntest du ja vieleicht mit einem Kommpass oder Infrarotsensor aufspüren. dann brauch man eine IR Lampe.
Ich kenne mich mit dem kompassensor nicht aus, aber er würde doch bestimmt einen starken magneten im schwarzen feld erkennen?

Das würde leider nicht gehen, da der Kompasssensor im Moment von uns aus nicht zu beschaffen ist und wenn wir z.B. zur German Open fahren oder bei anderen Wettbewerben darf man das Feld ja nicht ,,manipulieren"!
Außerdem geht es darum, wie er die silnerne Dose aufspüren kann, aber trotzdem danke für deine Hilfe.

Benutzeravatar
N X T
Schreibt super viel
Schreibt super viel
Beiträge: 426
Registriert: 13. Jan 2008 15:01
Wohnort: Niedersachsen
Kontaktdaten:

Beitragvon N X T » 18. Aug 2010 19:03

oder du fährst so lange planlos übers feld, bis dein roboter zufällig die schwarze ecke trifft. :D

dauert aber dann wohl etwas länger, bis er da ist.
Aber ausser suchen fällt mir im momment nichts ein.
Wer Rechtschreibfehler findet, darf sie behalten!

http://www.lego-technik-nxt.de.tl/

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 18. Aug 2010 19:05

Plüschtier hat geschrieben:Um dir helfen zu können, musst du uns sagen, welche Programmiersprache ihr verwendet.

Wegen dem silbernen: Da musst du einfach sagen, wenn LS >60 && LS <80.
Also bereich zwischen 60-80. Das sollte auch passen mit weiß, weiß fängt meisten so bei 85 an.

Ich habe das jetzt so geschrieben:

Code: Alles auswählen

if(Sensor(IN_1)>60)&&(Sensor(IN_1)<80)

Aber BricxCC macht dann
Error: ´;´ expected.

Insgesamt sieht der Abschnitt so aus:

Code: Alles auswählen

 [...]
if(Sensor(IN_1)>60)&&(Sensor(IN_1)<80)
{
 {
  PlayTone(400,500);
  RotateMotor(OUT_AC,50,360);
  RotateMotor(OUT_A,50,-90);
 }
[...]
Ich hoffe, dass ihr mir weiterhin helfen könnt.
Viele Grüße
Diphthong

Benutzeravatar
Dunkle Macht
Enorm-Viel-Schreiber
Enorm-Viel-Schreiber
Beiträge: 749
Registriert: 6. Jun 2008 15:37
Wohnort: Legau
Kontaktdaten:

Beitragvon Dunkle Macht » 19. Aug 2010 09:41

Hallo,

das sieht mir verdächtig nach Robocup Rescue aus.


Der Code muss heißen:

Code: Alles auswählen

if((Sensor(IN_1)>60)&&(Sensor(IN_1)<80))


Achja: In Singapur (WM) haben das eigentlich alle mit nem Kompass gemacht (soweit ich mal bei rescue zugeschaut hab). Ein Team hab ich aber gesehen, die mit nem US einfach an der Wand entlang gefahren sind, bis was schwarzes auf dem Boden war.

Warum könnt ihr keinen Kompass beschaffen? Bis zu den German Open is ja noch ne Weile ;D

Zum Dosen finden würd ich (wenn kein Kompass vorhanden) Chaos-Strategie machen. Einfach rumfahren bis man sie hat.

Das mit dem Lichtsensor wird denke ich nicht richtig klappen weil das umgebungslicht zu hell ist.

Benutzeravatar
robofreak
Schreibt super viel
Schreibt super viel
Beiträge: 338
Registriert: 15. Okt 2008 16:22
Wohnort: Österreich/Graz
Kontaktdaten:

Beitragvon robofreak » 19. Aug 2010 15:07

Bild[/img]

Ich hoffe es ist ersichtlich was ich mit der Skizze meine :)
Wenn du währenddessen die Rotationswerte mitspeicherst (Odometrie) weisst du immer wo genau im Raum du dich befindest und brauchst nur mehr die Ecken nach schwarz absuchen.
Mit einem kleinen Trick kannst du mit dieser Methode sogar vermeiden das du versehentlich ein Hinderniss statt der Dose erkennst aber ich will dir/euch ja nicht die ganze Arbeit abnehmen :)
<img src="http://teamandroid.bplaced.net/upload/logo3_small.png" width="150px" border="0px" />

Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 19. Aug 2010 18:36

robofreak hat geschrieben:Bild[/img]

Ich hoffe es ist ersichtlich was ich mit der Skizze meine :)
Wenn du währenddessen die Rotationswerte mitspeicherst (Odometrie) weisst du immer wo genau im Raum du dich befindest und brauchst nur mehr die Ecken nach schwarz absuchen.
Mit einem kleinen Trick kannst du mit dieser Methode sogar vermeiden das du versehentlich ein Hinderniss statt der Dose erkennst aber ich will dir/euch ja nicht die ganze Arbeit abnehmen :)

Das siht gut aus, aber das muss wahrscheinlich mit Variablen gemacht werden, oder? Er muss ja auf jeden Fall etwas zwischenspeichern (Abstand der Wand am Anfang). Ich kenn mich damit noch nicht so gut aus, könnte mir damit vielleicht jemand helfen (also nur wie man das mit Variablen macht).
Wegen dem Kompasssensor kann ich ja unseren Lehrer fragen, aber falls ich das mit den Ultraschallsensor im oberen Raum mache, habe ich keinen Sensor-eingang mehr frei.

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 19. Aug 2010 18:59

Und noch was anderes: (Ich hoffe, ich nerve euch nicht 8-) )
BricxCC macht hier einen Error:

Code: Alles auswählen

 [...]
while(Sensor(IN_2)<45)
{
 RotateMotor(OUT_AC,50,45);
}
  else
  {
    OnFwd(OUT_AC,50);
  }
[...]

Was ist daran falsch? Mit if anstatt while funktionierts, dann fährt er aber nur für eine bestimmte Zeit...
Ich hoffe, dass ihr mir helfen könnt, sowohl hier als auch in meiner Nachricht hiervor.
Viele Grüße
Diphthong
Zuletzt geändert von Diphthong am 19. Aug 2010 20:44, insgesamt 1-mal geändert.

Benutzeravatar
Dunkle Macht
Enorm-Viel-Schreiber
Enorm-Viel-Schreiber
Beiträge: 749
Registriert: 6. Jun 2008 15:37
Wohnort: Legau
Kontaktdaten:

Beitragvon Dunkle Macht » 19. Aug 2010 19:44

Hallo,

das macht keinen Sinn was du da programmiert hast, was soll der Roboter denn machen?

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 19. Aug 2010 20:41

Dunkle Macht hat geschrieben:Hallo,

das macht keinen Sinn was du da programmiert hast, was soll der Roboter denn machen?

Wieso? Er soll solange forwärts fahren, wie er weiß,,sieht", wenn er dann mit dem linken Lichtsensor schwarz ,,sieht", soll er nochmal ein kleines Stück forwärts fahren, sodass er wieder vernümftig auf die Linie kommt.
Übrigens: Nachdem ich zig tutorials durchgelesen habe, weiß ich jetzt endlich halbwegs, wie man Variablen benutzt. Ich habe jetzt das Programm entsprechend angepasst, Dienstag teste ich das in der Schule mal, dann gebe ich ein feedback! :wink:
Übrigens:
so sieht der Abschnitt im Moment aus:

Code: Alles auswählen

 
int ultra_start;
[...]
          if((Sensor(IN_1)>60)&&(Sensor(IN_1)<80))
          {
           {
            PlayTone(400,500);
            RotateMotor(OUT_AC,50,100);
            ultra_start = SensorUS(IN_4);
            while(Sensor(IN_1)>45)
            {
             OnFwd(OUT_AC,50);
            }
             else
             {
              Off(OUT_AC);
             }
              if(Sensor(IN_4)<ultra_start)
              {
               RotateMotor(OUT_C,50,90);
               RotateMotor(OUT_A,50,-90);
               RotateMotor(OUT_AC,50,800);
               RotateMotor(OUT_A,50,90);
               RotateMotor(OUT_C,50,-90);
              }
          }

Das sollte doch eigentlich funktionieren, oder (da ist übrigens auch noch ein Fehler drin, die sachen wegen while und else, vielleicht könnt ihr mir da auch noch helfen)? (Nochwas nebenbei: ist es möglich, dass man es einstellen kann, dass bestimmte Sachen wie der Quellcode nur von Mitgliedern gelesen werden kann? Es wäre nämlich nicht so toll, wenn einfach jemand mein Programm benutzen würde...)

Benutzeravatar
Dunkle Macht
Enorm-Viel-Schreiber
Enorm-Viel-Schreiber
Beiträge: 749
Registriert: 6. Jun 2008 15:37
Wohnort: Legau
Kontaktdaten:

Beitragvon Dunkle Macht » 20. Aug 2010 09:09

Hallo,

wegen dem, dass ein anderer eimfach dein Programm benutzt musst du dir keine Sorgen machen. 1. Bräuchte er dann einen baugleichen Roboter
und 2.ist das Programm (noch) nicht so kompliziert, dass man es kopieren muss.

Code: Alles auswählen

if((Sensor(IN_1)>60)&&(Sensor(IN_1)<80))
          {
           {


Da ist ein Fehler.

Und bei einer while gibts kein else. Das ist einfach eine Schleife.

Benutzeravatar
robofreak
Schreibt super viel
Schreibt super viel
Beiträge: 338
Registriert: 15. Okt 2008 16:22
Wohnort: Österreich/Graz
Kontaktdaten:

Beitragvon robofreak » 20. Aug 2010 09:53

Habt ihr immer noch/schon wieder Schule (hab keine Ahnung wie die Ferien in Deutschland sind)?

Code: Alles auswählen

...
if(Sensor(IN_4)<ultra_start)
...
->

Code: Alles auswählen

...
if(SensorUS(IN_4)<ultra_start)
...


Ich glaube das du die USsensoren zusammen mit anderen Sensoren(z.B. Lichtsensor) an einen Port hängen kannst da er ein I2C Sensor ist, der über andere Pins als der Lichtsensor kommuniziert.
<img src="http://teamandroid.bplaced.net/upload/logo3_small.png" width="150px" border="0px" />



Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.


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