- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Facharbeit: Bau eines Roboters

  1. #11
    Erfahrener Benutzer Roboter-Spezialist Avatar von steveLB
    Registriert seit
    24.10.2005
    Beiträge
    481
    Anzeige

    Praxistest und DIY Projekte
    der ct-bot verwendet auch ein adns-2610 , und dessen code in C kann man sich runterladen , dort drinn stehts wie sie es gemacht haben, das kannst dann für deine anwendung nutzen
    Gruß

  2. #12

    Re: Facharbeit: Bau eines Roboters

    Hi Max,

    sieht sehr schön aus. Da hast du echt Glück mit deinem Physiklehrer. Ich konnte nichts mit Robotern in meiner Physik-FA machen.

    Wie dem auch sei, auf Seite 16f. schreibst du, dass der Maussensor bis zu einer Geschwindigkeit von 30,xx cm/s arbeitet. Hast du das ausprobiert oder sind das nur die Werte aus dem Datenblatt?
    Wenn ja, würde mich interessieren, was passiert wenn die Geschwindigkeit höher ist. Ich wollte mal Maussensoren für einen RoboCup Soccerbot einsetzen. Da entstehen aber zwei Probleme. 1. der Roboter fährt bis zu 100 cm/s schnell. 2. Wir haben einen Omnidriveroboter. Da wir in alle Richtungen fahren können, funktioniert deine Lösung die Drehung über den Y-Wert zu bestimmen leider nicht.

    Hast du eine Idee wie, das mit zwei Maussensoren funktionieren könnte? Mein Ansatz war es, zwei nebeneinander zu befestigen, und eine Drehung dann über die Differenz der X-und Y-Werte zu bestimmen. Hat aber nicht geklappt (weil ich keine Formel aufstellen konnte).

    Nochmal Gratulation zu der sehr schönen Arbeit. (Nur Seitenzahlen und Inhaltsverzeichnis stimmen nicht überein. Siehe Maussensor...)

    Viele Grüße,
    unapiedra

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    02.02.2005
    Beiträge
    39

    Re: Facharbeit: Bau eines Roboters

    Zitat Zitat von jackalice
    Hi Max,
    Kompliment zu der Arbeit!! Ich beschäftige mich auch grade mit dem ADNS-2610 und möchte diesen zur Positionsbestimmung einsetzen... könntest du den C-Code zur Verfügung stellen? Dann müsste ich nicht von ganz vorne anfangen
    Hi!
    Klar, kein Problem!
    Aber mein Code ist auch so ziemlich der gleiche wie der vom c't-Bot, wie steve schon richtig gesagt hat!
    Code:
    //ADNS Funktionen!!
    void adns_writebyte(uint8_t bdata) {
    	//PD7 als Ausgang definieren
    	DDRB |= (1<<SDIO);
    	
    	for(int8_t i = 7; i >= 0; i--) {
    		PORTB &= ~(1<<SCK);
    		/*
    		PORTB = (PORTB & (~PINB)) | ((bdata >> (7 - SDIO)) & (1<<SDIO));
    		bdata = bdata <<1;
    		*/
    		PORTB &= ~(1<<SDIO);
    		if(bdata&(1<<i)) PORTB |= (1<<SDIO);
    			
    		
    		asm volatile("nop"); 	
    		
    		PORTB |= (1<<SCK);
    	}
    	
    }
    
    uint8_t adns_readbyte(void) {
    	uint8_t Bdata = 0;
    	PINB &= ~(1<<SDIO);
    	DDRB &= ~(1<<SDIO);
    	
    	//Bdata = 0;
    	for(int8_t i = 7; i >= 0; i--) {
    		//Sck = 0
    		PORTB &= ~(1<<SCK);
    		
    		Bdata = Bdata <<1;
    		PORTB |= (1<<SCK);
    		asm("nop");
    		Bdata |= (PINB >> SDIO) & 0x01;
    	}
    	return Bdata;
    }
    
    void adns_write(uint8_t adr, uint8_t Bdata) {
    	//erstes Byte auf eins, da schreibvorgang!
    	adr |= (1<<7);
    	adns_writebyte(adr);
    	adns_writebyte(Bdata);
    	
    	_delay_us(200);
    }
    
    uint8_t adns_read(uint8_t adr) {
    	
    	adr &= ~(1<<7);
    	//Adresse schreiben
    	adns_writebyte(adr);
    	
    	_delay_us(200);
    	//antwort-byte ausgeben
    	
    	return adns_readbyte();
    }
    
    void adns_init(void) {
    	DDRB |= (1<<SCK);
    	PORTB &= ~(1<<SCK);
    	//reset	
    	adns_write(0x00, 0x80);
    	
    	//forced awake mode
    	adns_write(0x00, 0x01);
    }
    @unapiedra:
    Den Wert habe ich aus dem Datenblatt und nicht selbst getestet.
    Aber ich kann es testen, da ich der Roboter mittlerweile wieder bei mir zuhause steht. Nur musst du dich noch etwas gedulden, denn ich stecke momentan voll im Abi-Stress.
    Allerdings ist der ADNS-2610 mittlerweile eigentlich total veraltet. Es gibt, so weit ich weiß, Sensoren, die locker 100cm/s schaffen dürften. Einfach mal eine aktuelle Gamer-Maus zerlegen

    Bei einem omnidrive-Roboter müsste das rein theoretisch schon mit einem Maussensor zu realisieren sein, ABER: nur bei dem Spezialfall, dass der Roboter nie um die eigene Achse rotiert. Soll heißen, dass der Roboter von Start bis Ende immer in die gleiche Richtung schaut. Die Richtungsänderungen erfolgen nur über die Geschwindigkeit der verschiedenen Omnidrive-Räder.
    Dann müsste ein im Mittelpunkt des Roboters montierter Maussensor genügen, um den Winkel der aktuellen Fortbewegungsrichtung festzustellen. Formel wäre dann tan alpha = dY / dX (achtung: wenn dX=0 dann muss alpha = 90/180° gesetzt werden, da durch null geteilt wird). Den Weg kann man entweder über "sin alpha = dY / Weg" oder über "cos alpha dx / Weg" bestimmen.

    Da der Sensor zentral sitzt erkennt er also keine Drehung um die eigene Achse.

    Um den Roboter ganz normal benützen zu können, müsste man also einen zweiten Sensor einbauen, der exzentrisch sitzt und die Rotierung um die eigene Achse registriert und jeweils von dem anderen alpha abzieht/hinzuzählt. Allerdings dürfte dieser Sensor nur dann aktiviert werden, wenn sich der Roboter auch wirklich um die eigene Achse dreht. Der zurückgelegte Weg wird nach wie vor über den zentralen Sensor bestimmt.

    Hoffe ich habe das einigermaßen verständlich (und richtig) erklärt, wenn nicht, dann mach noch ne Zeichnung!
    Es gibt sicher noch besserere Möglichkeiten, rein theoretisch müsste es auch mit nur einem Sensoren, der sich außerhalb des Mittelpunkts befindet, funktionieren.... hm... ein sehr interessantes Problem!

    Danke nochmal an alle für das positive Feedback =D>
    mfg max

    PS.: Hab 15pkt bekommen

  4. #14

    Re: Facharbeit: Bau eines Roboters

    Herzlichen Glückwunsch zu der angemessenen Benotung!
    Tut mir leid, ich vermute das wird hier ein bisschen OT. Aber hoffentlich interessant
    Bei einem omnidrive-Roboter müsste das rein theoretisch schon mit einem Maussensor zu realisieren sein, ABER: nur bei dem Spezialfall, dass der Roboter nie um die eigene Achse rotiert. Soll heißen, dass der Roboter von Start bis Ende immer in die gleiche Richtung schaut.

    Da der Sensor zentral sitzt erkennt er also keine Drehung um die eigene Achse.

    Um den Roboter ganz normal benützen zu können, müsste man also einen zweiten Sensor einbauen, der exzentrisch sitzt und die Rotierung um die eigene Achse registriert und jeweils von dem anderen alpha abzieht/hinzuzählt. Allerdings dürfte dieser Sensor nur dann aktiviert werden, wenn sich der Roboter auch wirklich um die eigene Achse dreht. Der zurückgelegte Weg wird nach wie vor über den zentralen Sensor bestimmt.
    Der Trick beim Omnidriveantrieb ist ja, dass Translation und Rotation wirklich unabhängig sind. D.h. ich kann zum Beispiel mit einer Geschwindigkeit von 10 cm/s nach vorne (Y-Richtung), einer Geschwindigkeit von 5 cm/s nach rechts (x-Richtung) und mich dabei noch um 5° /s drehen. Dann fahre ich einen Kreis mit dem Mittelpunkt irgendwo links hinten.
    Unsere Roboter könnte man diese Operation machen lassen, mit einer Funktion omni(5, 10, 5); (die Funktion ist nicht so genau so. In Wirklichkeit werten wir nur die Richtungen aus, Ein Speed parameter sorgt dafür, dass man die Geschwindigkeit anders einstellen kann.)

    Habe mal eben eine Zeichnung entworfen: (siehe unten)
    Der Roboter dreht sich also um einen Mittelpunkt M. Und bewegt sich von P nach P'.

    Das Problem ist also, dass der Roboter sich meistens nicht um eine dir bekannte Achse dreht, sondern dass die Drehachse irgendwo auf der Ebene steht.

    Ich habe nochmal einen neuen Ansatz. Die Herleitung ist mir zu kompliziert, auf zuschreiben/zu malen (deutet darauf hin, dass ichs noch nicht ganz verstanden habe). Aber hier jedenfalls mein Ergebnis: (auch im Anhang)

    \begin{math}
    \tan(\alpha) = \dfrac{|\Delta\overrightarrow{s_2} - \Delta\overrightarrow{s_1}\|}{|\overrightarrow{d}| } \\
    \mbox{mit } \Delta\overrightarrow{s_2} = \overrightarrow{s_2}'-\overrightarrow{s_2} \\
    \mbox{und } \Delta\overrightarrow{s_1} = \overrightarrow{s_1}'-\overrightarrow{s_1}
    \end{math}
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken drehungummittelpunkt.jpg  
    Angehängte Dateien Angehängte Dateien

  5. #15
    So habe jetzt noch den richtigen Tip bekommen und möchte dieses Thema damit abschließen.
    www.c-palb.de/stuff/mousesensors.pdf
    Hier habe ich mal mein Endergebnis veröffentlicht. Ihr könnt gerne Fragen, wenn euch irgendwas unklar ist. Aus Zeitmangel habe ich keine Grafiken und nur sehr wenig Text...
    Ich hoffe irgendjemand hat da seine Freude dran. Ich werde das vermutlich in der nächsten Zeit mal mit den echten Sensoren ausprobieren.

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    14.02.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    53
    was für räder sind das???

    bitte art sagen und wo gekauf!

    danke im vorraus

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    14.02.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    53
    keiner ?????


    gruss Help

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    02.02.2005
    Beiträge
    39
    Ist die Best.Nr. 440 661 von pollin.de
    Gibts auch in den Farben weiß und hellblau, je nach Geschmack ;D
    Aber sehen aus, als wären sie von einem Kinderwagen abmontiert!!
    Und haben aufgrund der Harten Lauffläche auch nicht den besten Grip, aber für den Preis einfach unschlagbar! (0,95€)
    Grüße max

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    14.02.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    53
    vielen dank ich werde mal schauen ob ich sie nehme oder ich schau mal im Baumarkt nach

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    27.03.2009
    Beiträge
    7
    Hallo
    hab da mal eine Frage, da du den Weg mit nem Maussensor misst:

    ich versuche den Weg, den eine optische Maus in x bzw y Richtung zurücklegt zu messen. Dazu hab ich eine Platine mit einem Pic aufgebaut und ich kann die Maus auch initialisieren und bei Bewegung bzw Tastendruck empfange ich Daten. Die Tasten kann ich auch einwandfrei auswerten, allerdings hab ich Probleme mit dem Weg. Ich wollte einfach die empfangenen Werte zu addieren um so auf den gesamt zurückgelegten Weg zu kommen. Das funktionierte allerdings nicht, dann hab ich gelesen, dass die Werte das 2er Komplement der Dezimal-Werte ist. Hab dieses dann umgewandelt in Dezimal werte aber es läuft immer noch nicht. Bewege ich die Maus zb nur in y-Richtung dann wird der x Wert auch stark verändert, außerdem Vergrößern und verkleinern sich die Werte obwohl ich die Maus nur in eine Richtung bewege.
    Ich hänge meine Main in der ich die Auswertung der Daten durchführe mal an.
    Wär super wenn mir jemand helfen könnte.

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