- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 9 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 81

Thema: SUMO ASURO ... eine Beschäftigung für Weihnachten

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    Anzeige

    Praxistest und DIY Projekte
    Wie gut das ganze funktioniert sieht man hier .

    @damaltor: was macht eigentlich die Bilderekennung in OpenCV für Linux. Wolltest Du nicht das Programm nach Linux portieren?

  2. #12
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    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.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    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.

  4. #14
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    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!

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    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

  6. #16
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    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!

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    Hallo radbruch,

    wie gehts dem ASURO Motortreiber? Laufen die Motoren schon wieder?

    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
    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.
    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;
    }
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken frontled2asuros_klein.jpg  

  8. #18
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    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):
    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;
    }
    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:
    	//-------- 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
    (aus Init() in asuro.c ab ca. 2.5)

    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.

    wie gehts dem ASURO Motortreiber? Laufen die Motoren schon wieder?
    Er ist leider immer noch "krank", ich hatte noch keine Zeit danach zu schauen.

    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!

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    Er ist leider immer noch "krank", ich hatte noch keine Zeit danach zu schauen.
    Oh, sehr schade, der arme ASURO. [-o< Und das an Weihnachten.

    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

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    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?

Seite 2 von 9 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress