Jump to content

ROSEDOLA

Members
  • Gesamte Inhalte

    7
  • Benutzer seit

  • Letzter Besuch

ROSEDOLA's Achievements

Newbie

Newbie (1/14)

0

Reputation in der Community

  1. Wieso, wer ein Kompass braucht kann die Werte für das Magnetfeld auslesen und entsprechend berechnen: def CalcHeadingNoCompensation(x,y) headingRadians = Math.atan2(y, x) if headingRadians < 0 headingRadians += 2 * Math::PI end heading = headingRadians * 180 / Math::PI heading.round() end Funktioniert wunderbar und synchron mit meinem Yak (+/- 2°-3°, da ist akzeptabel). Aber Vorsicht, bei Roll und Pitch ändert sich das Heading, da muss noch eine sw-seitige Kompensation rein, die braucht Roll und Pitch - und die gibt es ja nun... Gruss, Dirk
  2. Die Formeln habe ich aus dem Forum / oder wars ne frühere Version der IMU Docu... ? Die für "z" ist verschwunden.... Im engl. Forum nach IMU Values suchen. Müssten von Dir gewesen sein... Gruss, Dirk
  3. @borg Das hatte ich in Ruby getestet. Leider komme ich damit überhaupt nicht weiter.... Gruss, Dirk
  4. Also, nachdem ich nun wieder mal Zeit gefunden habe, mit der IMU zu "spielen" komme ich nun "scheinbar" zu einem "ersten" brauchbaren Ergebnis. Zielsetzung war: Erkennen von Roll, Pitch und Yaw (in einem Flugzeug) - getestet habe ich bisher nur am Schreibtisch mit Drehen, usw.... Der Kurs, errechnet aus dem Magnetfeld, ist noch nicht "Tilt-Compensated", was aber zwingend notwendig ist: Init der IMU imu.set_convergence_speed 250 sleep 5 imu.set_convergence_speed 5 q = [] q = imu.get_quaternion base_x = q[0] base_y = q[1] base_z = q[2] base_w = q[3] Konjugation x = -x y = -y z = -z Und die Winkel: x_angle = Math.atan2(2*y*z - 2*x*w, w*w + z*z - x*x - y*y)*180/Math::PI + 180 y_angle = Math.atan2(2*w*y + 2*x*z, w*w + z*z -x*x - y*y)*180/Math::PI + 180 z_angle = Math.atan2(-w*y + x*y + y*x - w*w, w*w + y*y - z*y - x*x)*180/Math::PI + 180 Diese Formeln stammen aus dem Forum, nicht von mir.... Ich werde am WE oder Anfang der Woche mal einen Flug machen und es testen. Das Brick liegt mit LED's nach oben auf einem MasterBrick gesteckt. Das IMU Brick hängt sich des öfteren auf, wenn ich dort ein lCD Prickelt einstöpsle... Code ist Ruby - wenn das nun klappt, werde ich mal nach IOS wechseln... Gruss, Dirk
  5. hmmh... Ich habe doch nur die Anpassungen für "Save Orientation" vorgenommen. Ansonsten sind das doch die Formeln..... Irgendwie stehe ich vor einem grossen Berg und sehe den Gipfel nicht :-D
  6. Also, ich glaube ich verstehe ich etwas grundlegendes nicht.... Wenn ich den IMU Brick bei hochfahren sich seine Position finden lasse, für 5 Sekunden (über convergence speed gesteuert) und nur mit Quaternion auslese, welche ich dann später umrechne, erwarte ich irgendwie ein anderes verhalten. Ich habe mein Vorgehen mir aus verschiedenen Beiträgen "zusammen gesammelt".... Ich speichere eine "Orientation und lese dann Quaternions aus... Danach konjugieren und ich durch entsprechende Formeln in die einzelnen Winkel (x/y/z, bzw. roll/pitch/yaw) umrechnen. Wenn ich aus einer "Nullposition" um genau eine Achse "kippe / drehe" dann würde ich erwarten, dass auch nur ein Winkel sich ändert. Und da isst nicht immer der Fall. Und der Z_Angle verhält sich völlig sonderbar, zeigt aber keinesfalls die Rotation um die entsprechende Achse in Grad an ... Ändere ich den Pitch, dann bitte nur Pitch-Winkel ändern, Selbiges für Roll oder Yaw. Solange ich aber diese Werte nicht auf die Reihe bekomme brauche ich gar nicht an einen "Tilt Compensated" Compass zu denken Dies hier sind die Formeln, die ich verwende (Ruby) wn = w * rel_w - x * rel_x - y * rel_y - z * rel_z xn = w * rel_x + x * rel_w + y * rel_z - z * rel_y yn = w * rel_y - x * rel_z + y * rel_w + z * rel_x zn = w * rel_z + x * rel_y - y * rel_x + z * rel_w x_angle = Math.atan2(2*yn*zn - 2*xn*wn, wn*wn + zn*zn - xn*xn - yn*yn)*180/Math::PI y_angle = Math.atan2(2*wn*yn + 2*xn*zn, wn*wn + zn*zn -xn*xn - yn*yn)*180/Math::PI z_angle = Math.atan2(-wn*yn + xn*yn + yn*xn - wn*wn, wn*wn + yn*yn - zn*yn - xn*xn)*180/Math::PI Was ist nun mein Denkfehler....? Vielen Dank im Voraus, Dirk
  7. Ich habe ähnliche Probleme.... Rotation um nur eine Achse bewirkt häufig auch eine Rotation um eine andere Achse... Eine Bitte an Tinkerforge: Könntet Ihr bitte mal ein Tutorial erstellen und hier veröffentlichen? Thx, Dirk
×
×
  • Neu erstellen...