jaa.. das wollte ich mal probieren. aber im moment habe ich kaum zeit, auch mein asuro der eine art eval board bekommen soll, liegt schon seit wochen zerlegt im schrank.aber deoin programm gefällt mir, die idee mit dem tiefpass ist toll.
jaa.. das wollte ich mal probieren. aber im moment habe ich kaum zeit, auch mein asuro der eine art eval board bekommen soll, liegt schon seit wochen zerlegt im schrank.aber deoin programm gefällt mir, die idee mit dem tiefpass ist toll.
Bei mir war die Erfahrung, was Projekte angeht, folgende: Alle Projekte immer auf einen funktiionsfähigen Stand bringen, das kostet zwar etwas Anstrengung, vor allen Dingen gegen Ende. Das Leben eines Entwicklers ist nun einmal hart, und zu einem erfolgreichen Projekt gehören nun mal 2 Dinge: Der Spass an der Idee und die Anstrengung und der Schweiß, etwas zu Ende zu bringen. Belohnt wird das ganze mit der Zahl der Projekte auf die man stolz sein kann.
Aber wieder zurück zum SUMO:
Gerade eben habe ich noch eine erweiterte, schwierigere Variante auf Youtube gefunden .
In der Mitte des Feldes wird ein Gegenstand aufgestellt, den die Roboter nicht umwerfen sollten. Dadurch wird die Aufgabe erschwert, wel die Roboter nicht mehr einfach so auf alles zufahren dürfen.
Hallo
Scheint ja prima zu funktionieren. Wenn wir allerdings alle die selben Programme flashen, dürfte es wohl ein Patt geben. Bitte nicht falsch verstehen, ich bin natürlich für OpenSource und finde es prima, wenn ihr Codes für grundsätzliche Lösungen postet. Aber wir sollten auch Alternativen anbieten.
Könnte man das Spielfeld nicht sechseckig machen? Das wäre sehr viel leichter zu konstruieren und zu kleben. Wer's nimmer weiß: Beim Sechseck sind die Seiten so lang wie der Radius des Umkreises...
Bild hier
(Quelle: wikipedia)
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 Radbruch,
die ganze Zeit überlege ich schon, ob ein 6-Eck einen Vorteil gegenüber einem 8-Eck hat. Das Bild in meinem ersten Post zeigt das 8-Eck, welches ich für meine Versuche auf zusammengeklebte Din A4-Plätter konstruiert habe. Es war relativ einfach zu erstellen, 4 Seiten sind parallel zur Unterlage und ich habe keinen großen Circel gebraucht.
Eventuell hätte eine kreissymmetrische Spielfläche einen Vorteil, weil dann der Roboter den Mittelpunkt vielleicht besser finden kann.
Gruß,
robo
Hallo robo
Nachdem ich mir nun auf zwei A3-Blättern ein sechseckiges Spielfeld zusammengeklebt habe, bin ich mir auch nicht mehr sicher, ob es wirklich bedeutend einfacher als ein Achteck ist. Klassisch konstruiert mit Schnur und Stift ist es zwar schnell, aber beim Kleben der schwarzen Streifen habe ich dann festgestellt, dass man sich dabei auch gut an den Blatträndern orientieren kann und deshalb dürfte ein Achteck auch einfach zu kleben sein.
Vielleicht könnte mein asuro bei meinem Spielfeld die Mitte leichter finden, weil die Winkel der Klebestreifen größer sind und man sie deshalb leichter finden könnte als beim Achteck. Aber ob das für die gestellte Aufgabe (suche den Becher und schiebe ihn raus) einen Vorteil bringt, wage ich zu bezweifeln.
Dein Linienerkennungsprogramm läuft mit meinem asuro auch sehr gut. Da ich aber als FrontLED eine IR-LED aus einer alten Fernbedienung eingebaut habe, musste ich den Wert für Limit auf 200 erhöhen und wegen meiner kürzeren Endübersetzung die Geschwindigkeit etwas anpassen. Blöderweise läuft grad mein linker Motor nicht zurück, ich muss also leider erstmal den Fehler suchen bevor ich mich richtig draufstürzen kann.
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 radbruch,
wie gehts dem ASURO Motortreiber? Laufen die Motoren schon wieder?
Den Programmcode habe ich extra auf die Verhältnisse des Standard des Originalasuro angepasst. In einem meiner zwei ASUROs ist eine 24000mcd superhelle rote LED eingebaut. Dort muss der Wert auch auf 200 erhöht werden. Die Grenzlinienerkennung wird dadurch natürlich um noch einiges stabiler.Dein Linienerkennungsprogramm läuft mit meinem asuro auch sehr gut. Da ich aber als FrontLED eine IR-LED aus einer alten Fernbedienung eingebaut habe, musste ich den Wert für Limit auf 200
Vielleicht hat die ultrahelle, roten LED einen Vorteil weil man sehen kann, ob sie eingeschaltet sind und das Infrortliche eventuell den IR-Empfänger für die Abstandmessung stören könnte.
Im Moment beschäftige ich mich ein wenig mit der Zielfindung über den IR-Abstandsmesser. Gar nicht so einfach.
Ich habe eine kleine Funktion geschrieben, mit der grob der Abstand ermittelt werden kann, in dem die Pulsweite durchge"sweept" wird.
Waste hat das schon mal gemacht ( glaube ich ) aber ich konnte es auf die schnelle nicht finden
Code:uint8_t abstand() { uint8_t k=FALSE,n; uint16_t j,z; for(n=1;n<10;n++) { OCR2 = 254-n; //OCR2=0xFE ( sehr nahe ) Msleep(2); z=0; for(j=0;j<1000;j++) if (PIND & (1 << PD0))z++; if (z>900) k=n; } if(k==9) k=FALSE; // Falls Abstand größer 10 Abstand=FALSE return k; }
Hallo robo.fr
Wie du ja weißt habe ich mit der IR-Abstandsmessung auch schon gespielt. Letztlich habe ich dann einen mit Folie beschichteten "Reflektor" gebastelt und ihn unter den Kabelbinder des Motors geklemmt:
Bild hier
Und noch ein Video dazu:
Bild hier
http://www.youtube.com/watch?v=6-5pah_oQUw
Ganz wichtig dabei ist ein lichtdichtes Irgendwas (Karton, Folie, aufgeschnittener Schrumpfschlauch...) zwischen den IR-Empfänger und die Platine zu klemmen und es seitlich hoch zwischen Empfänger und IR-LED zu biegen um "Kriechlicht" zu verhindern!
Der "Rüssel" auf der IR-LED besteht aus mehreren Lichtwellenleitern (ca. 1€/Meter) in einem Schrumpfschlauch und dient der Bündelung des Lichtstrahls. Es funktioniert aber auch ohne recht gut, aber nicht so scharfkantig.
Hier noch der Code MIT Kantensuchen (ich hoffe, er funktioniert noch):
Der asuro hält den vorgegebenen Abstand zum Blatt und richtet sich nach der linken Blattkante aus. Die IR-Echos werden gefiltert und erst nach einer festgelegten Anzahl von Echos/Nichtechos wird reagiert. Achtung, die verwendete asuro-Lib muss die IR-Erweiterung nach Waste enthalten und den Timer zur IR-Pulserzeugung folgendermaßen Initialisieren:Code:/* asuro haelt mittels IR-Messung vorgewaehlten Abstand zu einem Gegenstand und richtet sich dabei nach einer Kante aus. 14.2.2007 mic */ #include "asuro.h" // Version mit dutycycles und TOIE2 in Init() (ab ca. v2.5) unsigned char i, ir_bits, dist, dir_l, dir_r; // zaehler, bitzaehler, abstand, richtungen unsigned int bitspeicher, delay; // filter, rythmus int main(void) { Init(); MotorDir(FREE,FREE); // Stillstand vorbelegen MotorSpeed(150,150); // je mehr desto hektisch bitspeicher = 1; // 16 Bits Filter für IR-Echos dist=240; // Sollabstand (zw. 0x90 und ca.250, je groesser desto nah) delay=Gettime(); // Rythmus fuers Kantensuchen while (1) { // vor und zurueck DDRD |= (1 << DDD1); // IR-LED an PORTD &= ~(1 << PD1); OCR2 = dist; // gewuenschter Abstand bitspeicher = bitspeicher*2+(PIND & (1 << PD0)); ir_bits=0; // bei diesem Abstand soll auf 2 von 8 Nicht-Echos gefahren werden for (i=0; i<8; i++) if (bitspeicher & (1 << i)) ir_bits++; // letzte 8 Echos dir_l=dir_r=FREE; if (ir_bits > 4 ) dir_l = dir_r = FWD; // mehr als zweimal kein Echo = zu weit if (ir_bits < 2 ) dir_l = dir_r = RWD; // weniger als zwei Nicht-Echos = zu nah MotorDir(dir_l,dir_r); // Abstand korrigieren if (Gettime() >= delay) { // mehr als eine Sekunde seit dem letzen Suchen der Kante // nach links drehen bis kein Echo mehr kommt if ((dir_l) == (FWD)) { // bei Vorwaertsfahrt dir_l = FREE; dir_r = FWD; } else if ((dir_l) == (RWD)) { // bei Rueckwaertsfahrt dir_l = RWD; dir_r = FREE; } else { dir_l=FWD; dir_r=RWD; }; // im Stillstand MotorDir(dir_l,dir_r); //MotorDir(RWD,FWD); DDRD |= (1 << DDD1); // IR-LED an PORTD &= ~(1 << PD1); OCR2 = 0x90; // maximale Distanz do { bitspeicher = bitspeicher*2+(PIND & (1 << PD0)); // Bitspeicher fuellen ir_bits=0; for (i=0; i<16; i++) if (bitspeicher & (1 << i)) ir_bits++; } while (ir_bits < 15); // alle Bits gesetzt bedeutet keine Echo = Kante ueberfahren // rechts drehen und mit Soll-Distanz nach Echo suchen (sicherheitshalber mehrfach!) if ((dir_l) == (FREE)) { // abhaengig von verwendeter Methode zurückschwenken dir_l = FWD; dir_r = FREE; } else if ((dir_r) == (FREE)) { dir_l = FREE; dir_r = RWD; } else { dir_l=RWD; dir_r=FWD; }; MotorDir(dir_l,dir_r); //MotorDir(FWD,RWD); DDRD |= (1 << DDD1); // IR-LED an PORTD &= ~(1 << PD1); OCR2 = dist; // Messdistanz laden for (i=0; i<10; i++) { //mehrfach pruefen und gegebenfalls fahren um die Kante sicher zu finden bitspeicher=1; // alle Bits geloescht bedeutet volles Echo = Kante wiedergefunden do bitspeicher = bitspeicher*2+(PIND & (1 << PD0)); while (bitspeicher != 0); //for (bitspeicher=1; bitspeicher != 0; bitspeicher*2+(PIND & (1 << PD0))); } if (((dir_l) != (FREE)) && ((dir_r) != (FREE))) MotorDir(FREE,FREE); // anhalten oder durchstarten //MotorDir(FREE,FREE); delay=Gettime()+500; // einmal pro Sekunde die Kante suchen } } // endloss while(1); return 0; }
(aus Init() in asuro.c ab ca. 2.5)Code://-------- seriell interface programmed in boot routine and already running ------- // prepare 36kHz for IR - Communication TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20); OCR2 = 0x91; // duty cycle for 36kHz TIMSK |= (1 << TOIE2); // 36kHz counter for sleep
Wenn man OCR2 ändert, kann man nicht mehr per IR mit dem Terminal kommunizieren, weil die 36kHz-Trägerfrequenz nicht mehr stimmt. Zuvor muss man wieder den Defaultwert (OCR2 = 0x91) wieder laden.
Er ist leider immer noch "krank", ich hatte noch keine Zeit danach zu schauen.wie gehts dem ASURO Motortreiber? Laufen die Motoren schon wieder?
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!
Oh, sehr schade, der arme ASURO. [-o< Und das an Weihnachten.Er ist leider immer noch "krank", ich hatte noch keine Zeit danach zu schauen.![]()
Mittlerweile habe ich auch neue Versuche unternommen, den ASURO so zu programmieren, dass er einen Joghurtbecher besser finden kann.
Aber ich bin immer noch etwas neidisch auf das Video von waste ( ich nehme mal an, dass es von waste ist ). Der ASURO ruckelt da relativ wenig. Daher vermute ich, dass der ASURO eher 2 IR Sensoren verwendet. Aber leider sieht man das auf dem Video so schlecht.
Ich frage nicht einen richtigen Reglerentwurf für das Problem machen könnte. Dazu müsste man aber eine passende Struktur finden![]()
Nach doch etwas mehr Auwand als ursprünglich gedacht, spielen 2 ASUROs in der Sumo-Arena miteinander:![]()
http://www.youtube.com/v/LkEv21QNzsY
Was haltet Ihr davon?
Lesezeichen