PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hindernis ausweichen



Current
23.07.2009, 20:42
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.



#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

proevofreak
24.07.2009, 10:30
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

Current
24.07.2009, 11:41
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? :-s

mfg

radbruch
24.07.2009, 12:32
Hallo

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


Gruß

mic

Current
24.07.2009, 15:40
Danke Radbruch, das wars.

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

mfg