Hallo,

danke für Deine Antwort.

Ich denke aber auch, das in diesem Forum ein "du" besser angebracht ist, obwohl ich keine "16" mehr bin.

In meiner Routine will ich nur die Winkeländerung ermitteln und den absoluten Winkel im Raum. Hierzu ist muss ich den gefahrenen Kreisbogen, welcher sich durch die Differenz der gefahrenen Strecke ergibt, berechnen.

Da ich "unsigned int" als Stepzähler verwende, ist folgender Code notwendig für die Differenzberechnung:
Code:
        if( nStepsLeft > nStepsRight) 
            {
             deltaOrientation = -1.0 *(double) (nStepsLeft-nStepsRight) * RADPROIMPULS; // Calculation the change in the angle during the drive             }
         else
             {
             deltaOrientation = (double) (nStepsRight-nStepsLeft) * RADPROIMPULS; // Calculation the change in the angle during the drive
             }
Die Konstante gibt mir dann für eine Schrittdifferenz die Winkeldifferenz in Radiant an.

Das "Minuszeichen" muss eingerechnet werden, da ich mit "Unsigned" rechne und bei der Differenzberechnung die Richtung der Winkeländerung verloren habe. Da es sich ja um eine Winkeldifferenz handelt.

Die Konstante "RADPROIMPULS" ist hierbei eine Konstante, welche der Compiler ermittelt, anhand der mechanischen Anordnung.

Klar ist ja auch, das die gefahrene Strecke, bei einer Winkeländerung, größer wird, je größer der Radius ist (der Kreisbogen ist länger).
Google mal nach Odometrie. Meine Odometrie Function (E-Compass ist die Differenz zwischen L/R Encoder,delta_distance ist Summe L/R encoder):
Was bitte sollen dann diese Zeilen sein ? In meiner Routine wird nur die Winkeländerung berechnet.
Code:
(nStepsLeft-nStepsRight)
Beide Variablen haben bei Aufruf der Routine die Schrittänderung seit dem letzten Aufruf der "Encoderroutine", welche hier nicht aufgeführt ist, aber richtig arbeitet.

Die Zeilen addieren die Winkeländerung zur aktuellen Position:

m_ActualOrientation = AjustToTwoPI(m_ActualOrientation + deltaOrientation);
Die Funktion "AjustToTwoPI" achtet hierbei nur darauf, das der Winkel weiterhin im Bereich eines Kreises bleibt (also 2+PI).
Damit die sin/cos Funktionen weiterhin korrekt arbeiten.

Bei mir wird ja nur der Winkel falsch ermittelt, nicht die gefahrene Strecke/Weg zurückgerechnet.
Es wird die korrekt Position angefahren, welche er bei dem ersten Kommando bekommt.

Folgepositionen sind aber bedingt durch den falschen Winkel komplett falsch.

Gruss R.