Das Brot und der Stecker im dritten Bild sind deutlich zu erkennen, der Rest leider nicht!
Gruß, Peter (Ronny10)
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:
Bild hier Bild hier Bild hier
Bild hier
Video2
Für eine Qualifikation bei Wettbewerben dürfte das ja noch nicht reichen, aber es ist mal ein Anfang.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; }
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Das Brot und der Stecker im dritten Bild sind deutlich zu erkennen, der Rest leider nicht!
Gruß, Peter (Ronny10)
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.
Bild hier
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo
Ohne IR-Messung mit selbstgemalten Linien sieht es nun so aus:
Bild hier Bild hier
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...
Gruß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; }
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo,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.Zitat von radbruch
Bild hier
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?)
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.... Für eine Qualifikation bei Wettbewerben dürfte das ja noch nicht reichen, aber es ist mal ein Anfang. ...
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ß ...
Rückwartsfahren ist in sehr engen Kurven nötig, jedoch ist dies Bild hier mit ca. 15cm Radius die engste Kurve bei der Robotchallenge (siehe auch Plattenverzeichnis).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; } ...
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 ...![]()
Hallo
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.Im linken Deiner beiden animated .gif's scheint ein Stück zu fehlen
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
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
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
Hallo Waste,
deshalb auch das hardwaremäßige AufrüstenZitat von waste
Im Prinzip ja, aber ...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?
... 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 ...
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
Hallo Hermann,
ich hab's an deine Sensoren angepasst, sollte eigentlich so laufen. Probier es mal aus.
Gruß Waste
Lesezeichen