PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Strecke messen



johannes_b
28.05.2010, 12:16
hallo,
ich fahre 10 sekunden geradeaus. kann ich dann irgendwie abfragen, wie weit ich gefahren bin?

Johannes

Magelan1979
28.05.2010, 13:32
In der RP6RobotBase.lib sind folgende Funktionen definiert probier es mal damit



#define getLeftDistance() (mleft_dist)
#define getRightDistance() (mright_dist)

johannes_b
28.05.2010, 14:24
geht leider nicht.

Magelan1979
28.05.2010, 15:18
Du kannst die Funktion getLeftDistance() nicht aufrufen, wenn die RP6RobotBase.lib eingebunden ist?

Fabian E.
28.05.2010, 15:54
Mit "geht nicht" ist keinen geholfen...Du musst schon sagen, WAS nicht geht, ob es eine Fehlermeldung oder soetwas gibt.

johannes_b
28.05.2010, 16:29
#include "RP6RobotBaseLib.h"

int main (void)
{
initRobotBase();

uint16_t s_left = getLeftDistance();
powerON();
move(80, FWD, DIST_MM(200), true);
uint16_t s = getLeftDistance() - s_left;
move(80, BWD, DIST_MM(s), true);
return 0;
}

Bei mir fährt der Roboter immer eine längere Strecke zurück, als vorwärts

Edit: So immer ungefähr 4mal so lang

Fabian E.
28.05.2010, 16:40
Also das erste was mir auffällt, ist, dass du die Endlosschleife am Ende vergessen hast.
So kann es zu Probleme kommen. Weiterhin sind die Distanzen am Anfang immer 0 also macht das erste Auslesen schonmal keinen Sinn ;)
Ansonsten lass dir den Wert doch mal über UART ausgeben.
Vielleicht sind deine Encoder nicht richtig kalibriert.

EDIT: Ich sehe grade das Problem: soweit ich weiß, ist die gemessene Distanz nicht in Zentimerter oder so, sondern in Zählschritten...
Dann kann das mit dem DIST_MM /CM nicht klappen.

johannes_b
28.05.2010, 16:48
#include "RP6RobotBaseLib.h"

int main (void)
{
initRobotBase();
powerON();
task_RP6System();
uint16_t s_left = mleft_dist;
move(80, FWD, DIST_MM(200), true);
task_RP6System();
uint16_t s = mleft_dist - s_left;
move(80, BWD, DIST_MM(s * 0.2512), true);
while (true)
{
task_RP6System();
}
return 0;
}


Danke. Also muss ich das Ergebnis mal 0.2512 nehmen. So geht es auch. Das ist ja ungefähr das 4fache.

SlyD
28.05.2010, 17:46
lass das DIST_MM einfach ganz weg das rechnet ja in Encoder Zählschritte um - Du hast aber sowieso schon den Wert in Zählschritten ;)

Also nicht move(80, BWD, DIST_MM(s * 0.2512), true);
sondern move(80, BWD, s, true);