In der RP6RobotBase.lib sind folgende Funktionen definiert probier es mal damit
Code:#define getLeftDistance() (mleft_dist) #define getRightDistance() (mright_dist)
hallo,
ich fahre 10 sekunden geradeaus. kann ich dann irgendwie abfragen, wie weit ich gefahren bin?
Johannes
In der RP6RobotBase.lib sind folgende Funktionen definiert probier es mal damit
Code:#define getLeftDistance() (mleft_dist) #define getRightDistance() (mright_dist)
Ich habe bereits bis Unendlich gezählt. Zweimal, und zurück
geht leider nicht.
Du kannst die Funktion getLeftDistance() nicht aufrufen, wenn die RP6RobotBase.lib eingebunden ist?
Ich habe bereits bis Unendlich gezählt. Zweimal, und zurück
Mit "geht nicht" ist keinen geholfen...Du musst schon sagen, WAS nicht geht, ob es eine Fehlermeldung oder soetwas gibt.
Bei mir fährt der Roboter immer eine längere Strecke zurück, als vorwärtsCode:#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; }
Edit: So immer ungefähr 4mal so lang
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.
Danke. Also muss ich das Ergebnis mal 0.2512 nehmen. So geht es auch. Das ist ja ungefähr das 4fache.Code:#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; }
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);
Lesezeichen