-         

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

Thema: Asuro zeichnet wie ein Kugelschreiber

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    31.08.2005
    Beiträge
    41

    Asuro zeichnet wie ein Kugelschreiber

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Ich habe mich in letzter Zeit etwas mit der Odometrie von Asuro beschäftigt und wollte ihn dann auch Linien zeichnen lassen. Also musste ich irgendwie einen Stift befestigen. Dabei kam mir folgende Idee:
    Wenn Asuro sich dreht, soll der Stift ja an einer Stelle stehen bleiben, damit die zweite Linie dann direkt weitergeht (auch nach einer Drehung).
    Weil ich keine Lust hatte den Stift irgendwie schräg an Asuro zu befestigen, wie ich es schon auf Bildern im RN gesehen habe, habe ich mir etwas anderes überlegt.
    Wenn man Asuro nur über einen Reifen drehen lässt, dann bleibt der andere an seinem Ort. Also habe ich etwas gebastelt, damit unter den Reifen Farbe kommt. Funktioniert also im Prinzip wie ein Kugelschreiber.
    Das sieht jetzt ungefähr so aus:

    Edit: Sorry, ich hab ganz vergessen zu schreiben, dass ich keinen Filzstift genommen habe, sondern eine Tintenpatrone, in die ich vorne den Kopf eines Wattestäbchens gesteckt habe. Da Tinte ziemlich flüssig ist klappt es. Ich hab auch noch ein Foto von einer Linie und das der Tintenpatrone angehängt.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken seite_105.jpg   vorne_117.jpg   tintenpatrone.jpg   linie_184.jpg  

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von JensK
    Registriert seit
    27.02.2007
    Ort
    Hamburg
    Alter
    26
    Beiträge
    254
    d.h. der stift malt den reifen an, und der fährt dann die farbe, die auf ihm drauf ist ab? find ich keine schlechte Idee...
    aber bekommt man denn so überhaupt deutliche striche hin?

    mfg

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    31.08.2005
    Beiträge
    41
    @JensK: Genau, so ist es. Ich hatte da auch erst bedenken, aber es funktioniert prima. Ich werde nachher nochmal eine Linie fotografieren und hier reinstellen.
    mfg

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von JensK
    Registriert seit
    27.02.2007
    Ort
    Hamburg
    Alter
    26
    Beiträge
    254
    mhh ich hab garde mal auch ein filzstift an den reifen gehalten, nur bei mir kommt da nix unten aufn papier raus muss der filzstift frsich sein? oder sollte ich mal versuchen ihn mit ein ganz klienes bisschen wasser aufzufüllen, so dass er mehr farbe am kopf hat?

    mfg

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.11.2007
    Beiträge
    152
    Stimmt wenn der Filzstift etwas eingetroknet ist malt er nicht mehr so gut und färbt deswegen auch weniger auf den reifen ab.
    Das mit dem Wassser auffüllen Klingt Logisch darf aber nicht zu viel sein weil sont der Stich leichter verwischt und auch breiter ist.
    [schild=14 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Roboter sind cool[/schild]

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    hi kasnnst du mal dein programm zur odometrie posten?

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    hier der Thread ASURO mit Servo





    Und ein kleiner Malwettbewerb:
    http://www.roboternetz.de/phpBB2/viewtopic.php?t=10291

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    Hallo Luz,

    Deine Idee mit der Tintenpatrone ist auch nicht schlecht. Vielleich kann man da noch ein Servo dranbasteln, dann kann die Linie auch unterbrochen werden.
    Wenn Du mal schöne Zeichnungen hast, könntest Du die Ergebnisse hier posten, das interessiert bestimmt einige.

    Gruß,
    robo

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    31.08.2005
    Beiträge
    41

    Fehler bei der Programmierung???

    Das ist der code, den ich bisher geschrieben hab, aber irgendwie funktioniert FahreEinzeln(..) nicht richtig. Die zurückgelegten Strecken sind sehr sehr sehr viel kürzer als angegeben. Fahre() funktioniert allerdings ganz gut, obwohl diese funktion nach dem selben prinzip geht, wie FahreEinzeln(..). Vielleicht überseh ich auch irgendwas...

    Code:
    #include "asuro.h"
    
    #define false 0
    #define true 1
    #define SCHWARZ 0
    #define WEISS 1
    #define LINKS 0
    #define RECHTS 1
    #define LGRW 540
    #define RGRW 530
    
    typedef short bool;
    
    //Gradzahl in Bogenmaß umrechnen
    double dtor( double deg )
    {
        double r = 32*deg/180;// PI*reifenabstand*winkel/180°
    	return r;
    }
    
    // eine bestimmte Strecke mit einem Rad fahren
    void FahreEinzeln( double mm , int grenzw , unsigned char dir , short rad );
    
    //eine bestimmte Strecke mit beiden Rädern fahren
    void Fahre( double mm , unsigned int lgrenzw , unsigned int rgrenzw , unsigned char dir);
    
    void InitTinte()
    {
    	FahreEinzeln( 5.91 , LGRW , RWD , LINKS );
    	FahreEinzeln( 5.91 , LGRW , FWD , LINKS );
    }
    
    //-----------HAUPTPROGRAMM----------------
    int main(void)
    {
    	Init();
    	InitTinte();
    	//Gleichseitiges Dreieck mit seitenlänge 10cm (100mm) fahren
    	Fahre( 100.0 , LGRW , RGRW , FWD );
    	FahreEinzeln( dtor( 300.0 ) , RGRW , FWD , RECHTS );
    	Fahre( 100.0 , LGRW , RGRW , FWD );
    	FahreEinzeln( dtor( 300.0 ) , RGRW , FWD , RECHTS );
    	Fahre( 100.0 , LGRW , RGRW , FWD );
    
    	while(1);
    	return 0;
    }
    void Fahre( double mm , unsigned int lgrenzw , unsigned int rgrenzw , unsigned char dir)
    {
    	unsigned int rodo,lodo,rodo_old,lodo_old;
    	unsigned int lcounter = 0;
    	unsigned int rcounter = 0;
    	unsigned int data[2];
    	unsigned char lspeed = 140;
    	unsigned char rspeed = 140;
    
    	OdometrieData( data );
    
    	//Momentaner Wert links
    	if( data[LINKS] < lgrenzw )
    		lodo_old = SCHWARZ;
    	else
    		lodo_old = WEISS;
    
    	//Momentaner Wert rechts
    	if( data[RECHTS] < rgrenzw )
    		rodo_old = SCHWARZ;
    	else
    		rodo_old = WEISS;
    
    	//Losfahren
    	MotorDir( dir , dir );
    	MotorSpeed( lspeed , rspeed );
    
    	while( 3*lcounter < mm || 3*rcounter < mm )
    	{
    		OdometrieData( data );
    
    		//links Auswerten
    		if( data[LINKS] < lgrenzw )
    			lodo = SCHWARZ;
    		else
    			lodo = WEISS;
    
    		//rechts Auswerten
    		if( data[RECHTS] < rgrenzw )
    			rodo = SCHWARZ;
    		else
    			rodo = WEISS;
    
    		//Farbwechsel links prüfen
    		if( lodo != lodo_old )
    		{
    			lcounter += 1;
    			lodo_old = lodo;
    		}
    
    		//Farbwechsel rechts prüfen
    		if( rodo != rodo_old )
    		{
    			rcounter += 1;
    			rodo_old = rodo;
    		}
    
    		//Ungleichmäßigkeiten ausgleichen
    		if( lcounter+1 < rcounter )
    			rspeed = 0;
    		else if( rcounter+1 < lcounter )
    			lspeed = 0;
    		else
    		{
    			rspeed = 140;
    			lspeed = 140;
    		}
    
    		//Falls eine Seite Ziel erreicht, stehenbleiben
    		if( 3*lcounter >= mm )
    			lspeed = 0;
    		if( 3*rcounter >= mm )
    			rspeed = 0;
    
    		MotorSpeed( lspeed , rspeed );
    	}
    	MotorSpeed( 0 , 0 );
    }
    
    void FahreEinzeln( double mm , int grenzw , unsigned char dir , short rad )
    {
    	unsigned int data[2];
    	unsigned int counter = 0;
    	bool odo,odo_old;
    
    	OdometrieData(data);
    
    	//Momentaner Wert
    	if( data[rad] < grenzw )
    		odo_old = SCHWARZ;
    	else
    		odo_old = WEISS;
    
    	//Richtung und Geschwindigkeit einstellen
    	if( rad == LINKS )
    	{
    		MotorDir( dir , BREAK );
    		MotorSpeed( 140 , 0 );
    	}
    	else
    	{
    		MotorDir( BREAK , dir );
    		MotorSpeed( 0 , 140 );
    	}
    
    	//Strecke fahren
    	while(3*counter < mm )
    	{
    		OdometrieData(data);
    		//Auswerten
    		if( data[rad] < grenzw )
    			odo = SCHWARZ;
    		else
    			odo = WEISS;
    
    		//Farbwechsel prüfen
    		if( odo != odo_old )
    		{
    			counter += 1;
    			odo_old = odo;
    		}
    	}
    
    	//Anhalten
    	MotorSpeed( 0 , 0 );
    	MotorDir( BREAK , BREAK );
    }
    mfg Lukas

    P.S.: die Idee mit dem Servo ist nicht schlecht. mal schauen vielleicht mach ich das auch noch mal.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    Einen Fehler hätte ich schon mal:
    double r = 32*deg/180;// PI*reifenabstand*winkel/180°
    Obwohl das für Dein Streckenproblem eher wenig Bedeutung hat.
    Übrigens: double = float beim AVR-GCC und es wird viel Speicher verbraucht.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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