Recommanded way to Read Finger Curl value from Quest3 for teleoperation on a robot hand

Is there a recommended way to read finger curl value?

I have been trying out different method for reading the angle difference between the finger tip and the OVRhand. I realized the angle is changing with hand yaw rotation in a random magnitude in different hand posture.

For example, index finger point up, it would have 0.6 rad difference if i rotation around world Y axis for Pi rad. curl index finger point up, it would have 0.1 rad difference if i rotation around world Y axis for Pi rad.

The pose confidence_high is all true in all iteration. I understand that the hand tracking on quest 3 isn’t the best, but I don’t see the virtual hand is changing that much.

    private float MeasureFingerCurl(Transform metacarpal, Transform distal, Transform intermediate, OVRHand hand, Transform wrist)
    {
        // Check tracking confidence and validity
        bool isHighConfidence = hand.IsDataHighConfidence;
        bool isValid = hand.IsDataValid;
        
        UnityEngine.Debug.Log($"Hand Tracking - High Confidence: {isHighConfidence}, Valid: {isValid}");

        Quaternion wristRotation = wrist.rotation;
        // Calculate vectors representing the bones (from proximal to distal end)
        Quaternion metacarpalOrientation = Quaternion.Inverse(wristRotation) * metacarpal.rotation;
        Quaternion distalOrientation = Quaternion.Inverse(wristRotation)*distal.rotation;
        
        // Calculate angle between the vectors (convert from degrees to radians)
        float angleRadians = distalOrientation.eulerAngles.z*Mathf.Deg2Rad;
        // Normalize the angle to be between 0 and 180 degrees
        if (angleRadians > 180f)
            angleRadians = 360f - angleRadians;
        
        UnityEngine.Debug.Log($"Finger Vector - Confidence: {(isHighConfidence ? "High" : "Low")}, Valid: {isValid}, Rotation: {distalOrientatio.eulerAngles}, Angle: {angleRadians}");
        
        return angleRadians;
    }