Archiv verlassen und diese Seite im Standarddesign anzeigen : Strecke messen
johannes_b
28.05.2010, 13:16
hallo,
ich fahre 10 sekunden geradeaus. kann ich dann irgendwie abfragen, wie weit ich gefahren bin?
Johannes
Magelan1979
28.05.2010, 14: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, 15:24
geht leider nicht.
Magelan1979
28.05.2010, 16:18
Du kannst die Funktion getLeftDistance() nicht aufrufen, wenn die RP6RobotBase.lib eingebunden ist?
Fabian E.
28.05.2010, 16: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, 17: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, 17: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, 17: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.
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);
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.