# robot_inverse_kinematics

## Project setup

# put the package in the workspace
\$ cd ~/catkin_ws/
\$ catkin_make
\$ source devel/setup.bash

## Description

In this project, we program the inverse kinematic algorithm for a robot, which will move its joints so that it follows a desired path with the end-effector.

It is composed of two parts:

• A 3 DOF scara robot, with an inverse kinematic solution that is possible in analytic form.
• A 7 DOF kuka robot, with the inverse kinematic solution to be implemented with iterative algorithms.

### Scara robot

The following image shows the distances between the joints and the end-effector frame, in the robot’s zero configuration. Two joints (q1 and q2) are revolute, and one (q3) is prismatic. Notice that the end-effector frame and the base frame are at the same height, which means that the end-effector z coordinate coincides with the value of the last prismatic joint (q3).

### Kuka robot

This robot has a kinematics structure much more complex than the scara, therefore it is not feasible to obtain an analytic solution for the inverse kinematics problem. The inputs to this function are:

• point = (x, y, z), the desired position of the end-effector.
• R = 3x3 rotation matrix, the desired orientation of the end-effector.
• joint_positions = (q1, q2, q3, q4, q5, q5, q7) the current joint positions.

The output of this function is a vector q containing the 7 joint values that give the desired pose of the end-effector.

This is the DH table of the kuka robot, with the depicted frames:

The DH table follows this convention:

• a_i distance between z_i-1 and z_i along the axis x_i
• alpha_i angle between z_i-1 and z_i about the axis x_i
• d_i distance between x_i-1 and x_i along the axis z_i-1
• theta_i angle between x_i-1 and x_i about the axis z_i-1

The frame transformation can be found as:

Pseudocode:

tolerance:
x_hat = K(q_hat)
eps_x = x_hat – x
eps_q = inv(J) @ q_hat @ eps_x
q_hat = q_hat – eps_q
“>

# initial guess
q_hat = q + eps_q
while eps_x > tolerance:
x_hat = K(q_hat)
eps_x = x_hat - x
eps_q = inv(J) @ q_hat @ eps_x
q_hat = q_hat - eps_q

## Run the simulator

Scara robot

\$ roslaunch kinematics_assignment scara_launch.launch

Kuka robot

\$ roslaunch kinematics_assignment kuka_launch.launch

View Github