Skip to content

HandPose Reference

Max Lammers edited this page Sep 1, 2021 · 5 revisions

(WIP)

This guide deals with the values inside the HandPose generated by HapticGloves, thier coordinate system, and how they can be used to animate a hand model

Overview

The HandPose is a class containing all positions- and rotations that can be used to represent a hand in 3D space. It consists of four variables:

The isRight boolean variable shows that this HandPose was generated for a right hand (if true) - or left hand (if false). Its mainly used to match a HandPose to the appropriate (virtual) hand.

The handAngles parameter represents the articulation of the finger's joints, in radians, relative to the previous hand bone. It is a 5x3 array of Vectors (Vect3D), which represents these angles as Pronation/Supination (x), Flexion/Extension (y) and Abduction/Adduction (z) of said joint. The first index indicates the finger, from thumb (0) to pinky (4), while the second indicates the joint of said finger. It does not include the fingertip.

The jointPositions represent the position of the hand joints in 3D space, in millimeters, relative to the wrist (0, 0, 0). JointPositions is a 5x4 array of Vectors (Vect3D). The first index of this array indicates the finger, from thumb (0) to pinky (4), while the second indicates the joint of said finger, including the fingertips. Use these to draw a wireframe, or to calculate the distance between finger joints.

The jointRotations represent the 3D (quaternion) rotation relative to the wrist. Note that "relative to the wrist" does not take into account the (IMU) rotation of the glove. JointRotations is a 5x4 array of Quaternions (Quat). The first index indicates the finger, from thumb (0) to pinky (4), while the second indicates the joint of said finger, including the fingertips. By 'multiplying' the output quaternions of each joint with the quaternion rotation of the wrist, you can get each rotation in your world space.

Coordinate System

  • The x-axis is aligned along the metacarpal bone of the middle finger.
  • The y-axis points towards the thumb of the right hand, and towards the pinky of the left hand.
  • The z-axis runs perpendicular to the hand palm, going up from the dorsal side of the hand.

When working with joint angles, note that pronation/supination and abduction/adduction have opposite signs (+/-) for a left- and right hand due to them being opposite sides of the body.

  • Pronation / Supination, a.k.a. the twist of the finger, is the angle around the x-axis (roll)..
  • Flexion / Extension of the finger is the angle around the y-axis (pitch)
  • Abduction / Adduction, a.k.a. the spreading of the fingers, is the angle around the z-axis (yaw)

Coordinate System - Visualized

Mapping a HandPose to a Virtual Hand Model

Using the SenseGlove Unity SDK

SG_HandAnimator & SG_HandModelInfo

Using your own animation method

This greatly depends if you're using articulation angles or quaternion rotations (relative to the wrist, or to the world origin)