# Basic Setup for ABB Forward Kinematics

The objective of this tutorial is to demonstrate the procedures required to setup a robot model and visualize the forward kinematics positioning/orientation using the Jeneratiff digital design and fabrication library.

## Definition of Robot Model

Create a text box and add the robot unique ID. For the ABB IRB1200 with 5Kg / 0.9m reach use the code IRB1205. The model is loaded from the library’s resources but it can be defined in the currently opened Rhino document of even from a file saved on dist. This is an advanced topic for custom robot model definitions for another tutorial.

## Load the Robot Kinematic and Visual Model

By connecting the text box to the Robot Model the following things occur: (1) The kinematic model including the axial configuration, (b) forward and inverse solvers, (c) visualization geometry including curves and meshes are loaded, and (d) the axes limit angles ranges are loaded. The information is packaged as a custom object and exported to Grasshopper as a Robot entity. This will be connected to other components that require the robot model definition. The axes ranges are also exported as a list of intervals either in degrees or radians.

Below is the text dump of the robot model and some comments of what are all these values mean. If this is too much skip to the next section. The information is provided for the mathematically curious.

## Joint Angle Selection

To define a joint configuration we need a tuple of 6 angles which can defined using the Number Vector component. This is nothing more than a regular slider which takes in a list of intervals and produces a pack of sliders. The results of this component is a regular list of numbers which need to be converted from degrees to radians before being used for any internal evaluation of the forward kinematics function.

## Evaluation of Forward Kinematics Function

The component takes in a list of numbers representing the axes configuration and produces a full kinematic solution, including all coordinate systems of each joint rather than only the tool center point, which is named as State. Optionally, it is possible to define the location of the robot through a placement plane. If the value is undefined it becomes the world coordinate system (aka the 4×4 Identity matrix). The coordinate systems per joint are also exported as a list of planes for uses unknown.

The State as a notion is used in many other contexts so its data structure is presented below. Again if this is too much information skip to the next section. In general you can think of the forward kinematics function as a map f( j1, j2, j3, j4, j5, j6 ) → [pos, rot] where pos is the position of the tool center point (TCP) in relationship with a reference basis (typically the world or robot base frame) and rot being the orientation of the TCP frame expressed as either (1) 3×3 rotation matrix, (2) Euler angles vector, (3) Quaternion, or (4) Axis-Angle vector. All these information can be more intuitively viewed as a 4×4 homogeneous coordinates matrix where the X, Y and Z basis vectors appear in columns 1, 2 and 3 and the position or translation appears in column 4.

## Robot Model Visualization

To visualize the robot use the Display Robot Model component. It requires the Robot model in order to load the geometry and a State in order to apply the appropriate transformations. It returns the same State data it received (just to avoiding the saw tooth visual style of void components). The visualization toggles allows one to turn on or off specific joints and modify rendering options. With meshes turned off it is possible to see the internal kinematic skeleton of the robot and the joint planes in red.