How to Assign Denavit-Hartenberg Frames to Robotic Arms

In this tutorial, we’ll learn the fundamentals of assigning Denavit-Hartenberg coordinate frames (i.e. x, y, and z axes) to different types of robotic arms.

Denavit-Hartenberg (D-H) frames help us to derive the equations that enable us to control a robotic arm. 

The D-H frames of a particular robotic arm can be classified as follows:

  • Global coordinate frame: This coordinate frame can have many names…world frame, base frame, etc. In this two degree of freedom robotic arm, the global coordinate frame is where the robot makes contact with the dry-erase board.
  • Joint frames: We need a coordinate frame for each joint.
  • End-effector frame: We need a coordinate frame for the end effector of the robot (i.e. the gripper, hand, etc….that piece of the robot that has a direct effect on the world).

To draw the frames (i.e. x, y, and z axes), we follow four rules that will enable us to take a shortcut when deriving the mathematics for the robot. These rules collectively are known as the Denavit-Hartenberg Convention.

Four Rules of the Denavit-Hartenberg Convention

Here are the four rules that guide the drawing of the D-H coordinate frames:

  1. The z-axis is the axis of rotation for a revolute joint. 
  2. The x-axis must be perpendicular to both the current z-axis and the previous z-axis.
  3. The y-axis is determined from the x-axis and z-axis by using the right-hand coordinate system.
  4. The x-axis must intersect the previous z-axis (rule does not apply to frame 0).

1. The z-axis is the axis of rotation for a revolute joint (like Joints 1 and 2 in the diagram below). 

For example, in the diagram below, the z-axis (pink line) for Joint 1 will point straight upwards out of the servo motor. This coordinate frame is the global reference frame. It is the frame that is connected to the first joint.

1-connected-to-first-jointJPG

Let’s draw the second z-axis.

2-second-jointJPG

For our last z-axis, I have a choice. I’ll put it in the same direction as the second z-axis.

3-add-z-vectorJPG

2. The x-axis must be perpendicular to both the current z-axis and the previous z-axis.

Let’s draw the x-axis for the global reference frame. We need to make sure it is perpendicular to the z0 axis. We have a choice here. I’ll go with the x-axis pointing to the right since it is easier to see on the diagram.

4-easier-to-see-on-diagramJPG

Let’s draw the x-axis for the Joint 2 reference frame. We need to make sure it is perpendicular to both z0 and z1.

5-draw-x1JPG

Now, let’s draw x2.

6-draw-x2JPG

3. The y-axis is determined from the x-axis and z-axis by using the right-hand coordinate system.

For the right-hand rule, you:

  • Take your right hand and point your four fingers in the direction of the x-axis.
  • Point your thumb in the direction of the z-axis.
  • Your palm points in the direction of the y-axis.

So, in this diagram below, how do we draw y0?

  • x0 points to the right (point the four fingers of your right hand in that direction).
  • z0 points toward the sky (point your thumb in that direction).
  • Therefore, y0 points into the page.
7-draw-y0JPG

Below I have drawn the y-axis for coordinate frames 1 and 2 using the right-hand rule.

8-using-right-hand-ruleJPG

4. The x-axis must intersect the previous z-axis (rule does not apply to frame 0).

You can see from the red lines below that this rule holds for the diagram we drew.

9-rule-holdsJPG

More Practice With Denavit-Hartenberg Frames

Example 1 – Two Degree of Freedom Robotic Arm

Let’s get some more practice drawing D-H frames on a kinematic diagram. We’ll use this diagram below of the two-degree of freedom robotic arm.

10-two-degree-of-freedom-robotic-armJPG

Remember the four rules.

Rule #1: The z-axis is the axis of rotation for a revolute joint (like Joints 1 and 2 in the diagram below). 

11-draw-z-axesJPG

Rule #2: The x-axis must be perpendicular to both the current z-axis and the previous z-axis.

12-add-x-axesJPG

Rule #3: The y-axis is determined from the x-axis and z-axis by using the right-hand coordinate system.

13-add-y-axesJPG

Rule #4: The x-axis must intersect the previous z-axis (rule does not apply to frame 0).

We draw a dashed line extending the x and z-axes and confirm that the axes intersect.

14-confirm-they-intersectJPG

Example 2 – Cartesian Robot

Let’s do some more examples so that you get comfortable drawing kinematic diagrams. 

