MATLAB File Help: HebiKinematics/getInverseKinematics
HebiKinematics/getInverseKinematics
```  getInverseKinematics (getIK) calculates positions for a
desired end effector pose.

This method computes the joint positions associated to a
desired end-effector configuration. The end effector is
assumed to be the last body in the kinematic chain.

getInverseKinematics uses a gradient-descent based local
optimizer to find a valid configuration.  This means that
the quality of the solution depends on a good starting
point for the optimization. See 'initialPositions' detail
below, as this parameter should be used if at all possible.

There are a variety of optimization criteria that can be
combined depending on the application. Available parameters
include:

Parameter       EndEffector Target      Size / Units

'XYZ'           xyz position in [m]     3x1 in [m]

'TipAxis'       z-axis orientation      3x1 unit vector
of the last body in
in chain [unit vector]

'SO3'           3-DoF orientation       3x3 rotation
matrix

Note that 'XYZ' supports NaN for dimensions that
should be ignored. For example, a planar arm may use
the target position of [x y NaN].

All target positions and orientations are expressed in
the base frame.

'MaxIterations' ('MaxIter') sets the maximum allowed
iterations of the numerical optimization before returning.
This can prevent IK from taking a long time to run, at the
expense of solutions that are potentially less accurate.
The default value is 150 iterations.

'InitialPositions' ('Initial') provides the seed for the
numerical optimization. By default the optimization seeds
with all zeros. It is highly recommended that you specify
seed positions whenever you are using getInverseKinematics.

Examples:
% Inverse kinematics for a 3-DoF arm, specifying initial
% joint angle positions.
xyz = [0.2 0.1 0.0];
initialJointAngs = [0 -pi/4 pi/2];
waypoints = kin.getInverseKinematics( 'XYZ', xyz, ...
'IntialPositions', initialJointAngs );

% Inverse kinematics for a 5-DoF arm, specifying initial
% joint angle positions.
xyz = [0.2 0.1 0.0];
tipAxis = [0 0 -1];  % end effector points straight down
initialJointAngs = [0 -pi/4 pi/2 pi/4 0];
waypoints = kin.getIK( 'XYZ', xyz, ...
'TipAxis', tipAxis, ...
'initial', initialJointAngs );

% Inverse kinematics for full 6-DoF arm, using the
% latest feedback as the seed position for IK.
xyz = [0.3 -0.1 0.2];
rotMatrix = eye(3);
fbk = group.getNextFeedback();
positions = kin.getIK( 'XYZ', xyz, ...
'SO3', rotMatrix, ...
'initial', fbk.position );```