Winkelmessung mit einer freien Achse

Dies ist das deutsche Forum für alle Themen um den JoyWarrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
PhilippK
Posts: 5
Joined: Thu Jan 20, 2011 11:00 am

Winkelmessung mit einer freien Achse

Post by PhilippK »

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
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Winkelmessung mit einer freien Achse

Post by Guido Körber »

Haben Sie schon mal das "Tilt" Beispiel angesehen? Da wird genau das gemacht, was Sie versuchen.
PhilippK
Posts: 5
Joined: Thu Jan 20, 2011 11:00 am

Re: Winkelmessung mit einer freien Achse

Post by PhilippK »

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°
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Winkelmessung mit einer freien Achse

Post by Guido Körber »

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.
PhilippK
Posts: 5
Joined: Thu Jan 20, 2011 11:00 am

Re: Winkelmessung mit einer freien Achse

Post by PhilippK »

Vielen Dank, das hat schon mal geholfen.

Können Sie mir noch sagen, wie ich an die unkalibrierten Daten komme.
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Winkelmessung mit einer freien Achse

Post by Guido Körber »

PhilippK
Posts: 5
Joined: Thu Jan 20, 2011 11:00 am

Re: Winkelmessung mit einer freien Achse

Post by PhilippK »

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
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Winkelmessung mit einer freien Achse

Post by Christoph Jung »

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?
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
PhilippK
Posts: 5
Joined: Thu Jan 20, 2011 11:00 am

Re: Winkelmessung mit einer freien Achse

Post by PhilippK »

JoyWarrior24F14
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Winkelmessung mit einer freien Achse

Post by Christoph Jung »

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:
  • HidD_GetHidGuid()
  • CreateFileW()
  • SetupDiGetDeviceInterfaceDetailW()
Die Achsen haben alle einen Wert zwischen 0 und 16k. Allerdings werden diese Randwerte nur bei beschleunigung erreicht. Wenn man den Sensor nur dreht sind die Werte so zwischen 4000 und 12000 wenn man ihn ruhig bewegt.

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.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Post Reply