We’ll start with the cartesian robot. You’ll often see this robot in 3D printing, laser cutting, and computer numerical control (CNC) applications.

Here is an example of a cartesian robot.

A cartesian robot is made up of three prismatic joints, that correspond to the x, y, and z axes. These joints are perpendicular to each other.

Whereas a revolute joint produces rotational motion, a prismatic joint produces linear (i.e. sliding) motion along a single axis. In a real application, a prismatic joint is a linear actuator. This type of actuator can be purchased at any online store that sells electronics equipment (e.g. Amazon, eBay, etc.).

Let’s draw the kinematic diagram for a cartesian robot.

Here is our first joint:

16-first-jointJPG

Let’s add our second and third joint.

17-second-third-jointJPG

Now, let’s label the links. When drawing the kinematic diagram for prismatic joints, we assume that each joint is not extended.

18-each-link-unextendedJPG

Let’s draw in arrows to show the direction of motion (we’ll use the letter d to represent the direction of motion from a 0 position of the linear actuator…i.e. prismatic joint).

19-direction-of-motionJPG

Let’s draw the axes. 

Rule #1: For a prismatic joint, the z-axis has to be the direction of motion.

20-add-z-axesJPG

Rule #2: The x-axis must be perpendicular to both the current z-axis and the previous z-axis.

21-add-x-axesJPG

Rule #3: The y-axis is determined from the x-axis and z-axis by using the right-hand coordinate system.

You stick your fingers in the direction of x. Your thumb goes in the direction of z. Your palm faces the direction of y.

22-add-yJPG

Rule #4: The x-axis must intersect the previous z-axis (rule does not apply to frame 0).

Check each frame to see if this rule holds. You extend the z-axes and see if they intersect the next x axis. You’ll find that Rule 4 will be followed for all frames.

Example 3 – Articulated Robot

Articulated robots are your standard robot arms. They are the most common types of robots you will find in factories. This type of robot is the one that is most similar to the human arm.

Here is an example of an articulated robot.

23-example-of-articulated-robot

Articulated robots come in all shapes and sizes. Some of these types of robots can be pretty strong. If you go inside a car factory, you’ll see giant articulated robots lifting cars and trucks with ease.

Let’s draw the kinematic diagram for a three degree of freedom articulated robot. This robot is similar to an old robot named the Stanford Arm. The difference is that, in this robot diagram, we will make the third joint a revolute joint instead of a prismatic joint.

24-3-dof-armJPG

Let’s label the links (we’ll use the letter a to represent link lengths) and draw the direction of positive rotation.

25-letter-a-represent-link-lengthsJPG

Now, let’s go through the four rules.

Rule #1: The z-axis is the axis of rotation for a revolute joint (like Joints 0 and 1 in the diagram below).

26-add-z-axesJPG

For the end effector in the image above, I made the z-axis the same direction as the frame before it since it will make the math easier.

Rule #2: The x-axis must be perpendicular to both the current z-axis and the previous z-axis.

Note that, for the base frame, we can set the x-axis to be anything we want as long as rule #2 holds. I’ve made it go to the right in the diagram below.

For drawing the other x axes, you have a choice of which direction you want to make them. I like to look ahead to rule #4 (Rule #4: The x-axis must intersect the previous z-axis) to help with this decision.

27-add-x-axesJPG

Rule #3: The y-axis is determined from the x-axis and z-axis by using the right-hand coordinate system.

You stick your fingers in the direction of x. Your thumb goes in the direction of z. Your palm faces the direction of y.

28-add-y-axesJPG

Rule #4: The x-axis must intersect the previous z-axis (rule does not apply to frame 0).

Check each frame to see if this rule holds. You extend the z-axes and see if they intersect the next x axis. You’ll find that Rule 4 will be followed for all frames.

Example 4 – SCARA Robot

Let’s see how to draw the kinematic diagram for the SCARA robot.

Here is an example of the SCARA robot:

The SCARA robot is commonly used for pick and place (i.e. moving a part from one point to another) and small assembly applications.

30-base-kinematic-diagram-scara-robotJPG

Rule #1: The z-axis is the axis of rotation for a revolute joint. For a prismatic joint, the z-axis has to be the direction of motion.

31-add-z-axisJPG

Rule #2: The x-axis must be perpendicular to both the current z-axis and the previous z-axis.

