-         

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

Thema: Linienfolger mit IR-Rechtsabbieger (1.Versuch)

  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8

    Linienfolger mit IR-Rechtsabbieger (1.Versuch)

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo

    Fast auf den Tag genau bin ich nun seit zwei Monaten stolzer Besitzer eines asuros. Ich bin immer noch von ihm begeistert, viel Spass und Funktion für wenig Geld.

    Hier möchte ich euch mal meinen ersten (ernsthaften) Versuch eines Linienfolgers präsentieren, kombiniert mit einem einfachen Rechtabbieger auf Basis meiner IR-Minimallösung . Der Umbau beschränkt sich auf eine Variante des Dickmann-Reflektors und eine Abschirmung der Liniensensoren:




    Video2

    Code:
    /* asuro folgt einer Linie (graue Fuge zwischen hellen Fliesen) mit IR-Rechtabbieger
       24.2.2007
       mic
       
       Die "Linie" darf nicht zu dick sein, denn der asuro versucht
    	die Linie zwischen den Sensoren zu behalten.
    
    	Beim Start sollte der asuro genau auf der Linie stehen.
    
    	Wenn er sich "verirrt" hat und die StatusLED gelb leuchtet,
    	sollte man ihn leicht nach links versetzt neben die Linie stellen.
    */
    
    #include "../inc/ir-asuro.h"  // eine Lib mit IR-Erweiterung ab ca. Ver. 2.1
    #include "../inc/ir-asuro.c"
    
    unsigned int data[2]; // Speicher fuer die Line-Daten
    
    int main(void) {
    
    Init();
    StatusLED(RED); Msleep(1000); StatusLED(GREEN); // kurze Startverzoegerung
    FrontLED(ON);
    MotorDir(FWD,FWD);
    
       // IR-Abstandsmessung nach waste
       DDRD |= (1 << DDD1);   // Port D1 als Ausgang
       PORTD &= ~(1 << PD1);   // PD1 auf LOW
       OCR2  = 0x90; // maximaler Abstand
    
    do{ // Hauptschleife
    if (PIND & (1 << PD0)) { // Echo pruefen
    	StatusLED(GREEN); // keine Echo = freie Fahrt
    	LineData(data); // Liniensensoren einlesen
    	MotorSpeed(data[0]*4, data[1]*4); // Faktor bestimmt die Geschwindigkeit (Minimalregelung)
    	//MotorSpeed(255-data[0], 255-data[1]);
    	if (data[0] > data[1]) BackLED(ON,OFF); else BackLED(OFF,ON); // Showeffekt
    } else {
    	StatusLED(RED); // Hindernis erkannt
    	MotorSpeed(100,100); // zurückstossen bis kein Echo
    	MotorDir(RWD,RWD);
    	while (!(PIND & (1 << PD0))); // warten bis kein Echo
    	Msleep(150); // und noch ein bisschen zurueck
    	MotorDir(FWD,RWD);
    	Msleep(600); // zeitgesteuert 38,231 Grad nach rechts drehen
    	MotorDir(BREAK,BREAK);
    	MotorSpeed(200,200); // weitersteppen bis zur naechsten Linie
    	StatusLED(YELLOW);
    	do {
    		MotorDir(FWD,RWD); Sleep(127); // mit Puls zu Pause-Verhaeltniss moeglichst langsam schleichen
    		MotorDir(BREAK,BREAK); Sleep(255);
    		LineData(data);
    	} while (!(data[0]-10 >  data[1])); // rechter Sensor deutlich dunkler als Linker
    	MotorDir(FWD,FWD); // d.h. Linie erreicht
    	MotorSpeed(0,0); // weiter mit Linienfolgen
    }
    
    } while (1);  // Ende Hauptschleife, ausfuehren bis der Akku leer ist
    return 0;
    }
    Für eine Qualifikation bei Wettbewerben dürfte das ja noch nicht reichen, aber es ist mal ein Anfang.

    Gruß

    mic
    Angehängte Dateien Angehängte Dateien

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

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    23.05.2006
    Beiträge
    62
    Das Brot und der Stecker im dritten Bild sind deutlich zu erkennen, der Rest leider nicht!

    Gruß, Peter (Ronny10)

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Stimmt. Mit der Kameratechnik stehe ich auf dem Kriegsfuß. Aber eigentlich gibt's ja nicht wirklich was zu sehen. Der Reflektor sollte über der IR-Senderdiode und über dem Empfänger sein, die Sendediode muss abgeschirmt werden (btw: ich habe jetzt ein Stück Schrumpfschlauch zwischen Diode und Empfänger unter dem Empfänger eingeklemmt um den "optischen Kurzschluss" zwischen den beiden über die Platine zu verhindern). Die Liniensensoren sind mit einem Papier umwickelt das mit Klebeband fixiert ist. That's all.


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

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Ohne IR-Messung mit selbstgemalten Linien sieht es nun so aus:



    Allerdings klappt es mit den "Weichen" noch nicht so recht:

    Video3 Video4

    Das Problem ist das permanente aktuallisieren der Min/Max-Linienwerte. Das muss ich noch mal überdenken...

    Code:
    #include "../inc/asuro.h"
    #include "../inc/asuro.c"
    
    #define schwelle 15
    #define power 175
    
    unsigned char pow_l, pow_r, dir_l, dir_r;
    unsigned int data[2], suchen;
    unsigned int h_l, h_r, d_l, d_r;
    
    int main(void) {
    
    Init();
    FrontLED(ON);
    dir_l=dir_r=FWD;
    pow_l=pow_r=power;
    d_l=d_r=0;
    h_l=h_r=1023;
    MotorDir(dir_l,dir_r);
    MotorSpeed(pow_l,pow_r);
    suchen=0;
    
    do{
    LineData(data);
    BackLED(OFF,OFF);
    if ((data[0]-schwelle < d_l) && (data[1]-schwelle < d_r)) {
    	dir_l=dir_r=FWD;
    	pow_l=255-data[0];
    	pow_r=255-data[1];
    	suchen=0;
    	StatusLED(GREEN);
    	BackLED(ON,ON);
    } else {
    	if (data[1]-schwelle > data[0]) {
    		pow_l=0;
    		pow_r=power;
    		d_l=(d_l+data[0])/2;
    		h_r=(h_r+data[1])/2;
    		suchen=1;
    		StatusLED(YELLOW);
    		BackLED(OFF,ON);
    	}
    	if (data[0]-schwelle > data[1]) {
    		pow_l=power;
    		pow_r=0;
    		h_l=(h_l+data[0])/2;
    		d_r=(d_r+data[1])/2;
    		suchen=1;
    		StatusLED(YELLOW);
    		BackLED(ON,OFF);
    	}
    	if (suchen==1) {
    		if ((h_l-schwelle < data[0]) && (h_r-schwelle < data[1])) {
    		   StatusLED(RED);
    	   	if (pow_l==0) { dir_l=RWD; pow_l=power; }
    	   	if (pow_r==0) { dir_r=RWD; pow_r=power; }
    		}
    		suchen=2;
    	}
    	
    }
    
    MotorDir(dir_l,dir_r);
    MotorSpeed(pow_l,pow_r);
    
    }while (1);
    return 0;
    }
    Gruß

    mic
    Angehängte Dateien Angehängte Dateien

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

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.12.2006
    Ort
    Eberbach
    Beiträge
    199
    Hallo,
    Zitat Zitat von radbruch
    Hallo

    Ohne IR-Messung mit selbstgemalten Linien sieht es nun so aus:

    aus dem posting weiter oben entnehme ich die Kombination von Lininfolger und IR-Ausweicher. Dies ist notwendig, um im Wettbewerb Slalom enhanced der Linie zu folgen, und dem Ziegelstein auf der Strecke auszuweichen.

    Mehr Informationen zur RobotChallenge (in Wien, Ende März!) findest Du hier:
    http://www.stamm-wilbrandt.de/RobotChallenge

    Hast du vor, in Wien dabei zu sein? (Thread RobotChallenge Ende März in Wien - andere Asuros am Start?)

    ... Für eine Qualifikation bei Wettbewerben dürfte das ja noch nicht reichen, aber es ist mal ein Anfang. ...
    Im linken Deiner beiden animated .gif's scheint ein Stück zu fehlen (wenn der Asuro links unten ist springt der Film). Im rechten braucht der Asuro ca. 9s für geschätzte 20+15+20+15=70cm, fährt also mit ca. 8cm/s.

    Die Qualifikation bei der RobotChallenge für Slalom enhanced schaffte man letztes Jahr mit 23.8cm/s, allerdings hat sich die Siegergeschwindigkeit gegenüber 2005 fast verdoppelt (71.4cm/s versus 39.5cm/s), sodaß man wahrscheinlich dieses Jahr fast 40cm/s in der Qualifikation bringen muß ...

    Code:
    ...
    	if (suchen==1) {
    		if ((h_l-schwelle < data[0]) && (h_r-schwelle < data[1])) {
    		   StatusLED(RED);
    	   	if (pow_l==0) { dir_l=RWD; pow_l=power; }
    	   	if (pow_r==0) { dir_r=RWD; pow_r=power; }
    		}
    		suchen=2;
    	}
    ...
    Rückwartsfahren ist in sehr engen Kurven nötig, jedoch ist dies mit ca. 15cm Radius die engste Kurve bei der Robotchallenge (siehe auch Plattenverzeichnis).
    Bei mindestens 15cm Radius würde ich aber empfehlen never drive back (kein RWD, besser BREAK), und (zumindest mit einem Standard-Asuro, d.h. <50cm/s) vor allem always drive full speed, entweder auf einem oder auf beiden Rädern ...
    (siehe auch den Beitrag über einen Infrarot-Linksausweicher)

    Ich habe mit meinem Asuro (myIrAsuro) in Wien gemeldet und den rechten Testparcours, der dem Qualifying 2006 entspricht, in 12s (29.75cm/s) geschafft, wäre also gerade für beide Linienfolge-Wettbewerbe 2006 qualifiziert gewesen -- das wird dieses Jahr aber wohl nicht (mehr) reichen (s.o.).
    Deshalb bin ich gerade dabei, meinen Asuro hardwaremäßig aufzurüsten, damit er weiter vorne mitfahren kann ...

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Im linken Deiner beiden animated .gif's scheint ein Stück zu fehlen
    Ich weis, aber es war schon spät und es sollte auch nur ein "Vorkucker" sein. Im AVI-Film mit mehreren Runden sieht man die Fahrt ohne Schnitt. Im Gif stimmt auch die Zeit nicht, es ist langsamer als real. Die MotorPower (Speed halte ich hier für den falschen Begriff) war bei 175 weil ich den engen "Kurs" noch nicht schneller schaffe. Aber auf einem Blatt ist es praktischer, man braucht ihm nicht immer nachzurennen. Auch das Rückwärtsfahren macht er nur, wenn's zu eng wird.

    Die IR-Funktion dachte ich eigentlich als Notbremse, wenn er mir auf den Fliesen mal abhaut, den Wettbewerb hatte ich eigentlich nicht im Sinn dabei. Soweit ich weis ist die Strichstärke beim Wettbewerb auch 1,5 cm, mein Strich ist deutlich dünner. Denn Parkur in Orginalgröße muss ich mir erst "genehmigen" lassen. Vorerst mache ich noch ein paar Tests mit verschiedenen Streckenführungen und Linienbreiten. Ich hätte nicht gedacht, dass Linienfolgen so viel Spass macht.

    Nach Wien werde ich sicher nicht fahren, weil ich 1. noch zu sehr Newbee bin und mir 2. schlicht die Kohle fehlt.

    Gruß

    mic

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

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo Hermann,

    da ist auf jeden Fall noch ein Tuning für den Asuro notwendig, wenn die letztes Jahr schon 71cm/s schnell waren. Das erreicht ein Standard-Asuro nicht einmal auf der Geraden.

    Mich würde mal interessieren wie schnell mein Linienfolger ist. Falls dein Asuro noch mit den originalen Liniensensoren ausgerüstet ist, könntest du mal mein Programm laden und auf dem Testparcour laufen lassen? Die hex-Datei ist angehängt.

    Gruß
    Waste
    Angehängte Dateien Angehängte Dateien

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.12.2006
    Ort
    Eberbach
    Beiträge
    199
    Hallo Waste,
    Zitat Zitat von waste
    Hallo Hermann,

    da ist auf jeden Fall noch ein Tuning für den Asuro notwendig, wenn die letztes Jahr schon 71cm/s schnell waren. Das erreicht ein Standard-Asuro nicht einmal auf der Geraden.
    deshalb auch das hardwaremäßige Aufrüsten

    Mich würde mal interessieren wie schnell mein Linienfolger ist. Falls dein Asuro noch mit den originalen Liniensensoren ausgerüstet ist, könntest du mal mein Programm laden und auf dem Testparcour laufen lassen?
    Im Prinzip ja, aber ...
    ... ich habe eben kein Standard-Liniensensor-Setup mehr (siehe folgenden Beitrag im Thread "Asuro tiefergelegt").
    Wenn ich mich recht erinnere, dann ist für Deinen PD(PID?)-Regler der Wertebereich der Liniensensoren wichtig -- dieser ist bei mir von vormals ca. 80 je Sensor auf über 300 je Sensor angestiegen ...
    Auch der Asuro meines Sohnes ist keine Alternative, da er wegen US-Erweiterung im Moment keine Liniensensoren mehr drin hat.
    Ich muß mal schaun, ob ich für seinen Asuro die Sensoren über eine kleine Platine von oben so auf seinen Asuro steckbar machen kann, daß sie ungefähr in derselben Höhe und demselben Abstand wie bei einem Standard-Asuro liegen; wenn ja, könnte ich den Test damit durchführen ...

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Gut, ich könnte mein Programm auf deine Sensoren anpassen. Allerdings kann ich es nicht testen, ob es richtig läuft. Schnell vergisst man ja irgendwas.

    Gruß Waste

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo Hermann,

    ich hab's an deine Sensoren angepasst, sollte eigentlich so laufen. Probier es mal aus.

    Gruß Waste
    Angehängte Dateien Angehängte Dateien

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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