# Creating a Robot Forward Kinematics Path

The objective of this tutorial is to demonstrate the procedures for creating an explicit robotic motion path comprised of joint angles. The tutorial introduces the notions of a robot task, an alternative to Grasshopper method for joining lists and the motion simulation component supported by the Jeneratiff digital design and fabrication library.

## Preparation Work

Create three number vectors that determine the joint angles of three robot configurations (keep in radians to avoid conversions). Use the List Edit component in Stack mode to merge the lists. Create a Robot Task component and in the Motion page connect the Robot model and the composite list of joint angles. Connect the Task into a Motion Display component and send the generated State to the Robot Display Model component.

## Merging Lists into a Stack

The natural way (programming-wise) of combining lists is to either dump the contents of one into another or to nest them in a List of ( List of ( Type ) ) construction. Grasshopper follows a bespoke approach of using DataTrees which are often quite complex to decipher. The List Edit component offers four ways of combining lists: (a) Merging the items of incoming lists into a new one, (b) Group elements in tuples in a nested list construct (six rows of three angles), (c) Stacking the lists one after the other (three rows of six angles) and (d) Weave which is the same as grouping but with max-rank completion like Grasshopper default (all other options take the min-rank approach). The list of lists generated is not compatible with Grasshopper DataTrees so it might be better used only for Jeneratiff purposes. Notice how the content of the data appear in the text dump.

The Task component capture most of the functionality of robotic equipment into one package for the sake of not exploding the component palette with numerous components. The most basic operation for kinematic machines is motion and as such the first page presents three common modes of defining motion paths by: (a) Joints: Interpolation of configurations in joint space defined by joint targets, (b) Planes: Interpolation of configurations in joint space defined by coordinate system targets, and (c) Linear: Interpolation of configurations in Cartesian space defined by coordinate system targets. Circular and Spline paths are not supported at this point.

The most basic type of motion path is defined by joint angles. Eventually either through Jeneratiff or by letting the robot controller figure it out, all motion paths break down to joint paths as they closer to hardware, namely the servo motors driving the robot. Motion paths are defined by the position representation used and the method of interpolating between positions. Joint interpolation is the most basic type and occurs by linear interpolation in joint angle space Jinterim( t ) = Jstart * ( 1.0 – t ) + Jend * t, where t: [0.0, 1.0] for each pair of joints.

## Motion Display Component

To simulate the robot’s motion use the motion display component. It features two scrollbars and some additional animation buttons. The top slider spans the entire motion path with as many stops as target positions expressed in the Task definition. The slider below spans only one step around the current position and it is graded as percentage (or interpolating parameter) in range [0.0, 1.0].

The base/home button sets the slider to the lower bound of the slider if pressed using the left mouse button and the upper bound using the right mouse button. The arrow button steps one increment forward/backward by pressing the right/left mouse buttons respectively. For the full slider one click represents one motion step and for the fine motion slider it represent 10% of the interpolation step. The last buttons on the right activate an animation sequence and can be triggered both forward and backwards using the same mouse button convention.

Note that the simulation is geometric in path space rather than physical in real time/space. This means that speed and acceleration are not considered as well as other transient operations such as pauses etc. The goal is to visualize the motion path for catching kinematic errors and potential collisions.

## Motion Traces Display

To visualize the trajectory in between motion target use the Display Motion Traces component which record the location of all robot joints and displays them as polylines. By default the component stores 32 nodes per joint and in cyclical list fashion overwrites the oldest positions recorded by new. It is now possible to visualize the epicyclic type of curves traced by interpolation of angles in joint space.