-         

Ergebnis 1 bis 3 von 3

Thema: Asuro Rechteckverfolgung mit Kollision

  1. #1

    Asuro Rechteckverfolgung mit Kollision

    Anzeige

    hallo,

    ich möchte ein programm erstellen mit dem der asuro folgendes macht:

    http://www.youtube.com/watch?v=h5qPi0qSVXI

    also er soll erst normal der linie folgen, und anschließend leicht drehen.
    soweit klappt das programm recht gut.
    nur der asuro sollte eigentlich mit dem wenden aufhören, wenn er die linie wiederfindet und diese weiterverfolgen.
    und hier liegt das problem: der roboter dreht einfach immer weiter.

    hier mal mein aktuelles programm:

    #include "asuro.h"
    #include <stdio.h>
    int main(void)
    {
    Init();

    while(1) {

    FrontLED(1); //LED an

    int lData[2]; // Speicher für die Messwerte zur Verfügung stellen
    LineData(lData); // Einlesen der Messwerte

    if (PollSwitch()==0){ //wenn kein taster gedrückt
    if (lData[1] > lData[0]) { //Linienverfolgung
    MotorDir(FWD,FWD);
    MotorSpeed(150,225); }

    else if (lData[1] < lData[0]) {
    MotorDir(FWD,FWD);
    MotorSpeed(225,150); }
    }
    else if(PollSwitch()!=0) //Kollisionsfall
    {

    int u=0;
    while(u==0)
    {
    if (lData[1] > 100 && lData[0]>100) //Linie gefunden?
    {
    MotorDir(FWD,RWD); //drehen
    MotorSpeed(150,0);
    u=0;
    }
    else
    {
    u=1;
    }
    }
    }
    }



    return 0;
    }

    edit: alte, inaktive programmteile gelöscht.

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    In der while(u==0)-Schleife sollten die Linienwerte neu eingelesen werden:

    Code:
    #include "asuro.h"
    #include <stdio.h>
    int main(void)
    {
    	Init();
    
    	while(1)
    	{
    
    		FrontLED(1); //LED an
    
    		int lData[2]; // Speicher für die Messwerte zur Verfügung stellen
    		LineData(lData); // Einlesen der Messwerte
    
    		if (PollSwitch()==0) // wenn kein taster gedrückt
    		{
    			if (lData[1] > lData[0]) // Linienverfolgung
    			{
    				MotorDir(FWD,FWD);
    				MotorSpeed(150,225);
    			}
    
    			else if (lData[1] < lData[0])
    				{
    					MotorDir(FWD,FWD);
    					MotorSpeed(225,150);
    				}
    		}
    		else if(PollSwitch()!=0) //Kollisionsfall
    			{
    
    				int u=0;
    				while(u==0)
    				{
    					LineData(lData); // erneutes Einlesen der Messwerte !!!
    					if (lData[1] > 100 && lData[0]>100) //Linie gefunden?
    					{
    						MotorDir(FWD,RWD); //drehen
    						MotorSpeed(150,0);
    						u=0;
    					}
    					else
    					{
    						u=1;
    					}
    				}
    			}
    	}
    	return 0;
    }
    Besser, weil für den asuro schonender, wäre wohl die Ecke in der Linie zu suchen als immer mit Speed gegen ein Hinderniss zu knallen...

    Gruß

    mic
    Geändert von radbruch (03.12.2011 um 00:31 Uhr)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    ok, vielen dank radbruch
    das programm geht jetzt aus der schleife, ich muss bloss noch die werte für die helligkeit anpassen

    deinen tipp mit der eckenerkennung werde ich auch mal umsetzen, aber ich bin jetzt erst mal froh, dass das programm überhaupt läuft, bin ewig davor gehockt^^

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 28.11.2011, 19:29
  2. Antworten: 2
    Letzter Beitrag: 13.06.2011, 17:43
  3. ASURO Kollision
    Von Hamlet83 im Forum Asuro
    Antworten: 16
    Letzter Beitrag: 12.12.2010, 22:19
  4. Antworten: 2
    Letzter Beitrag: 16.02.2010, 21:01
  5. Asuro- dauernd kollision
    Von brandy89 im Forum Asuro
    Antworten: 24
    Letzter Beitrag: 11.04.2009, 17:36

Berechtigungen

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