PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kleinster Winkel im Kreis berechnen



hellobello
24.03.2015, 18:07
Hallo Gemeinde,
komischer Titel, aber ich weiß nicht wie ichs anders ausdrücken soll.

Folgendes:
Ich habe einen Winkelsensor verbaut. Der reicht von -180 bis +180 Grad. Nun soll der Bot sich in die Richtung des kleineren Winkels drehen, was aber an der "Grenze" der beiden Maxime sich als problem darstellt.

Beispiel: Sollposition sei 170°, Istposition sei -170°. Nun ist es ja Blödsinn wenn sich der Bot um 340 Grad drehen würde, anstatt nur die erforderlichen 20 Grad.

Aber ich komme auf keinen grünen Zweig. Nur auf gefühlte eine Million IF Anweisungen... Das geht aber bestimmt einfacher, nur, wonach muß ich suchen???

Grüßle aus Oberschwaben.

Crazy Harry
24.03.2015, 18:25
Wie wäre es wenn du mit 0..359° rechnest ?
Beispiel: ist-Position=10° soll-Position=350°
Differenz 340°
340 ist grösser als 180 also 360-340 linksrum

Beispiel 2: ist=40° soll=210°
Differenz 170°
170 ist kleiner als 180 also 170 rechtsrum

achja wenn ist>soll anderstrum ;)

Beispiel 3: ist=230° soll=70°
Differenz -160°
abs(-160) ist kleiner als 180 und Zahl ist negativ also 160 linksrum

Beispiel 4: ist=240° soll=30°
Differenz -210°
abs(-210) ist größer als 180 und Zahl ist negativ also 360-210 rechtsrum

.... und den Sonderfall 180° auch berücksichtigen

witkatz
24.03.2015, 20:47
gefühlte eine Million IF Anweisungen... Das geht aber bestimmt einfacher,
Bewegen sich Zielposition und Sollposition beide im Wertebereich -180° .. 180°?
Mit (Positionsdifferenz + 360) modulo 360 bekommst du die Entfernung in positiver Drehrichtung im Bereich 0..360. Ein einfacher Vergleich mit 180 genügt dann. Ich drück das mal in C so aus:

if((Sollposition - Istposition + 360) % 360 <= 180)
FahreRechts();
else
FahreLinks();


Gruß
witkatz