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;
}