Du bist nicht angemeldet.

Werbeanzeige

1

13.03.2021, 17:11

HID-Joystick Achsen-Jitter in Mittelstellung

Hallo,

ich habe einen Logitech Extreme Pro 3D Joystick. Mit dem hab ich vor einigen Jahren (Gekaufte) Spiele gespielt, bis irgendwann etwas mit den Achsen kaputt war und der Joystick irgendwelche Drehbewegungen X/Y ausführte, obwohl er sich in Mittelstellung befand. Das ist aber schon einige Jahre her, deshalb weiß ich es nicht mehr so genau.

Jetzt habe ich den Joystick ausgegraben und versucht an mein Spiel anzudocken. Anbindung erfolgte über HID. Allerdings habe ich folgendes beobachtet:
- Das erste Byte der HID-Daten liefert bei Links-Stellung des Joysticks 0 und bei Rechtsstellung 255. Soweit so gut.
- Jedoch in der Mittelstellung liefert der Joystick alle möglichen Werte, meistens 0xFC, manchmal aber auch 0 und ganz selten die erwartete 128.

Tippe ich den Joystick in Mittelstellung leicht an, schwanken die Werte extrem. (Von 0 bis 255 ist da alles dabei, es tauchen aber vorrangig werte im min bzw. max Bereich auf)

Auch in leichter Rechts/Links Stellung liefert er unpassende Werte, wenn man dann über 25% hinaus geht sind die Werte stabil zwischen 0...~100 für Links-Stellung bzw. ~158...255 für Rechtsstellung.

Dachte mir, ja gut, der ist ja auch kaputt und habe denselben Joystick nochmal bestellt. Allerdings -wie sich im nachhinein herausstellte - gebraucht und er liefert genau das selbe Verhalten. :crazy:

Ich kenne sonen irrsinn aus der Embedded Entwicklung, da gibt es z.b bei billig-Dreh-Enodern undefinierte Zustände, die man berücksichtigen sollte. Ich hätte allerdings nicht erwartet dass mir so ein quatsch in der PC-Welt begegnet, wo die Hardware mit HW-Treibern und Software daherkommt. Ich habe auch hinweise gefunden, dass Leute schon davon ausgehen, dass die Range -127 ... +127 gilt [1] und so ein Jittering in der Mittelstellung nicht auftreten sollte / bzw. berücksichtigt werden muss.

Es scheint ja auch so zu sein, dass moderne Joysticks mit 16 bit achsenwerten arbeiten. Bevor ich jetzt noch mehr Nerven in den Sand setze und irgendwelche statemachines programmiere um meinen defekten (?!) joystick softwareseitig zu kompensieren frag ich lieber mal nach, was eure Erfahrungen mit Joystick Anbindung sind. Welche Joysticks/SW-Treiber empfehlt ihr?

Eigentlich hätte ich die Anbindung über das Mono-Framework gemacht, aber dieses scheint den Joystick nicht zu unterstützen, also habe ich irgendeine HID-Library verwendet. Die scheint auch zu funktionieren, ich denke das Problem liegt an der Joystick-Hardware. (Die Z-Achse funktioniert, X/Y Achse liefert o.g. Jittering in der Mittelstellung und ich meine mich wie gesagt zu erinnern, dass auch gekaufte spiele Probleme mit dem Joystick hatten)

Daraus ergeben sich die Fragen:
1. Kennt ihr so ein Jittering bei der Mittelstellung der Joystick Achse?
2. Muss ich das Softwareseitig kompensieren oder ist der Joystick defekt?
3. Welche Treiberarchitektur empfehlt ihr für Joystick Anbindung als Referenz?
4. Welche aktuellen Joysticks/Treiber mit 16-Bit Achsenwerten empfehlt ihr als Referenz?



[1] https://github.com/betaflight/betaflight/issues/6791

FSA

Community-Fossil

  • Private Nachricht senden

2

15.03.2021, 06:26

Hört sich eher danach an, dass die Drehgeber schmutzig sind.
Hier ist eine Anleitung zum Saubermachen: http://anythingispossibleyou.blogspot.co…repair-and.html

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veralteten strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

3

26.03.2021, 23:41

ok danke schonmal für den tip.

ich denke, die hardwareseite funktioniert jetzt.

Allerdings habe ich probleme beim auswerten der HID Daten.

Von der HID-Library erhalte ich 10 Bytes daten pro hid-report. Das erste Byte scheint die X-Achse zu sein. (das erste byte des hid reports "ReportId" wird von der HID-Library abgeschnitten)

Beispiel:

X-Achse: Mittelstellung: 0xff
X-Achse: Links-stellung: 0xfe...0x00 (Mitte...Links)
X-Achse: Rechtsstellung: 0x00...0xff (Mitte...Rechts)

Die anderen bytes ändern sich nicht und mehr Daten sehe ich von der HID-Library nicht.
Wie soll ich aus diesen Daten die Stellung der X-Achse ableiten? (Ich hätte gerne für die Applikation float werte von -1.0 bis 1.0.)
Muss ich das mit einer Statemachine machen?!
Oder schneidet da die HID library zuviele daten ab?
Es soll ja laut marketing der Joystickhersteller auch exemplare mit 16 Bit Achsenwerten geben.
Davon sehe ich in diesen Daten aber nix.
Also was ist da los? Schneidet die HID-Library irgendwas ab, oder muss man X/Y Achse mit einer Statemachine auswerten?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SeeBee« (27.03.2021, 00:01)


David Scherfgen

Administrator

Beiträge: 10 318

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

27.03.2021, 08:50

Da wird bestimmt irgendwas abgeschnitten.

5

27.03.2021, 10:53

Da wird bestimmt irgendwas abgeschnitten.


Ja das vermute ich auch. Habe allerdings etwas in die HidLibrary reingedebuggt und die treiber strukturen gefunden, da steht 11 byte drinne... naja, werde das vl. mal mit sharpdx probieren. oder doch auf unity gehen, wobei ich ehrlich gesagt keine lust habe mir die einarbeitung in das framework zu geben ;-p

Werbeanzeige