PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 Stop Funktion



Corsin Obrist
29.04.2012, 14:27
Hallo!
Brauche hilfe!

Ich steuere meinen Rp6 über ein WiFly Modul fom Laptop aus!
Nun wollte ich noch ein paar anpassungen machen... aber verzweifle nun an kleinen problemen!

Die Funktion Stop verstehe ich nicht!

Um sie anzuwenden hab ich auf die schnelle ein einfaches Programm geschrieben..

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void anhalten (void);

int main (void)
{
int i;
int lese_wert;
initRobotBase();
powerON();
while(1)
{

for (i = 0; i<=1000; i++)
{
changeDirection(FWD);
task_motionControl();
moveAtSpeed(180,180);
mSleep(5);
}

anhalten();
mSleep(2000);

for (i = 0; i<=1000; i++)
{
changeDirection(BWD);
task_motionControl();
moveAtSpeed(180,180);
mSleep(5);
}


void anhalten(void)
{
stop();
setStopwatch1(0);
while(getStopwatch1()<300)
{
task_motionControl();
}

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Das problem ist, dass der Roboter sich nach der Stopfunktion aufhäng....

Kann mir jemand das erklären?

SlyD
30.04.2012, 13:07
Hallo,



setStopwatch1(0);
while(getStopwatch1()<300)
{


die Stopwatch wird hier nirgendwo gestartet.


Ausserdem deklarierst Du wenn ichs richtig sehe
void anhalten(void)

INNERHALB der Main Funktion! Das C das zulässt liegt an den vielen Freiheitsgraden die es zur Verfügung
stellt aber sowas sollte man ohne gute Gründe eigentlich nicht machen.

Oh und bitte im Forum [ CODE ] TAGS verwenden damit die Formatierung übersichtlich ist.

MfG,
SlyD

Corsin Obrist
30.04.2012, 13:58
Sorry hab den Code nicht recht eingefügt!

Also es sollte auch ohne getstopwatch gehen! ( das mit dem stopwatch hab ich i irgendeinem forum gelesen und einfach eingefügt)

Aber eben das Problem mit der Stopfunktion habe ich immer noch!?


int main (void)
{
int i;
int lese_wert;
initRobotBase();
powerON();
while(1)
{

for (i = 0; i<=1000; i++)
{
changeDirection(FWD);
task_motionControl();
moveAtSpeed(180,180);
mSleep(5);
}

stop()
mSleep(2000);

for (i = 0; i<=1000; i++)
{
changeDirection(BWD);
task_motionControl();
moveAtSpeed(180,180);
mSleep(5);
}

}//end main

radbruch
30.04.2012, 14:07
Hallo

Hier ein paar Erkenntnisse zu Stop():
www.roboternetz.de/community/threads/49623-Bumper-betätigt-RP6-ignoriert-moveAtSpee-Befehl

Und dann solltest du dir mal die Beispiele zum Task-System des RP6 anschauen...

Gruß

mic

Corsin Obrist
30.04.2012, 14:18
Diese beiträge hab ich mir schon angeschaut!

Sie setzten aber den MoveSpeed(0,0), jedoch fährt der Roboter dan immer noch ganz langsam... das heisst 0,0 entschpricht dem minimum welches etwa 21;21 ist.

Oder habe ich das faltsch interpretiert?

Gruss
Corsin

SlyD
30.04.2012, 14:24
Wenn das der 1:1 copy&paste Code ist sollte der Compiler eigentlich auch meckern weil da mind.
zwei Syntax Fehler drin sind.


Die stop Funktion ist an die Verwendung von task_motionControl also der Regelung gekoppelt
und dazu gedacht Bewegungen die mit move und rotate gestartet wurden zu unterbrechen.

Ohne das die task_motionControl Funktion regelmäßig aufgerufen wird funktioniert die Regelung nicht.
Stop hält NICHT sofort den Roboter an sondern löst nur aus das gestoppt werden soll.
Schau Dir einfach den Code in der Library an.


mSleep mit langen Pausen darfst Du in dem Fall eigentlich auch nicht verwenden (mSleep(5) ist kein Problem).


Den Code:
changeDirection(BWD);
task_motionControl();
moveAtSpeed(180,180);
mSleep(5);

1000x auszuführen macht keinen Sinn.
Eigentlich ist die Anwendung eher so gedacht:


changeDirection(BWD);
moveAtSpeed(180,180);

while(true)
task_motionControl();


MfG,
SlyD

Corsin Obrist
30.04.2012, 14:39
danke! werde es ausprobieren!
Ps: war nicht der 1:1 copy&paste! (bin in der firma und hab das programm nicht griffbereit!)
gruss
Corsin