-         

Ergebnis 1 bis 5 von 5

Thema: Atan2 problem bei kartesichen Koordinaten und Zielwinkel

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332

    Atan2 problem bei kartesichen Koordinaten und Zielwinkel

    Anzeige

    Hallo Zusammen,

    ich habe ein Problem mit atan2 bei der Verwendung von kartesichen Koordinaten und dem zu erechneten Winkel für die neue Zielposition.

    Formel:

    deltaWinkel = atan2( deltaY, deltaX ) ;

    Habe ich den Wert DeltaY=0, jedoch einen deltaX , so erhalte ich immer einen deltaWinkel von 90°. Dies ist auch richtig nach der Definition von atan2.

    Jedoch wenn ich eine Karte abfahre und Punkte anfahren will, welche immer den gleichen Y Wert haben (gerade), ist delta Y = 0.

    Mein Robby dreht sich dann aber um 90°, obwohl er eigentlich gerade ausfahren sollte.

    Was mache ich falsch?

    Gruss Ritchie
    Kaum macht man es richtig, schon funktioniert's ...

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    24
    Beiträge
    601
    Hi,

    heißt das also, du vergleichst die Position des Roboters mit der Zielposition, berechnest daraus deltaX und deltaY und aus diesen Werten dann den Winkel?

    Du bräuchtest dann noch eine Routine, welche den Punkt, auf dem der Roboter jetzt steht, auf den Null-Punkt des Koordinatensystems verschiebt, und den Zielpunkt in Bezug auf den anderen Punkt ebenfalls. Dann kannst du die atan-Funktion zur Winkelbestimmung einsetzen.


    War jetzt nur mal mein Ansatz, da ich bei der IK meines Hexas derzeit mit ähnlichen Routinen zu tun habe.


    lg ikarus_177

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    Ritchie,

    die Formel, die Du verwendest, setzt voraus, dass die Fahrtrichtung Deines Robby in Richtung der x-Koordinate zeigt. Wie mir scheint , ist Dein Robby anderer Meinung und tut so, als führe er in Richtung der y-Koordinate. Vertausche im Argument des atan2 mal DeltaX und DeltaY. Dann klappt's!

    mare_crisium

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332
    Nun ja,

    das mit X und Y tauschen schaue ich mir mal an:
    Hier der Teilausschnitt des Code:

    Code:
    	DeltaX = EndPosition.x - StartPosition.x;					// Berechne Differenz zum Ziel
    	DeltaY = EndPosition.y - StartPosition.y;					// 
    	if ( DeltaY == 0.0 && DeltaX == 0.0 )
    		RotationAngle = 0.0;
    	else
    		{
    		RotationAngle = atan2( DeltaY , DeltaX ); 				// Berechne kürzesten Winkel in WinkelWert
    //		RotationAngle = fmod( (RotationAngle - BaseOrientation) , (ZWEI_PI));
    		}
    
    	if ( RotationAngle != 0.0 )																// Ist die Ausrichtung o.k.
    		{
    		TargetOrientation	= BaseOrientation +  RotationAngle; 		// Winkeldifferenz ermitteln
    		TargetOrientation= AjustToTwoPI(TargetOrientation );			// Anpassung an Vollkreis
    		RotationPulse = (int) (RotationAngle / RADPROIMPULS);	// Endcoder Impulse der Strecke
    		}
    	else
    		{
    		TargetOrientation = BaseOrientation;					// Ausrichtung hat sich nicht geändert
    		RotationPulse=0;												// Keine Drehung notwendig. Ausrichtung korrekt
    		}
    Gruss Ritchie
    Kaum macht man es richtig, schon funktioniert's ...

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332
    Hallo,

    ich vermute meinen Fehler in der Handhabung des Winkels.

    Innerhalb des Programmes arbeite ich mit Winkelangaben von 0-> 2PI.

    ATAN2 arbeitet aber mit Angaben von -PI bis +PI.

    Da werde ich wohl irgendwo noch einen Bug haben.

    Gruss Ritchie
    Kaum macht man es richtig, schon funktioniert's ...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •