-         

Ergebnis 1 bis 4 von 4

Thema: Brauche Hilfe bei Linien Verfolgungsprogramm

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.03.2009
    Ort
    Merseburg
    Alter
    30
    Beiträge
    14

    Brauche Hilfe bei Linien Verfolgungsprogramm

    Anzeige

    Hallo,
    bin ein wenig am verzweifeln, tüftle seit einigen Stunden an dem Programm.. hab hin und her probiert aber irgendwie mag Asuro nicht das machen was ich will.

    Folgendes Problem: habe die LineDemo.c bissel abgeändert da diese bei mir absolut nicht funktioniert hatte (meine nicht compilieren oder so sondern rein Praxisbezogen)
    den grund code kennt bestimmt jeder.. ledenfalls hab ich den so modifiziert das auch das andere rad noch langsamer wird und der somit auch engere kurven schafft.. 45° erwarte ich einfach!

    so in der drehe hat das auch alles funktioniert dann sind die batterien wohl schwach gewurden und klappte nicht mehr.. neue rein und natürlich waren die werte viel zu hoch.. (die werte im quelltext sind schon für neue batterien angepasst)
    und entweder isser zu schnell und eiert rum und fliegt in der kurve raus oder der is zu langsam und schafft die kurve nicht.. deswegen auch das andere rad langsamer um den "wendekreis" zu verkleinern.. damit wurde es ein wenig besser..

    Hat da jemand einen Vorschlag.. vllt seh ich ja den Wald vor lauter Bäumen nicht.. ledenfalls komm ich nicht drauf damit der endlich mal schön fährt.. denn im moment funktioniert LineData(data);
    if (data [0] > data [1] )

    besser als das komplexere programm.. aber dieses hin und her.. da würd einem beim zuschauen schon schlecht ^^

    ps: der asuro folgt schwarzen pvc klebeband auf weißem papier (viel papier ^^) werte sind soweit ok, Sensoren haben einen mittelwert von 4-8 auf dem klebeband (zimmerlicht aus und an) und papier zwischen 30-70

    mfg

    Code:
    	#include "asuro.h"
    
    	#define SPEED_L 100
    	#define SPEED_R 106
    
    	unsigned int lineData[2];
    	unsigned int speedLeft, speedRight;
    	int ADOffset;
    
    	void LineRight (void)
    	{
    		speedLeft  += 1;      /* links mehr Gas geben */
    		speedRight -= 1;	  /*rechts weniger Gas geben */
    	  if (speedLeft > 140) speedLeft = 141;
    	  if (speedRight < 65) speedRight = 66;
    	}
    
    	void LineLeft (void)
    	{
    		speedRight  += 1;     /* rechts mehr Gas geben */
    		speedLeft   -= 1;	  /* links weniger Gas geben */
    	  if (speedRight > 146) speedRight = 147;
    	  if (speedLeft < 59) speedLeft = 60;
    	}
    
    	void Msleep (int dauer)
    	{
    	  int z;
    	  for (z = 0; z < dauer; z++)
    	    Sleep (36);
    	}
    
    	int main(void)
    	{
    	  int i;
    	  unsigned int j;
    
    	/*START*/
    	  Init();
    	  FrontLED(ON);
    	  MotorDir(FWD,FWD);
    	  StatusLED(YELLOW);
    	  SerPrint("ASURO Bereit!.. ");
    	/*WARTEN*/
    	  while(PollSwitch() <= 1){  }
    	  Msleep(800);  //0,8 sekunden warten
    
    	/*Kalibrierung*/
    	  for (j = 0; j < 255; j++) LineData(lineData);  //warten bis werte stabil sind
    	  LineData(lineData);  // liniensensor daten einlesen
    	  ADOffset = lineData[LEFT] - lineData[RIGHT];   //differenz der beiden dioden speichern
    	  StatusLED(GREEN);
    	  SerPrint("Kalibrierung abgeschlossen.. ");
    
    	  while(PollSwitch() <= 1){  }
    	  SerPrint("Fahre los.. ");
    	  speedLeft = SPEED_L;
    	  speedRight = SPEED_R;
    
    	  while(1)
    	  {
    		LineData(lineData);
    		i = (lineData[LEFT] - lineData[RIGHT]) - ADOffset;
    		if ( i > 4)			/* links mehr Gas geben */
    		{
    			BackLED(ON,OFF);
    			LineRight();		/* linie rechts */
    
    		}
    		else if ( i < -4)		/* rechts mehr Gas geben */
    		{
    			BackLED(OFF,ON);
    			LineLeft();		/* linie links */
    		}
    		else				/* geradeaus */
    		{
    			BackLED(ON,ON);
    			speedLeft = SPEED_L;
    			speedRight = SPEED_R;
    		}
    		MotorSpeed(speedLeft,speedRight);
    	  }
    
    	  StatusLED(RED);
    	  BackLED(OFF,OFF);
    	  MotorSpeed(0,0);
    	  while(1);
    	  return 0;
    	}

    ich lasse die 2 motoren unterschiedlich schnell fahren da mein linker ein klein wenig schneller ist als der rechte somit gleich ich das aus damit der gerade fährt

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    26
    Beiträge
    239
    hallo C-H-T

    ich habe meine linienverfolgung mal so gelöst:

    Code:
    werte einlesen
    
    if(links heller als rechts)
        MotorSpeed(maxSpeed,0);    //links antreiben
    else
        MotorSpeed(0,maxSpeed);    //rechts antreiben
    auf diese art ist er zwar nicht ganz so schnell, aber er schafft relativ kleine radien
    mfg hai1991

    P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    02.03.2009
    Ort
    Merseburg
    Alter
    30
    Beiträge
    14
    jo so hatte ich das auch ganz am anfang, das funktioniert auch ganz ok, allerdings fährt er da nur im Zick zack und niemals geradeaus.. links rechts links rechts usw und möchte das er lieber kurven fährt.
    hab deins trotzdem mal geflashed ^^ da geht der asuro ja ab wie vom teufel gejagt.. und der schafft da bei dir eine kurve? der ist bei mir so schnell gefahren das er glatt übers klebeband geschossen ist und garnicht so schnell reagieren konnte irgendwo hin zu lenken

    naja ich werd mal von grund auf alles selber machen.. finde 2 bis 3 abfragen sind zu wenig zum gut fahren..

    mfg

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    26
    Beiträge
    239
    hallo

    da musst eben mit maxSpeed anpassen, aber er schafft doch erstaunlich kleine radien.
    mfg hai1991

    P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten

Berechtigungen

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