# How the inverse kinematics is calculated



The concept uses the following assumptions:
  * The degrees-of-freedom are limited to 
    * Shoulder joint with 3dof and restrictive joint limits
    * The elbow with only 1dof
    * The wrist with 3dof and restrictive joint limits
  * for humans, within the reachable elbow positions, some areas are more likely to be used due to less muscle strain

## Proposal 1 for am pose estimate

Input:
  * controller position
  * shoulder position estimate

Output:
  * Elbow position
  * Shoulder backslash (required to improve shoulder position estimate)

### Step 1: Initial elbow position estimate

We try to get a first good estimate using a very simple method: given 
  * a vector *SpineShoulder*, going from the spine at approx. breast-hight to the shoulder position, and
  * a vector *ShoulderWrist*, going from the shoulder to the wrist position, which can be easily inferred from the controller position,
  * calculate the cross-product like this for the **right shoulder**:
  ```var elbow_dir = SpineShoulder.cross(ShoulderWrist)```.

### Step 2: Consider controller orientation


### Step 3: Consider shoulder orientation


### Step 4: Determine shoulder backslash for shoulder position estimation

