Winkelmessung mit einer freien Achse
Moderator: Guido Körber
Winkelmessung mit einer freien Achse
Hallo,
softwaretechnisch kann ich den Joy-Worrior ansprechen, ich lese die X,Y,Z-Werte mit directX aus.
Ich habe eine Frage zur Realisierung unserer sehr einfachen Anwendung. Wir haben 2 feste Achsen. und der Beschleunigungssensor rotiert in einer Achse frei um 360°. Aufgabe ist es nun den Rotationswinkel zu bestimmen.
So wie wir den Sensor verbaut haben, bleibt der Y-Wert konstant und der X und Z ändern sich periodisch mit 360°.
Der X-Wert beispielsweise hat ein Maximum bei 180° ca. 31800 und ein Minimum bei von ca. 400 bei 90° und 270°
Leider ist das Prinzip des Sensors auch mit der Kalibrierung noch nicht ganz klar. Empirisch würde ich jetzt versuchen, das Minimum und das Maximum, bei einer Umdrehung zu bestimmen und dann einen Sinusverlauf zwischen Minimum und Maximum anzunehmen.
Da ich das physikalische Prinzip noch nicht ganz verstanden habe, wolte ich gerne von Ihnen wissen, erstens ob dieser Weg richtig und zweitens, ob es vielleicht einen einfacheren besseren Weg gibt das Problem zu lösen.
Vielen Dank für Ihre Hilfe
softwaretechnisch kann ich den Joy-Worrior ansprechen, ich lese die X,Y,Z-Werte mit directX aus.
Ich habe eine Frage zur Realisierung unserer sehr einfachen Anwendung. Wir haben 2 feste Achsen. und der Beschleunigungssensor rotiert in einer Achse frei um 360°. Aufgabe ist es nun den Rotationswinkel zu bestimmen.
So wie wir den Sensor verbaut haben, bleibt der Y-Wert konstant und der X und Z ändern sich periodisch mit 360°.
Der X-Wert beispielsweise hat ein Maximum bei 180° ca. 31800 und ein Minimum bei von ca. 400 bei 90° und 270°
Leider ist das Prinzip des Sensors auch mit der Kalibrierung noch nicht ganz klar. Empirisch würde ich jetzt versuchen, das Minimum und das Maximum, bei einer Umdrehung zu bestimmen und dann einen Sinusverlauf zwischen Minimum und Maximum anzunehmen.
Da ich das physikalische Prinzip noch nicht ganz verstanden habe, wolte ich gerne von Ihnen wissen, erstens ob dieser Weg richtig und zweitens, ob es vielleicht einen einfacheren besseren Weg gibt das Problem zu lösen.
Vielen Dank für Ihre Hilfe
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: Winkelmessung mit einer freien Achse
Haben Sie schon mal das "Tilt" Beispiel angesehen? Da wird genau das gemacht, was Sie versuchen.
Re: Winkelmessung mit einer freien Achse
Ja habe ich,
bin aber nicht ganz zurecht gekommen, da es ja nur aus Quelltext besteht und bei meiner Anwendung auch nur ein Winkel von 0 bis 90° anzeigt (nach der Kalibrierung mit dem Kalibrierungstool) und ich bin mir auch nicht ganz sicher, ob der Winkel der hier ausgegeben wird so exakt ist.
Hatte deshalb auf ein paar erklärende Worte gehofft.
Mit freundlichen Grüßen
PhilippK
PS: Bei der Periode hatte ich vorhin eine falsche Angabe gemacht, das Maximum ist bei 0° bzw 360° und das Minimum bei 180°
bin aber nicht ganz zurecht gekommen, da es ja nur aus Quelltext besteht und bei meiner Anwendung auch nur ein Winkel von 0 bis 90° anzeigt (nach der Kalibrierung mit dem Kalibrierungstool) und ich bin mir auch nicht ganz sicher, ob der Winkel der hier ausgegeben wird so exakt ist.
Hatte deshalb auf ein paar erklärende Worte gehofft.
Mit freundlichen Grüßen
PhilippK
PS: Bei der Periode hatte ich vorhin eine falsche Angabe gemacht, das Maximum ist bei 0° bzw 360° und das Minimum bei 180°
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: Winkelmessung mit einer freien Achse
Die Achsen messen die auf sie wirkende Kraft. In Ruhe also die Erdbeschleunigung.
Im einfachsten Fall nimmt man eine einzelne Achse um den Neigungswinkel zu bestimmen, der Wert der Achse ist dann proportional zum Tangens Alpha (oder war es arctan, bin mir momentan nicht sicher). Dabei kann man natürlich nur 180 Grad abdecken und die Winkelauflösung wird geringer wenn man sich der Senkrechten annähert.
Man kann aber auch zwei Achsen als Vektoren verrechnen um die Resultierende zu bekommen, dann lässt sich die Auflösung verbessern, das Minimum liegt dann bei 45 Grad. die Vorzeichen der Achsen muss man dazu verwenden um zu bestimmen in welchem Quadranten sich der Neigungswinkel befindet.
Der von Ihnen angegebene Messwert deutet darauf hin, dass Sie kalibrierte Daten lesen, es ist notwendig die unkalibrierten Daten über das Joystick API zu lesen.
Im einfachsten Fall nimmt man eine einzelne Achse um den Neigungswinkel zu bestimmen, der Wert der Achse ist dann proportional zum Tangens Alpha (oder war es arctan, bin mir momentan nicht sicher). Dabei kann man natürlich nur 180 Grad abdecken und die Winkelauflösung wird geringer wenn man sich der Senkrechten annähert.
Man kann aber auch zwei Achsen als Vektoren verrechnen um die Resultierende zu bekommen, dann lässt sich die Auflösung verbessern, das Minimum liegt dann bei 45 Grad. die Vorzeichen der Achsen muss man dazu verwenden um zu bestimmen in welchem Quadranten sich der Neigungswinkel befindet.
Der von Ihnen angegebene Messwert deutet darauf hin, dass Sie kalibrierte Daten lesen, es ist notwendig die unkalibrierten Daten über das Joystick API zu lesen.
Re: Winkelmessung mit einer freien Achse
Vielen Dank, das hat schon mal geholfen.
Können Sie mir noch sagen, wie ich an die unkalibrierten Daten komme.
Können Sie mir noch sagen, wie ich an die unkalibrierten Daten komme.
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: Winkelmessung mit einer freien Achse
Das mit den unkalibrierten Daten, habe ich jetzt noch nicht geschaft, da ich bisher mit dem .Net Wrapper von DirectX gearbeitet habe. Es scheinten sich die Werte jedoch nur Faktor 4 zu unterscheiden im Vergleich zu den Werten von Downtilt.
Ich habe vorerst mal nur die X-Achse ausgewertet, was im Prinzip auch klappt, jedoch in den Randbereichen 0° und 90° sind die Werte nicht exakt.
Deshalb möchte ich jetzt wie in dem Beispiel den resultierenden Winkel aus 2-Achsen benutzen.
Anders als im Beispiel ist wären es bei mir jedoch die resultierende aus X und Z Achse. Bei mir und auch in dem Tool Downtilt unterscheidet sich der Wertebereich von x und z jedoch. Für z geht der Wertebereich ca. 8000 bis 16000 (wahrscheinlicht exat von 8192 -16384), bei Y von 4096 bis 12288. Welche Bedeutung hat dies?
In Ihrem Beispiel werden sowohl der Y-Wert als auch der X-Wert mit 8192 subtrahiert und dann durch 4096 geteilt.
Muss ich den Grundwert von z dann mit 16384 subtrahieren um ihn dem X-Wert gleichwertig zu machen? In Ihrem Beispiel wird der y-Wert jedoch auch mit 8192 subtrahiert, ist das vielleicht ein Fehler? Ich würde jetzt annehmen, dass er mit 12288 subtrahiert werden müsste.
Außerdem habe ich noch nicht verstanden wozu dass Kalibrierungstool gut ist. Hier werden wohl irgendwelche Offset-Werte ins EEProm geschrieben. Muss ich da irgendetwas beachten, wann sollte die Kalibrierung durchgeführt werden?
Nochmals vielen Dank für Ihre antworten.
Mit freundlichen Grüßen
PhilippK
Ich habe vorerst mal nur die X-Achse ausgewertet, was im Prinzip auch klappt, jedoch in den Randbereichen 0° und 90° sind die Werte nicht exakt.
Deshalb möchte ich jetzt wie in dem Beispiel den resultierenden Winkel aus 2-Achsen benutzen.
Anders als im Beispiel ist wären es bei mir jedoch die resultierende aus X und Z Achse. Bei mir und auch in dem Tool Downtilt unterscheidet sich der Wertebereich von x und z jedoch. Für z geht der Wertebereich ca. 8000 bis 16000 (wahrscheinlicht exat von 8192 -16384), bei Y von 4096 bis 12288. Welche Bedeutung hat dies?
In Ihrem Beispiel werden sowohl der Y-Wert als auch der X-Wert mit 8192 subtrahiert und dann durch 4096 geteilt.
Muss ich den Grundwert von z dann mit 16384 subtrahieren um ihn dem X-Wert gleichwertig zu machen? In Ihrem Beispiel wird der y-Wert jedoch auch mit 8192 subtrahiert, ist das vielleicht ein Fehler? Ich würde jetzt annehmen, dass er mit 12288 subtrahiert werden müsste.
Außerdem habe ich noch nicht verstanden wozu dass Kalibrierungstool gut ist. Hier werden wohl irgendwelche Offset-Werte ins EEProm geschrieben. Muss ich da irgendetwas beachten, wann sollte die Kalibrierung durchgeführt werden?
Nochmals vielen Dank für Ihre antworten.
Mit freundlichen Grüßen
PhilippK
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Winkelmessung mit einer freien Achse
Zur erklärung unseres Tools. Dort wird davon ausgegangen, dass 2G einsgestellt sind. Darum die Teilung durch 4096.
Die Werte, die der JW24 sendet sind aufbereitet um eine Joystickmittelstellung zu erhalten. Darum die 8192, denn das ist die Mittelstellung in diesem Fall und um auf 0 zu kommen halt -8192.
Handelt es sich hier im den JoyWarrior24F8 oder JoyWarrior24F14?
Die Werte, die der JW24 sendet sind aufbereitet um eine Joystickmittelstellung zu erhalten. Darum die 8192, denn das ist die Mittelstellung in diesem Fall und um auf 0 zu kommen halt -8192.
Handelt es sich hier im den JoyWarrior24F8 oder JoyWarrior24F14?
Re: Winkelmessung mit einer freien Achse
JoyWarrior24F14
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Winkelmessung mit einer freien Achse
Also ich hab nochmal in den Quellcode angeschaut und wir werten die X-und Y-Achse aus für die Winkelberechnung.
Klar ist der Sensor in den Randbereichen nicht sehr genau. Ist ist ja auch ein Beschleunigungssensor und kein Winkelmesser.
Wegen den unkalibierten Daten muss man sich mit den HID-Funktionen auseinandersetzten, was nicht ganz untrivial ist.
Stichworte dazu sind:
Was ich aber noch nicht verstanden habe ist, warum X und Z ?
Mit unserem Kalibirerungstool kann man die Null-Lage kalibrieren egal in welcher Lage sich der Senor befindet. Zu beachten ist nur die Z-Achse. Diese ist von Hause auf so kalibirert, dass sie NICHT 0 ist, da wir ja hier bei uns Schwerkraft haben. Darauf wird aber beim Kalibrieren nochmal hingewiesen, wie man die Z-Achse halten muss damit man entweder auf 0 oder 1G schwerkraft kalibriert.
Klar ist der Sensor in den Randbereichen nicht sehr genau. Ist ist ja auch ein Beschleunigungssensor und kein Winkelmesser.
Wegen den unkalibierten Daten muss man sich mit den HID-Funktionen auseinandersetzten, was nicht ganz untrivial ist.
Stichworte dazu sind:
- HidD_GetHidGuid()
- CreateFileW()
- SetupDiGetDeviceInterfaceDetailW()
Was ich aber noch nicht verstanden habe ist, warum X und Z ?
Mit unserem Kalibirerungstool kann man die Null-Lage kalibrieren egal in welcher Lage sich der Senor befindet. Zu beachten ist nur die Z-Achse. Diese ist von Hause auf so kalibirert, dass sie NICHT 0 ist, da wir ja hier bei uns Schwerkraft haben. Darauf wird aber beim Kalibrieren nochmal hingewiesen, wie man die Z-Achse halten muss damit man entweder auf 0 oder 1G schwerkraft kalibriert.