32-add-x-axisJPG

Rule #3: The y-axis is determined from the x-axis and z-axis by using the right-hand coordinate system.

33-add-y-axisJPG

Rule #4: The x-axis must intersect the previous z-axis (rule does not apply to frame 0).

Check each frame to see if this rule holds. You extend the z-axes and see if they intersect the next x axis. You’ll find that Rule 4 will be followed for all frames.

Example 5 – Six Degree of Freedom Robotic Arm

Now, let’s draw the kinematic diagram and D-H frames for a 6 degree of freedom robotic arm like the one below. 

Note that the 6th servo is located on the gripper. I won’t include that joint in the analysis since it is not part of the main arm of the robot.

6dof-diy-robotic-arm

We start by drawing the kinematic diagram. Remember that, in a kinematic diagram, we assume that all servos are at 0 degrees (i.e. all joint variables are 0). Therefore, for some servos, we’ll have to make the assumption that the angle range of the servo is from -90 to 90 degrees as opposed to the normal 0 to 180 degree range so that we have a valid kinematic diagram.

34-six-dof-armJPG

Let’s label the links and draw the direction of positive rotation.

35-add-angles-robotic-armJPG

Now, let’s go through the four rules.

Rule #1: The z-axis is the axis of rotation for a revolute joint.

36-add-z-axisJPG

Rule #2: The x-axis must be perpendicular to both the current z-axis and the previous z-axis.

Up until now, we have always placed the origin of a coordinate frame at the center of the joint. However, doing this is not required. We can place the frame origin wherever we want.

Notice in the diagram below that we have to move the origin of frame 4 backwards, by a distance of a4 in order to satisfy Rule #2.

37-add-x-axisJPG

Rule #3: The y-axis is determined from the x-axis and z-axis by using the right-hand coordinate system.

You stick your fingers in the direction of x. Your thumb goes in the direction of z. Your palm faces the direction of y.

38-add-y-axisJPG

Rule #4: The x-axis must intersect the previous z-axis.

If you go frame by frame in the diagram above, you can see that the rule holds.

Example 6 – Six Degree of Freedom Collaborative Robot

Let’s draw the kinematic diagram for a six degree of freedom robot like the Universal Robots UR5. At the end of this robotic arm, you would typically have some sort of end effector like a hand, gripper, or suction cup.

39-6dof-collaborative-robotJPG

The kinematic diagram will be drawn with the robotic arm in a flat orientation, parallel to a table, for  example.

40-kinematic-diagram-collaborative-robot-ur5JPG

Remember the four rules:

  1. The z-axis is the axis of rotation for a revolute joint. 
  2. The x-axis must be perpendicular to both the current z-axis and the previous z-axis.
  3. The y-axis is determined from the x-axis and z-axis by using the right-hand coordinate system.
  4. The x-axis must intersect the previous z-axis (rule does not apply to frame 0).

We can see in the diagram that all the rules hold.

Example 7 – Six Degree of Freedom Industrial Robot

Let’s draw the kinematic diagram for a six degree of freedom industrial robot like the FANUC LRMate 200iD.

41-fanuc-lrmate-200idJPG

Go through each of the four rules. Here is what I drew:

42-denavit-hartenberg-frames-fanuc-lrmate-200idJPG

Keep building!

References

Credit to Professor Angela Sodemann for teaching me this stuff. Dr. Sodemann is an excellent teacher (She runs a course on RoboGrok.com). On her YouTube channel, she provides some of the clearest explanations on robotics fundamentals you’ll ever hear.

How to Draw the Kinematic Diagram for a 2 DOF Robotic Arm

In this tutorial, we’ll learn how to draw the kinematic diagram for a two degree of freedom robotic arm.

Getting Started

A kinematic diagram shows how the links (the stiff parts of the robot) and joints (the servo motors or linear actuators) are connected when each joint is at an angle of 0 degrees (or in its 0 position in the case of a linear actuator). 

Remember that degree angles are measured in the counterclockwise direction, starting from the positive x-axis (see figure below).

1-starting-from-the-positive-x-axis

First, let’s start with creating our joint (revolute joint…i.e. the servo motor) as well as the two links. We’ll use the letter a to represent link lengths.

2-first-joint

We now need to label the joint with the direction of positive rotation. 

