## What Is Inverse Kinematics?

Kinematics is the science of motion. In a two-joint robotic arm, given the angles of the joints, the kinematics equations give the location of the tip of the arm. Inverse kinematics refers to the reverse process. Given a desired location for the tip of the robotic arm, what should the angles of the joints be so as to locate the tip of the arm at the desired location. There is usually more than one solution and can at times be a difficult problem to solve.
This is a typical problem in robotics that needs to be solved to control a robotic arm to perform tasks it is designated to do. In a 2-dimensional input space, with a two-joint robotic arm and given the desired co-ordinate, the problem reduces to finding the two angles involved. The first angle is between the first arm and the ground (or whatever it is attached to). The second angle is between the first arm and the second arm. ## Why Use Fuzzy Logic?

For simple structures like the two-joint robotic arm, it is possible to mathematically deduce the angles at the joints given the desired location of the tip of the arm. However with more complex structures (eg: n-joint robotic arms operating in a 3-dimensional input space) deducing a mathematical solution for the inverse kinematics may prove challenging.
Using fuzzy logic, we can construct a Fuzzy Inference System that deduces the inverse kinematics if the forward kinematics of the problem is known, hence sidestepping the need to develop an analytical solution. Also, the fuzzy solution is easily understandable and does not require special background knowledge to comprehend and evaluate it.

## Overview of Fuzzy Solution

Since the forward kinematics formulae for the two-joint robotic arm are known, x and y co-ordinates of the tip of the arm are deduced for the entire range of angles of rotation of the two joints. The co-ordinates and the angles are saved to be used as training data to train ANFIS (Adaptive Neuro-Fuzzy Inference System) network.
During training the ANFIS network learns to map the co-ordinates (x,y) to the angles (theta1, theta2). The trained ANFIS network is then used as a part of a larger control system to control the robotic arm. Knowing the desired location of the robotic arm, the control system uses the trained ANFIS network to deduce the angular positions of the joints and applies force to the joints of the robotic arm accordingly to move it to the desired location.

## What Is ANFIS?

ANFIS stands for Adaptive Neuro-Fuzzy Inference System. It is a hybrid neuro-fuzzy technique that brings learning capabilities of neural networks to fuzzy inference systems. The learning algorithm tunes the membership functions of a Sugeno-type Fuzzy Inference System using the training input-output data.
In this case, the input-output data refers to the “coordinates-angles” dataset. The coordinates act as input to the ANFIS and the angles act as the output. The learning algorithm “teaches” the ANFIS to map the co-ordinates to the angles through a process called training. At the end of training, the trained ANFIS network would have learned the input-output map and be ready to be deployed into the larger control system solution.

## Data Generation

Let theta1 be the angle between the first arm and the ground. Let theta2 be the angle between the second arm and the first arm (Refer to Figure 1 for illustration). Let the length of the first arm be l1 and that of the second arm be l2. Let us assume that the first joint has limited freedom to rotate and it can rotate between 0 and 90 degrees. Similarly, assume that the second joint has limited freedom to rotate and can rotate between 0 and 180 degrees. (This assumption takes away the need to handle some special cases which will confuse the discourse). Hence, 0<=theta1<=pi/2 and 0<=theta2<=pi. Now, for every combination of theta1 and theta2 values the x and y coordinates are deduced using forward kinematics formulae. The following plot shows all the X-Y data points generated by cycling through different combinations of theta1 and theta2 and deducing x and y co-ordinates for each. ## Building ANFIS Networks

One approach to building an ANFIS solution for this problem, is to build two ANFIS networks, one to predict theta1 and the other to predict theta2.
In order for the ANFIS networks to be able to predict the angles they have to be trained with sample input-output data. The first ANFIS network will be trained with X and Y coordinates as input andc orresponding theta1 values as output. The matrix data1 contains the x-y-theta1 dataset required to train the first ANFIS network. Therefore data1 will be used as the dataset to train the first ANFIS network. Similarly, the second ANFIS network will be trained with X and Y coordinates as input and corresponding theta2 values as output. The matrix data2 contains the x-y-theta2 dataset required to train the second ANFIS network. Therefore data2 will be used as the dataset to train the second ANFIS network.

## Validating ANFIS Networks

Having trained the networks, an important follow up step is to validate the networks to determine how well the ANFIS networks would perform inside the larger control system.
Since this example problem deals with a two-joint robotic arm whose inverse kinematics formulae can be derived, it is possible to test the answers that the ANFIS networks produce with the answers from the derived formulae.
Let’s assume that it is important for the ANFIS networks to have low errors within the operating range 0<x<2 and 8<y<10. The theta1 and theta2 values are deduced mathematically from the x and y coordinates using inverse kinematics formulae. THETA1D and THETA2D are the variables that hold the values of theta1 and theta2 deduced using the inverse kinematics formulae. theta1 and theta2 values predicted by the trained anfis networks are obtained by using the command evalfis which evaluates a FIS for the given inputs.
Now, we can see how close the FIS outputs are with respect to the deduced values. The errors are in the 1e-3 range which is a fairly good number for the application it is being used in. However this may not be acceptable for another application, in which case the parameters to the anfis function may be tweaked until an acceptable solution is arrived at. Also, other techniques like input selection and alternate ways to model the problem may be explored.

## Building a Solution Around the Trained ANFIS Networks

Now given a specific task, such as robots picking up an object in an assembly line, the larger control system will use the trained ANFIS networks as a reference, much like a lookup table, to determine what the angles of the arms must be, given a desired location for the tip of the arm. Knowing the desired angles and the current angles of the joints, the system will apply force appropriately on the joints of the arms to move them towards the desired location.

## Conclusion

This example illustrated using ANFIS to solve an inverse kinematics problem. Fuzzy logic has also found numerous other applications in other areas of technology like non-linear control, automatic control, signal processing, system identification, pattern recognition, time series prediction, data mining, financial applications etc.,

## Glossary

ANFIS – Adaptive Neuro-Fuzzy Inference System. a technique for automatically tuning Sugeno-type inference systems based on training data.

membership functions – a function that specifies the degree to which a given input belongs to a set or is related to a concept.

input space – it is a term used to define the range of all possible values

FIS – Fuzzy Inference System. The overall name for a system that uses fuzzy reasoning to map an input space to an output space.

epochs – 1 epoch of training represents one complete presentation of all the samples/datapoints/rows of the training dataset to the FIS. The inputs of each sample are presented and the FIS outputs are computed which are compared with the desired outputs to compute the error between the two. The parameters of the membership functions are then tuned to reduce the error between the desired output and the actual FIS output. 