- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: Asuro und Labyrinthe aus Linien - machbar?

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    08.05.2005
    Ort
    München
    Alter
    52
    Beiträge
    59

    Ein kleines Video als beweis, das es möglich ist.

    Anzeige

    E-Bike
    Hallo,

    habe ein paar Tage darüber nachgedacht und 3 Abende lang programmiert [-o< .

    Dabei ist dieses Video herausgekommen.

    Ein bisschen Doku finet Ihr auch auf meiner Webseite

    Martin

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2005
    Alter
    71
    Beiträge
    157
    Hallo MSSputnik,

    elegante Lösung!

    Wie erkennst du eine Kreuzung? Beide Fototransistoren dunkel? Könntest du bitte diesen Teil deines Programms posten?

    Vielen Dank Red Baron

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    08.05.2005
    Ort
    München
    Alter
    52
    Beiträge
    59
    Hallo,

    hier ist meine Funktion, die die Regelung und auch das Kreuzungserkennen erledigt.

    Prinzipiell erkenne ich eine Kreuzung daran, das beide LEDs dunkel werden. Eine beendete Line erkenne ich daran das beide LEDs hell werden.


    Code:
    /* Schwellwerte für die Linienerkennung
     * Achtung stark Lichtabhängig.
     */
    #define LIGHT_HIGH_MID 0x55
    #define LIGHT_MID_LOW  0x28
    
    char golinie(int left, int right, unsigned char settings, int speeddif) {
    	unsigned char status=0;
    	int fehler=0;
    	unsigned int speedleft;
    	unsigned int speedright;
    	if (autoencode 	!= ADC_RUN) RunADC(ADC_RUN);		
    	encoder[ODLEFT] = 0;
    	encoder[ODRIGHT] = 0;
    	MotorDir(left>0?FWD:RWD,right>0?FWD:RWD);
    	while (run && (!gotSwitch || !(settings&RETURN_ON_SWITCH)) && encoder[ODLEFT] < abs(left) && encoder[ODRIGHT] < abs(right) && status != GREEN && (status!= RED || !(settings&GO_STOP_ON_CROSS))) {
    		if (count72kHz > 18) {  // regelung in definierten Zeitabschnitten ausführen !!! Sleep in dieser Schleife verboten!!!
    			count72kHz = 0;
    			fehler = line[0] - line[1];
    			fehler *= LKP;
    			speedleft = BASESPEEDLEFT+speeddif+fehler;
    			speedright = BASESPEEDRIGHT+speeddif-fehler;
    			if (speedleft > 255) speedleft = 255;
    			if (speedleft < 65) speedleft = 65;
    			if (speedright > 255) speedright = 255;
    			if (speedright < 65) speedright = 65;
    			MotorSpeed(speedleft,speedright);
    			status = 0;
    			if (line[ODLEFT] < LIGHT_MID_LOW && line[ODRIGHT] < LIGHT_MID_LOW)
    				status = RED;
    			if (line[ODLEFT] > LIGHT_HIGH_MID && line[ODRIGHT] > LIGHT_HIGH_MID)
    				status = GREEN;
    			if (line[ODLEFT] >= LIGHT_MID_LOW && line[ODRIGHT] >= LIGHT_MID_LOW && line[ODLEFT] <= LIGHT_HIGH_MID && line[ODRIGHT] <= LIGHT_HIGH_MID)
    				status = YELLOW;
    			StatusLED(status);
    		}
    	}
    	if (settings & GO_STOP) MotorSpeed(0,0);
    	if (!run) return STOP_RUN;
    	if (gotSwitch && (settings&RETURN_ON_SWITCH)) return STOP_SWITCH;
    	if (status == GREEN) return LINE_LOST;
    	if (status== RED && (settings&GO_STOP_ON_CROSS)) return LINE_CROSS; 
    	return GO_SUCCESS;
    }
    Hoffe das hilft.

    Martin

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2005
    Alter
    71
    Beiträge
    157
    Hi,

    vielen Dank. Du (bzw. dein ASURO) erkennst eine Kreuzung bzw. ein Ende schon durch eine einzelne Messung. Ich habe irgendann einmal etwas ähnliches probiert (Linienende). Habe aber damals Mittelwerte über die Helligkeit gebildet und Mehrfachmessungen zum Erkennen einen Linienendes gemacht. War wohl ein bisschen kompliziert ...

    Gruß Red Baron

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2005
    Beiträge
    20
    @Martin: ich muß mir das Video erst anschaun (Player..), aber Gratulation, daß es funktioniert.

    Leider war ich jetzt ziemlich im Diplomstreß, aber die Woche geht sich wieder ein Programmiernachmittag aus.

    lg Melitta

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2005
    Beiträge
    20
    Hm - Linienfolge, Kreuzung erkennen und Ziel erkennen funktionieren.
    Aber ich steh grad ganz arg auf der Leitung - wie hast du die Kreuzungsliniensuche realisiert, also das Drehen zb. um maximal 50 Grad und gleichzeitiges Liniensuchen? Bitte um gedankliche Trittleiter.

    Danke, lg Melitta

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    08.05.2005
    Ort
    München
    Alter
    52
    Beiträge
    59
    Hallo,

    ich versuche es mal zu erklären und gehe von 2 vorasusetzungen aus: Sollte das nicht der Fall sein, einfach die Punkte überspringen, die nicht zutreffen.
    1. Du verwendest die originalen asuro libraries
    2. Du hast sonst keine erweiterten selber geschrieben

    Zuerst habe ich die erweiterten Asuro Libraries verwendet bzw. z.T. auch selber geschrieben um ein paar anpassungen zu machen. Wenn du diese Libraries verwendest, kannst du den Zustand der Odometrie Zähler und der Linienverfolgung gleichzeitig abrufen. Zu finden sind die Libraries auf Sourceforge oder hier im Forum.

    Dann habe ich mir 3 Funktionen geschrieben, die die Programmierung total vereinfacht haben (War bei mir ein aHa Erlebnis \/ )

    1. Fahre eine Linie. Dabei werden nur die Liniensenoren benutzt. (Habe ich oben glaube ich gepostet.)
    2. Fahre nach Vorgabe. Dabei werden nur die Odometriezähler benutzt.
    3. Suche Linie. Dabei werden die Odometriezähler benutzt um eine vorgegebene Bewegung (Geradeaus oder Kurve oder eben drehen) durchzuführen. Dabei werden aber gleichzeitig die Liniensenoren abegfragt und eben wie in der obigen Funktion Fahre Linie ausgewertet.

    Aufgrund der Rückgabewerde der Funktionen kann ich erkennen, was passiert ist und dann entsprechend darauf reagieren.

    Was ich auch noch gemacht habe ist natürlich beim Drehen nach Links. Ich drehe mich erst um 45° ohne auf eine Linie zu achten und dann um weitere 50° wo ich wieder auf die Linie achte. Ansonsten würde ich mich nicht drehen, wenn die Linie geradeaus weiter geht.

    Ich hoffe, das hilft.

    Martin

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    08.05.2005
    Ort
    München
    Alter
    52
    Beiträge
    59
    @RedBaron

    Das mit der Erkennung einer Linie auf das erste mal und nicht so wie du das gemacht hat hat natürlich den Vorteil, das es einfach ist. Hat aber auch den Nachteil, das es schon bei einer Falschmessung zu einem Fehler kommt.

    Kannst auch im Video beobachten. Wenn der Asuro ganz Links auf dem Strich ist, macht er einmal den Fehler das er sich zu früh zurück dreht und damit den linken Teil zwiemal durchsucht.

    Ausserdem habe ich festgestellt, das die Linienerkennung natürlich sehr stark vom Umgebungslicht abhängt. Es hat erst mal gar nix funktioniert als ich für das Video mehr Lampen aufgestellt habe um es heller zu machen. Da mußte ich dann erst die Linienerkennung neu Kalibrieren, was bei mir nicht automatisch geschieht.

    Martin

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2005
    Beiträge
    20
    @Martin: ja, danke das alles hilft mir sehr. Ich hab mir gestern noch gedacht, daß es eigentlich fast nur mit Hilfe der Odometrie gehen kann, codetechnisch ist mir dann aber nichts mehr Produktives eingefallen. Wenn du sagst, du hast gepimpte Libraries verwendet, die einen Odometrie und Linienmessung gleichzeitig kontrollieren lassen, dann werde ich mir die mal heraussuchen.
    Eine Frage hab ich aber noch: hast du deine Odometrieeinheit geschirmt? Das war am Video nicht wirklich zu erkennen
    Nach den Erfahrungen, die ich mit den Photosensoren gemacht habe, ist das Umgebungslicht ein arger Störfaktor...

    Danke, lg Melitta

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    08.05.2005
    Ort
    München
    Alter
    52
    Beiträge
    59
    Hallo,

    ich habe meine Odometrie Sensorik so wie Arexx sie schuf

    aber ich habe die Schwellwerte deutlich anders gewählt als sie in den dortigen Funktionen angegeben sind.
    Vorallem gibt es bei mir einen Unterschied zwischen Links und Rechts.
    Irgendwo habe ich das schon mal gepostet (glaube ich). Ich werde es heute abend mal hier einstellen wie ich es realisiert habe (meine komplette ADC Funktion).

    Ich habe allerdings meine Linieneinheit abgeschirmt. Ich habe einen Kartonstreifen genommen und den um alle 3 LED/Transitoren gewickelt. Damit erhalte ich eine bessere Ausleuchtung und eine Abschirmung vom Umgebungslicht.
    Werde heute abend davon auch noch ein Bild einstellen.

    Martin

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress