-

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Labyrinth_programm

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    25.12.2011
    Ort
    Deutschland BadenWürttemberg
    Beiträge
    43

    Labyrinth_programm

    Hi,
    ich will mit meinem Freund eine Asuro so programieren, dass er durch ein Labyrinth findet. Das Labyrinth hat mehrere Wege und die Rechte-hand-Methode kann nicht angewand werden, da es passieren kann,dass er nurnoch im Kreis fährt.

    Der Freund hatte die Idee, dass man den Robo ein Koordinatensystem anlegen lassen soll. Doch dies ist führ zwei absolute C anfänger sehr schwer, auserdem kann der Robo keine Strecken messen und der Speicher ist nicht groß genug.

    Vieleicht könntet ihr mir ein Paar Anregungen geben.

    Danke

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.003
    Die einfachste Methode ist, das Rechtsabbiegen mitzählen. Nach vier mal rechts kommt man wahrscheinlich wieder zum ersten mal rechts. Dann entweder gerade aus fahren oder links. Sollte sich programmtechnisch leicht lösen lassen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    RN-Premium User Robotik Visionär Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    63
    Beiträge
    9.985
    Hallo!

    @ µcFlo

    Am einfachsten ist sich immer entlang einer Wand zu bewegen (siehe dazu: http://de.wikipedia.org/wiki/L%C3%B6...n_Gaston_Tarry .
    Geändert von PICture (29.04.2012 um 20:06 Uhr)
    MfG (Mit feinem Grübeln)
    Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) Fiction braucht Science. Nix ist real und Reales ist unsimulierbar, weil 1/∞=0. Chaos gegen Ordnung ist immer fehlerfrei. Heutige wurde früher gebastelt und geprüft. Nicht alles ist erlernbar.

  4. #4
    Hier gibt es was :
    http://ornella.iwr.uni-heidelberg.de...Y/D/index.html

    Könnte genau das sein was Du suchst

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2011
    Ort
    Hannover
    Beiträge
    162
    Moin µcFlo,
    Zitat Zitat von µcFlo Beitrag anzeigen
    Hi,
    ...
    Der Freund hatte die Idee, dass man den Robo ein Koordinatensystem anlegen lassen soll. Doch dies ist führ zwei absolute C anfänger sehr schwer, auserdem kann der Robo keine Strecken messen und der Speicher ist nicht groß genug.
    ...
    Ein Koordinatensystem ist für ein Labyrinth zu viel. I.Allg. braucht man das nicht, weil Du nur den Zusammenhang zwischen zwei Punkten im Labyrinth brauchst; also z.B. von Kruezung 12 geht's zu Kreuzung 14 und Kreuzung 23, etc. Such mal mit der Suchmaschine Deines Vertrauens (meine ist nicht google ) nach "Backtracking" oder "Tiefensuche".

    viele Grüße
    Andreas
    #define true ('/'/'/')
    #define false ('-'-'-')

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    25.12.2011
    Ort
    Deutschland BadenWürttemberg
    Beiträge
    43
    Danke an alle die geantwortet haben, ich werde mir die verschieden Tipps mal zu Gemüte führen.


    Danke

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    18.10.2011
    Beiträge
    65
    Du kannst einen rekursiven Labyrinthalgorithmus verwenden, der ist relativ leicht zu implementieren, sofern du weisst wie Rekursion funktioniert. Da du sagst dass du dich in C wenig auskennst, nehme ich an dass du auch nicht weisst wie man Rekursionen verwenden kann. Also informiere dich vielleicht erstmal was Rekursion bedeutet und wo/wie man es einsetzt.
    Kurz zur Erklärung: Die Idee ist es das Labyrinth als Spielfeld(2D-Array) anzulegen und alle möglichen Wege(Nord/Süd/Ost/West) durchzulaufen und auf jedem Feld eine Markierung(im 2D-Array) zu hinterlassen, das solange bis du dein gewünschtes Ziel erreicht hast.
    Allerdings weiss ich nicht ob Rekursionen auf deinem µC erlaubt/möglich sind und ob der Speicherplatz dafür reicht. Sollte das nicht der Fall sein könntest du z.B.: alle Berechnungen auf einem PC durchführen lassen und beide über eine Schnittstelle(WLAN, etc.) kommunizieren lassen.
    Hier noch ein Link der dir vielleicht hilft: http://www.cs.bu.edu/teaching/alg/maze/

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    25.07.2012
    Beiträge
    7
    Hi,

    Ich will den ASURO mithilfe der Taster durch ein einfaches Labyrinth führen. Dazu will ich ihn so programmieren, dass er zunächst immer gerade aus fährt bis er gegen eine Wand fährt und die Taster gedrückt werden. Anschließend soll er dann ein kleines Stück rückwärts fahren und sich um 90 grad in die eine Richtung drehen. Stößt er dann nicht erneut gegen eine Wand soll er gerade aus weiterfahren; andernfalls soll er sich wieder um 180 grad zurück drehen und seine fahrt fortsetzen. Da ich aber im Programmieren ein Anfänger bin, fällt mir das sehr schwer. Kann mir jemand von euch vielleicht einen grundsätzlichen Ansatz für diese Problematik nennen. Mir geht es dabei weniger um die exakte Drehung um 90 grad, sondern vielmehr um die Umsetzung dieses Algorithmus programmtechnisch

    Liebe Grüße Philipp

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    18.10.2011
    Beiträge
    65
    Hallo,

    kenne mich leider nicht mit dem ASURO aus aber ein einfacher algorithmischer Ansatz in Pseudocode könnte etwa so aussehen:

    Code:
    Fahren(vorwärts, 999); //fahre vorwärts für 999 sekunden
    while(1){  //tue das unendlich (bzw hier könnte die Bedingung reinkommen wann er das Zeil erreicht hat)
       if(Taster == 1){ //Wand entdeckt!
         Fahren(rückwärts,1); //fahre rückwärts für 1 sekunde
         Drehen(90); //90° drehung
         Fahren(vorwärts, 1); //fahre vorwärts für 1 sekunde (um zu prüfen ob noch eine wand da ist)
         if(Taster == 1){ //2. wand entdeckt! -> umdrehen
           Fahren(rückwärts,1);
           Drehen(180); 
           Fahren(vorwärts, 999);
         }
       }
    }
    Was für einen Sensor zum entdecken der Wand benutzt du genau, ich nehme an sowas in der Art ?

  10. #10
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    51
    Beiträge
    5.652
    Blog-Einträge
    8
    Hallo

    Das return() befindet sich innerhalb der deshalb nicht mehr endlosen while-Schleife:
    Code:
    #include "asuro.h"
    
    int grad=0;
    
    int main(void)
    {
    
    	Init();
    	while(1)
    	{
    
    		if(PollSwitch()==0)
    		{
    			MotorDir(FWD,FWD);
    			MotorSpeed(100,100);
    		}
    		else if(PollSwitch()!=0)
    			{
    				if(grad==0)
    				{
    					MotorDir(FWD,FWD);
    					MotorSpeed(100,0);
    					Msleep(200);
    					grad = 1 ;
    				}
    			}
    			else if(PollSwitch()!=0 && grad==1)
    				{
    					if(grad==1)
    					{
    						MotorDir(FWD,FWD);
    						MotorSpeed(0,100);
    						Msleep(400);
    						grad = 0 ;
    					}
    				}
    
    		return 0;
    	}
    }
    Ich würde es vielleicht so formulieren:
    Code:
    #include "asuro.h"
    
    int grad=0;
    
    int main(void)
    {
    	Init();
    	while(1)
    	{
    		if(PollSwitch()==0)
    		{
    			StatusLED(GREEN);
    			MotorSpeed(100,100);
    		}
    		else
    		{
    			if(grad==0)
    			{
    				StatusLED(RED);
    				MotorSpeed(100,0);
    				Msleep(200);
    				grad = 1;
    			}
    			else
    			{
    				StatusLED(YELLOW);
    				MotorSpeed(0,100);
    				Msleep(400);
    				grad = 0;
    			}
    		}
    	}
    	return 0;
    }
    (ungetestet)

    Der Ansatz erscheint mir etwas zu einfach.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •