Rotation eines Roboters mit Berücksichtigung der vorherigen Blickrichtung
Guten Abend,
ich befürchte ich habe einen kleinen Denkfehler! Ich möchte einen Roboter entsprechend des neuen Zieles rotieren lassen. Die Funktion erhält die Blickrichtung in welcher er sich momentan befindet, sowie die Ausgangs und Zielkoordinaten des Roboters. Dann Soll der neue Winkel zum neuen Punkt(Ziel) berechnet werden...
Code:
public int rotate(int x, int y, int t_x, int t_y, double dir){
double Dir_rad=0;
Dir_rad=Math.toRadians(dir);
double angle=(Math.atan2(t_y-y,t_x-x));
double new_Angle=(angle-Dir_rad)%(2*Math.PI);
double Robot_angle=0;
Robot_angle= Math.toDegrees(new_Angle);
return (int) Robot_angle;
}
int x und int y sind die Ausgangskoordinaten und t_x sowie t_y die Zielkoordinaten.
Jetzt soll sich der Roboter in Richtung des neuen Zieles Drehen. Dabei wird die vorherige übergebene Blickrichtung berücksichtigt.
Hoffe wirklich sehr, mir kann jemand bei meiner Funktion helfen!
Vielen Dank im vorraus!!
Schönen Abend noch!
Liste der Anhänge anzeigen (Anzahl: 1)
Gern geschehen!
Ich hoffe, ich habe die Frage nach dem Überschreiben von actual->Orientation richtig verstanden:
Nun, es kommt auf die Bewegung des Roboters an:
Anhang 32541
Wenn Du zuerst drehst und anschließend fährst, dann ist der neue Winkel Deiner aktuellen Pose:
actual.Orientation = actual.Orientation + Change.Angle;
wenn Du allerdings eine Bahn fährst, die anhand von zwei PID-Reglern die Regelungsdifferenz von Distanz und Winkel auszugleichen versuchen, dann wirst Du
a) während der Fahrt zyklisch die aktuelle Pose Deines Gefährtes berechnen (aus den Änderungen Deiner Radencoderwerte),
b) daraus dann den ChangeVector zum Zielpunkt ermitteln und
c) zuletzt aus den resultierenden Regeldifferenzen "Winkel" und "Distanz" dann die PWM-Werte für die Motoren ermitteln.
Ich weiß, das wirft jetzt weitere Fragen auf, allerdings hab ich so den Verdacht, ich habe Deine Frage missverstanden.