We use the right-hand rule whereby your thumb points in the direction of the rotation axis. In this case, your thumb will point upward (towards the ceiling) out of the servo horn. Your fingers will curl in the direction of positive rotation.

3-add-angle

In this case, θ1 shows that the direction of positive rotation is counterclockwise if you are looking downward on the servo horn from above.

Add a Joint and a Link

Now, let’s add a joint (i.e. servo motor) to the end of link 2.

Remember, we will draw the diagram assuming that each joint is at 0 degrees.

We added another joint (i.e. a revolute joint because the motion entails revolution around a single axis) in the previous section. 

Using the right-hand rule, take your thumb and point it in the direction of the axis of rotation (i.e. out of the top-center of the servo motor. Your fingers curl in the direction of positive rotation (in this case, counterclockwise…Note that clockwise rotation would be negative rotation).

Let’s draw the positive rotation.

4-end-effector-is-here

At this stage, our robotic arm (i.e. “manipulator”) has two degrees of freedom (2 DOF), corresponding to the two servo motors. The end effector would be the end of Link 4. 

In robotics, an end effector is the part of the robot that has an effect on the outside world. 

There are a lot of different types of robotic manipulator end effectors. An end effector could also be a gripper, suction cup, paint sprayer, etc.

References

Credit to Professor Angela Sodemann for teaching me this stuff. Dr. Sodemann is an excellent teacher (She runs a course on RoboGrok.com). On her YouTube channel, she provides some of the clearest explanations on robotics fundamentals you’ll ever hear.

How to Build a 2 DOF Robotic Arm

In this section, we’ll take a look at how to build a two degree of freedom robotic arm. The robot we’ll develop will be an early prototype of a SCARA robot.

Special shout out to Professor Angela Sodemann for this project idea. She is an excellent teacher (She runs a course on RoboGrok.com).  While she uses the PSoC in her work, I use Arduino since I’m more comfortable with this platform. Angela is an excellent teacher and does a fantastic job explaining various robotics topics over on her YouTube channel.

2dof-robotic-arm-sweep-gif

Real-World Applications

scara-robot-packaging-cookies
A SCARA robot packaging cookies into trays. Photo Credit: Gfycat.

SCARA robots are popular in small-scale manufacturing and logistics applications. They are some of the fastest and cheapest robots for pick and place tasks (picking up an object in one location and placing it in another). You can find lots of videos on the Internet showing SCARA robots in action.

The motors we’ll use in this project have a range from 0 to 180 degrees. We want to be able to send commands to the robotic arm so that the servos move to specific angles within this range. This project will be used in my future tutorials on forward kinematics and inverse kinematics.

Forward kinematics asks the question: Where is the end effector of a robot (e.g. gripper, hand, vacuum suction cup, etc.) located in space given that we know the angles of the servo motors? The opposite of forward kinematics is inverse kinematics. 

Inverse kinematics asks, what should the angles of the servo motors be if we want the end effector to be located at a particular point in space? In a future tutorial, we’ll also learn about inverse kinematics.

Prerequisites

You Will Need

This section is the complete list of components you will need for this project.

Set Up the Initial Hardware

Lay out all the parts out on the table like this:

1-lay-out-all-parts-out-on-table

Grab your centimeter grid dry erase board and the two C-clamps.

2-grab-centimeter-grid-dry-erase-board

Clamp down the dry erase board on a hard surface, like a table.

3-clamp-down

Mark four holes on the dry erase board using a screwdriver or some other sharp object.

Using the drill, make four 3MM diameter holes like this.

4-four-3mm-diameter-holes

Draw 10 lines on your board…5 lines on one side and 5 lines on the other side. Each line needs to be 15 degrees apart (use the protractor to measure the angle).

5-draw-10-lines

You can use some tape and a permanent marker to make sure the lines are permanently on there and are straight.

Grab four M3 x 10mm screws.

Put the screws up through the bottom of the board via the holes.

6-up-through-bottom

Grab four 20mm standoffs and screw them on top of the screws.

7-screw-standoffs-on-top
8-screws-standoffs

Take one 35kg  servo motor and place it on top of the standoffs.

Grab four 20mm M3 screws and use these screws to secure the servo motor into the standoffs. The screws don’t need to be super tight…just tight enough so that the servo stays in one place.

9-add-servo-motor
10-add-servo-motor

Grab a servo horn and attach it to the servo gear. 

11-add-servo-horn

Grab the 6 Channel Digital Servo Tester and either a DC Variable Power Supply or 4 AA Batteries with Battery holder.

12-digital-servo-tester

Plug the negative (black) lead of the power supply into the negative (-) socket of the 6 Channel Digital Servo Tester. I connected the black alligator clip coming from the power supply to a male-to-male jumper wire. You will have to unscrew the screw in the blue dongle from the top, and then slip the male-to-male jumper wire in the bottom. Then retighten the screw.

Plug the positive (red) lead of the power supply into the positive (+) socket of the 6 Channel Digital Servo Tester.

13-setup-digital-servo-tester

Plug the servo motor into one of the 3 header pin units on top of the 6 Channel Digital Servo Tester. The yellow wire should plug into S, red wire should plug into positive (+), and brown wire should plug into negative (-).

14-plug-in-servo-to-tester

Turn on the DC power supply and set the voltage to 6V and the current limit to 1A.

Using the corresponding knob on the Digital Servo Tester, Rotate the servo horn as far as it can go in the clockwise direction. This is the 0 degree position (Note: if you press the little button under the knob, the servo will go to the 90 degree (center) position).

Take the servo horn off.

Place the servo horn back on the servo gear so that the two holes on either side of the servo horn are just a bit beyond perfectly horizontal.

15-just-beyond-horizontal

Grab a servo screw and secure the servo horn on to the servo gear.

Grab a beam mount.

Attach the beam mount (i.e. robot arm “link”) to the servo horn using two small M3 x 4mm screws.

16-attach-beam-mount

This motor, Joint 1 (also known as Servo 0), is now calibrated and complete. If you want to, you can add two more screws to the servo horn so that there are 4 screws that secure the beam mount to the servo horn.

17-is-now-calibrated

Now, let’s add the second servo motor. We’ll call this second joint Servo 1.

Grab a multi-functional servo bracket.

Grab two M3 x 6mm screws and two M3 nuts.

Secure the multi-functional servo bracket into the beam mount.

18-secure-multifunctional-servo-bracket

Grab a 35kg servo and place it into the multi-functional servo bracket.

Grab four M3 x 8mm screws and four M3 nuts.

Secure the servo into the multi-functional servo bracket.

19-secure-servo

Grab a servo horn, and place it on the gear of the servo.

Secure the servo horn with a servo screw.

Grab a beam mount and two M3 x 4mm screws. Secure the beam mount to the servo horn.

20-secure-beam-mount

Place the three pins of this second servo into the corresponding pins of the 6 Channel Digital Servo Tester.

Adjust the position of the beam mount so that when the servo is in the middle of its range, the beam mount points straight to the right (i.e. when you press the center button under the corresponding knob on the 6 Channel Digital Servo Tester, the beam mount should point straight to the right).

21-beam-mount-pointing-right

Once you’re happy with the alignment, use two M3 x 4mm screws to secure the beam mount to the horn even further.

22-beam-mount-pointing-right
23-beam-mount-pointing-right

Our robotic arm now has the following components (two joints and four links):

  • Joint 1 – The bottom servo motor (goes from 0 degrees to 180 degrees).
  • Link 1 – Extends from the top of the dry erase board to the top of the servo horn of Joint 0.
  • Link 2 – Extends from the middle of the servo horn of Joint 1 to the end of the beam mount (i.e. specifically, to the center of the big central circle on the end of the beam mount).
  • Joint 2 – The top servo motor (goes from -90 degrees to 90 degrees…I’ll explain why we define the angle range like this when we learn about drawing kinematic diagrams in a future tutorial).
  • Link 3 – Extends from the beam mount to the top of the servo horn of Joint 2.
  • Link 4 – Extends from the middle of the servo horn of Joint 2 to the end of the beam mount 

Here is the kinematic diagram for this robot. Don’t worry if you don’t understand it. We’ll learn how to create this in a future post.

24-kinematic-diagram

Move Servos

In this section, we’ll get the servos moving. We’ll use the setup in the kinematic diagram above.

Wire the Servos

Follow this pdf diagram to wire up your servos.

Turn on your DC power supply and set it to 6V with a 2A current limit (i.e. 1A per servo). 

Plug the red and black leads of the power supply into the red and blue power rails of the breadboard. If you’re using 4xAA batteries, you can plug the leads into the breadboard now.

Write the Code for the Arduino Mega

Write the following code and load it to your Arduino. This code sweeps the two servos 180 degrees, going from the most clockwise position to the most counterclockwise position over and over again.

/*
Program: Sweep 2 Servos Using Arduino
File: sweep_servos_2dof.ino
Description: This program sweeps two servos (i.e. joints) 180 degrees, going from
  the most clockwise position to the most counterclockwise position.
  Note that Servo 0 = Joint 1 and Servo 1 = Joint 2.
Author: Addison Sears-Collins
Website: https://automaticaddison.com
Date: August 16, 2020
*/
 
#include <VarSpeedServo.h> 

// Define the number of servos
#define SERVOS 2

// Create the servo objects.
VarSpeedServo myservo[SERVOS]; 

// Speed of the servo motors
// Speed=1: Slowest
// Speed=255: Fastest.
const int desired_speed = 75;

// Attach servos to digital pins on the Arduino
int servo_pins[SERVOS] = {3,5};

void setup() {
  
  // Attach the servos to the servo object 
  // attach(pin, min, max  ) - Attaches to a pin 
  //   setting min and max values in microseconds
  //   default min is 544, max is 2400  
  // Alter these numbers until both servos have a 
  //   180 degree range.
  myservo[0].attach(servo_pins[0], 544, 2475);  
  myservo[1].attach(servo_pins[1], 500, 2475); 

  // Set initial servo positions 
  myservo[0].write(0, desired_speed, true);  
  myservo[1].write(calc_servo_1_angle(90), desired_speed, true);

  // Wait one second to let servos get into position
  delay(1000);
}
 
void loop() {  

    // To most counterclockwise position
    myservo[0].write(180, desired_speed, true); 

    // Go to clockwise position
    myservo[1].write(calc_servo_1_angle(-90), desired_speed, true); 
    
    // Go to counterclockwise position
    myservo[1].write(calc_servo_1_angle(90), desired_speed, true); 

    // To most clockwise position
    myservo[0].write(0, desired_speed, true); 

    // Wait half a second
    delay(500);
}     

/*  This method converts the desired angle for Servo 1 into a control angle
 *  for Servo 1. It assumes that the 0 degree position on the kinematic
 *  diagram for Servo 1 is actually 90 degrees on the actual servo.
 *  The angle range for Servo 1 on the kinematic diagram is
 *  -90 to 90 degrees, with 0 degrees being the center position. 
 *  The actual servo range for the physical motor
 *  is 0 to 180 degrees. We convert the desired angle 
 *  to a value within that range.
 */
int calc_servo_1_angle (int input_angle) {
  
  int result;

  result = map(input_angle, -90, 90, 0, 180);

  return result;
}  

Sweep and Calibrate the Servos

Run the code so that your servos start moving. Servo 0 (i.e. Joint 1) will rotate counterclockwise from 0 degrees to 180 degrees, then Servo 1 (i.e. Joint 2) will rotate clockwise from 90 degrees to -90 degrees. Then Servo 0 will rotate clockwise, back to the 0 degree position where it started. 

You should see the same motion as in the animated gif image at the beginning of this tutorial.

You need to calibrate the servos so that the servos are aligned with the 0 degrees (i.e. +x axis) and 180 degrees (-x axis) on the dry erase board. In order to do that, you need to alter the minimum value of 544 microseconds and/or maximum value of 2400 microseconds of the pulse width for each servo until you align with the axes on the board. I recommend starting with the first servo (i.e. servo 0 which is attached to the board), and then calibrate the second servo (i.e. servo 1).

As the robotic arm sweeps back and forth, you see that the end-effector (the top beam mount) changes position (x and y coordinate) and orientation (i.e. the angle that the end-effector makes with the positive x-axis).

Position + orientation are known collectively as pose

With a robotic arm, it is not enough to know where the end of the robotic arm (e.g. gripper) is located in space via its x, y, and z coordinates…you also need to know the direction the end of the robotic arm is pointing towards (i.e. orientation). 

Consider, for example, a robotic arm with a paint sprayer at the end. We want the robotic arm to paint a car. We need to direct the arm to the appropriate position, and we need to make sure the angle of the arm is oriented in a way that directs the sprayer towards the place on the car’s surface you want to paint. 

painting-robot

In a future post, we will learn how to calculate the position and orientation of a robotic arm, so stay tuned!