-
        

Ergebnis 1 bis 7 von 7

Thema: Problem mit der Linienverfolgung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2010
    Beiträge
    12

    Problem mit der Linienverfolgung

    Anzeige

    Hey also ich hab ein Problem mit der Linienverfolgung zw mehrere:

    1. der linke Fototransistor gibt nicht den gleichen Wet wie der rechte aus so dass der Asuro immer leicht bzw stärker im Kreis fährt
    2. erkennt er somit auch keine Linien um diese zu verfolgen
    3. kann es auf an dem Programm liegen wen ja was muss ich ändern das es besser funktioniert.
    Code:
    #include "asuro.h"	
    int main(void)	
    
    {
    int a;
    a=120;	//Grundgeschwindigkeit
    int b;
    b=200;	//Abiegegeschwindigkeit 
    int c;	// Zählfunktion
    c=0;
    int d;	// Rückfahrzeit
    d=0;
    int e; //Rechenzeit
    e=10;
    
    unsigned Data[2];
    Init();
    
    while(1)
    {c++;
    if (PollSwitch()>0)
    		{
    		if (PollSwitch()==32/*rechter Taster gedrückt*/)	//Kollisionstaster
    				{
    				MotorSpeed(b/*links*/,0/*rechts*/);
    				StatusLED(RED)
    				;}		//drehe nach rechts
    			else if (PollSwitch()==1)//linkter Taster gedrückt
    				{
    				MotorSpeed(0/*links*/,b/*rechts*/);
    				StatusLED(RED)
    				;}	//drehe nach links
    			else if(PollSwitch()!=0>1<32)
    				{
    			
    				for(d=0;d<100;d++)
    				{MotorDir(RWD,RWD);
    				MotorSpeed(b,b);
    				BackLED(ON,ON)
    					;}
    				;}
    			
    		;}
    else
    {Init();
    FrontLED(ON);
    	LineData(Data);
    	if(Data[0]<Data[1])
    		{MotorSpeed(a,b);		/*Rechts*/
    		StatusLED(RED);}
    	else if (Data[0]>Data[1])
    		{MotorSpeed(b,a);
    		StatusLED(YELLOW);} /*Links*/
    	else if(Data[0]==Data[1])
    		{MotorSpeed (a,a);
    		StatusLED(GREEN);}
    ;}
    	
    ;}
    
    return(0);
    }

    Ich hoffe ihr könnt mir helfen.
    Mit freundlichen Grüßen
    Max

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Code:
    PollSwitch()!=0>1<32
    Das geht einfach nicht. Du muss einer compilier fehler von make bekommen haben. Logische stellungen mussen ein fur eins uberpruft werden. Man kan sie nicht auf dieser weise zusamen knüpfen. Man kan aber mehrere stellungen mit logische operatoren kombinieren. Aber nur die auswertungen werden logisch kombiniert.

    Vielleicht meinst du etwas wie:

    PollSwitch()!=0 /*PollSwitch is wert nicht gleich nul*

    UND PollSwitch()>1 /* PollSwitch() wert grösser als 1 */

    UND PollSwitch()<32 /* PollSwitch() wert kleiner als 32 */

    Im c-code sieht das aus als:

    Code:
    if ( (PollSwitch()!=0) && (PollSwitch()>1) && (PollSwitch()<32) )
    ...
     /* nur wen jeder von diesen 3 war ist macht er was nach If komt. Fehlt einer? Dan gehts nicht */
    Hier, lies mal ein bisschen weiter uber logische operatoren im c-sprache:

    http://www.rn-wissen.de/index.php/C-....29_Operatoren

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2010
    Beiträge
    12
    Ich habe das Programm nach diesem Vorschlag abgeändert allerdings fährt er nur Rückwärts während derTaster gedrückt ist was kann noch am Programm falsch sein ??

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Nah klär. Auf nur eine stelle in dein program wird die motor richtung geändert (auf rückfährt). Nachdem er zuruckgefahren hat von einer obstruktion muss er doch wieder forwärts gehen, oder? Auf welche stelle war das am besten?

    Code:
    for(d=0;d<100;d++) 
                {MotorDir(RWD,RWD);
    Wieso machst du dass 100 mal? Das dauert nur ein sehr kurzes augenblick. Es fahrt kaum zuruck. Warten muss man mit Sleep.

    Und diesen 2-ten Init() nach dem else?? Wieso?

    [EDIT]Ok, Init() setzt auch die motorrichtung wieder im forwärts zustand und den geschwindigkeit auf nul. Er tut aber viel mehr was nicht nötig ist, und vielleicht auch unwunschlich. (wie backleds oder statusled an/aus)

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2010
    Beiträge
    12
    Also ich hab jetzt alles Entstört allerdings ist die Linienverfolgung noch sehr ungenau mit dem bloßen Vergleich der Lichtwerte.
    was könnte man hierran noch ändern??

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Ein bisschen weniger unterschied in geschwindigkeit werten beim drehen, vielleicht?

    Aber besser... Die linien Sensoren geben NICHT den selben wert zurück bei den selbe beleuchtung. Deshalb muss es immer korrigieren wen du mit:

    Data[0]<Data[1]

    die helligkeiten vergleicht. Einer von beiden ist von anfang ab schon höher dan den andere seite. Asuro soll erst lernen wieviel das unterschied is auf ein egalen untergrund (das was nicht aus sieht als einer linie). Danach beim linie-entlang fahren muss es nach jeden messung diesen underschied wert von die Data[0]-Data[1] differenz abtrennen. Dan habst du ein richtige balancierte reglung.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2010
    Beiträge
    12
    ok das werde ich einmal aus probieren

Berechtigungen

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