-         
Ergebnis 1 bis 5 von 5

Thema: Hindernis ausweichen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.07.2009
    Beiträge
    9

    Hindernis ausweichen

    Anzeige

    Hi Leute,

    erstmal dicks Lob, für das super Forum hier.

    Folgebdes Problem. Ich habe einen einfachen Code geschrieben der erkennen soll wenn sich ein Hindernis vor den RP6 befindet, um dann darauf zu reagieren.

    Code:
    #include "RP6RobotBaseLib.h" 	
    
    
    
    int main(void)
    {
    	initRobotBase(); 
    	powerON();
    	setACSPwrMed();	
    	
    
    	while(true) 
    	{
    		task_ADC();
    		task_ACS();
    		task_motionControl();
    		
    		moveAtSpeed(120,120);	
    
    	
    		if(getBumperRight()||obstacle_right)
    		{
    			setLEDs(0b000001);
    			rotate(120, LEFT, 90, true);
    		}
    		
    		else
    		{
    			setLEDs(0b000000);
    		}
    		
    		
    		if(getBumperLeft()||obstacle_left)
    		{
    			setLEDs(0b001000);
    			rotate(120, RIGHT, 90, true);
    		}
    		
    		else
    		{
    			setLEDs(0b000000);
    		}
    	
    	
    	}
    	return 0;
    }
    Jedoch dreht er sich, nachdem das Hindernis erkannt wurde, nur im Kreis.
    Ich denke mal das nachdem etwas erkannt wurde, es sich aber nichtmehr in sichtbereich ist, die Variabeln trotzdem noch true sind. Mit z.B. "obstacle_right = 0" nach dem rotate hab ichs auch schon probiert...

    Habt ihr einen Tipp für mich was da verkehrt ist, sendet bitte keinen vollständigen Code, vorerst. Will selber drauf kommen

    mfg

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    30
    Beiträge
    220
    hallo Current, schön dass du auch auf den geschmack gekommen bist^^.
    das problem in deinem programm ist, dass du dem RP6 nur sagst, was er machen soll, wenn er ein hinderniss erkennt (nämlich drehen um 90 grad). du sagst ihm aber nicht was er machen soll, wenn er kein hinderniss erkennt (nämlich nicht mehr drehen). das musst du in deinen else bedingungen ergänzen.

    da sich deine bedingungen in einer while- schleife befinden, dreht sich dein robby nachdem einmal ein hinderniss erkannt wurde ständig um 90 grad, also rotiert er immer.

    mfg andi

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.07.2009
    Beiträge
    9
    Habs auch schon mit einem move in der else Bedingung probiert, gleiches ergebnis. Sollte aber eigentlich auch garnet nötig sein, da er ja nach dem else die LEDs ausmacht und dann wieder in der Hauptschleife ist und in der steht am anfang ein move. Oder steh ich da grad aufn Schlauch?

    mfg

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    55
    Beiträge
    5.789
    Blog-Einträge
    8
    Hallo

    Der rotate()-Befehl ändert die Drehrichtungen. In der Hauptschleife fehlt deshalb ein setMotorDir(FWD,FWD).


    Gruß

    mic

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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    23.07.2009
    Beiträge
    9
    Danke Radbruch, das wars.

    btw: find deine arbeiten genial und ich ziehe meinen hut vor deiner kreativität =D>

    mfg

Berechtigungen

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