OpenXR hand tracking input not consistent for different hand rotations (get motion controller data)

Hi,
I am using the “getMotionControllerData” node in blueprints to get the finger curls using OpenXR, since the steamVR plugin with its corresponding “getFingerCurlsAndSplays” node has been deprecated/removed in newer unreal engine versions, as shown in picture 1. I am using valve index controllers to get individual finger curls. I am using unreal engine 5.1.1.


image 1: get motion controller data using OpenXR

However, it seems that the finger rotation data I get from OpenXR seem to be altered by the rotation of the hand. As shown in the following images, when displaying the finger positions and rotations with debug arrows (code for debug arrows: debug arrows for openxr hand keys posted by anonymous | blueprintUE | PasteBin For Unreal Engine) the fingers seem to curl a significant amount when the hand-root is pointing downwards. The images were taken without touching the finger curl sensors of the controller. Image 2 shows the fingers straight as expected, but in image 3 there are visible curls in all of the fingers, which occur when the hand root is pointing downwards.

image
image 2: straight fingers, as expected


image 3: curled fingers when motion controller is rotated facing down, even though no fingers are touching the controller

The following images 4-7 are for reference, the finger curls do not seem to change when rotating the hand horizontally, only pointing up to pointing down is influencing the finger curls.

image
image 4: hand pointing upwards, fingers as straight as possible


image 5: hand pointing downwards, maximal finger curls

image
image 6: hand pointing sideways, hand palm facing up, fingers partly curled, same as in image 7

image
image 7: hand pointing sideways, hand palm facing down, fingers partly curled

It is possible to account for the unexpected finger curls by adding an offset based on the hand pointing direction, but that seems quite dirty of a fix. I am assuming that this is either caused by incorrect implementation on my part of the getMotionControllerData node or part of the growing pains of the new OpenXR interface. Either way, is there a way to get the finger curls to work properly in the first place?

If you want to reproduce this issue (I tested only for valve index), you can use the unreal engine vr template, enable the OpenXR Fingertracking Plugin and paste the code for the debug arrows I provided into a tick event.

Best regards,
Florian

2 Likes

Hi Florian, did you find a fix for this? I think that open XR uses a different coordinate system to Unreal. Perhaps the rotation needs to be transformed by the rotation of the hand? You could try using transform rotation or compose transforms.