PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kompass zur exakten Ausrichung Mathe-Problem



Unregistriert
05.09.2014, 19:55
Hallo an Alle,

ich habe da ein Problem dass mich jetz schon den kompletten Abend gekostet hat und ich bekomme es einfach nicht hin.

Erst mal zur Erklärung:
Ich habe eine elekt. Kompass der mir nach einer Berechnung die Abweichung zu meiner Startausrichtung im Bereich von +/- 180° liefert. D.h. wenn ich ihn um 30 Grad nach rechts drehe, bekomme ich (logischerweise) zurück, dass er um +30 gedreht ist. Soweit so gut.
Ich will das ganze jetzt nutzen um mich exakt zu drehen. (Der Roboter hat Ketten und dreht somit ziemlich ungenau.)
Ich gebe vor, dass er sich um 90° drehen soll. Wenn er die 90° nicht exakt erreicht hat, wird nachkorrigiert, bis er richtig steht. Ich gebe also einen "Zielwinkel" vor (Relative Ausrichtung zum Startwinkel), auf den er sich ausrichten soll.

Das Problem:
Den "Fehler-Winkel", der nachkorrigiert werden muss, kann ich problemlos berechnen, aber bei der Drehrichtung bekomme ich Probleme.
Ich wollte es erst irgendwie kurz und schnell lösen, da ich nicht erwartet hatte, dass mir das ganze solche Probleme bereitet. Nachdem das nicht funktioniert hat, habe ich versucht, jeden möglichen Fall durch "if's" abzudecken. Da es verdammt viele verschiedene Möglichkeiten gibt, die man berücksichtigen muss (unterscheidl. Vorzeichen der Winkel,...) , komme ich dauernd durcheinander und habe jetzt aufgegeben :D
Wird vielleicht klarer, wenn man es aufzeichnet. (Richtung in die der Roboter zeigt, Ziel-Richtung und daraus resultierende Drehrichtung). Auf dem Blatt sieht es relativ einfach aus, aber ich bekomme es einfach nicht in mein Programm übertragen.

Wäre toll, wenn mir jemand helfen könnte !

Mit freundlichen Grüßen,
Andreas R.

Mcgrizzly123
05.09.2014, 22:12
Hi

nur als Idee wie wäre es wenn man die Rohdaten vom Kompass -180 bis +180 umrechnet, dass man 0 bis 360 Grad erhält. Damit müsste sich der Rest schon vereinfachen lassen.

White_Fox
05.09.2014, 23:05
Nachdem das nicht funktioniert hat, habe ich versucht, jeden möglichen Fall durch "if's" abzudecken.
Ohne dein Programm im Einzelnen zu kennen (Ist das C oder was höheres?) würde ich spontan behaupten, dass eine Switch-Abfrage den ganzen Code sehr viel übersichtlicher gestalten würde. Und die Konvertierung von -/+180 nach 0-360 (einfach nur 180 draufaddieren bzw. bei Überlauf wieder 360 subtrahieren) könnte das Ganze tatsächlich erheblich vereinfachen.

Che Guevara
05.09.2014, 23:34
Hi,

ich würde einfach eine kleine Abfrage reinmachen, ob abs(Soll-Ist) < 180 oder nicht. Je nachdem musst du dann nur noch in die eine oder andere Richtung drehen.
Oder stelle ich mir dein Problem gerade zu einfach vor?

Gruß
Chris

Rabenauge
05.09.2014, 23:58
https://www.roboternetz.de/community/threads/65291-Links-oder-rechtsrum-kürzer Da hatte ich das gleiche Problem.
Ich habs inzwischen in Griff.
Zuerst muss die Kursabweichung zwischen Soll und Ist berechnet werden:

kursAbweichung=(winkelSoll-winkelIst)%360;
if(kursAbweichung<0)
{kursAbweichung +=360;}

und dann teilt man es auf:
if(kursAbweichung<=180) // müssen wir rechtsrum
if (kursAbweichung>180) //nach links lenken

funktioniert einwandfrei.

Unregistriert
06.09.2014, 10:26
Vielen Dank für eure Antworten !

Der Kompass liefert mir eigentlich 0-360° :D ich habs selber in +/- 180 umgerechnet. Kam mir einfacher vor. Da hab ich mich wohl getäuscht:D.

Ich werde den code-schnipsel mal testen.
Irgendwie habe ich glaube ich auch noch Probleme mit dem Kompass (CMPS10). Der spinnt manchmal.

Vielen Dank nochmal ! Endlich mal ein Forum, das wirklich weiterhilft ;)

Rabenauge
06.09.2014, 16:05
Wenn ein magnetischer 3achs-Sensor ist (ich benutze den HMC5883l), muss der kalibriert werden!
Sonst funktioniert er nur mehr oder weniger- und nur bei grösserem Abstand zu Eisen oder Magnetfeldern überhaupt brauchbar.