Robotic Arm Design

Download as pdf or txt
Download as pdf or txt
You are on page 1of 15

Project Report

Robotic arm design


KINEMATIC ANALYSIS OF A ROBOTIC MANIPULATOR

WITH 4 DEGREES OF FREEDOM

Akshay Singh Thakur K00486089

Fetuata Oluwaseun K00490938

Oreoluwa Adediwura K00495516

9th September, 2022


Table of contents

1. Abstract
2. Introduction
3. Problem statement
4. Objective & Proposed task
5. Proposed timeline
6. Preliminary work
7. Reference

1
1. Abstract
For decades, robotics has been recognised in the field of industrial automation. Through
relentless improvement and innovation, its applications has span across various
industries including medical, automobile, manufacturing, and many more.

This project's goal is to replicate and improve the interactivity for managing a robotic arm
in a simulated programming environment using Python by running a Python program to
allow users to interact with the real world and make the entire process friendlier. The
control system would be used to control a robot arm to pick an on=bject from a position
and place it in a new position.

The identical virtual control configuration will be running in a virtual world along with an
entire robotic arm hardware gear. The user interacts with a virtual setup that we will
develop using Python in order to engage with a real-world arrangement. This is built and
developed to manage the arm's motion in actual life.

2
2. Introduction
Using potentiometers and buttons, Project RAD is anticipated to record and automate
any number of positions in a python program while simultaneously mastering the many
abilities outlined in this proposal. Simple components and tools, including micro servos,
resistors, LEDs, jump wires, and 3D printing, were used to create this robot arm.

Through a computer's graphical user interface that would be developed using python,
you may command the arm by sending commands to the Arduino, which manages the
arm. Each servo is controlled by sliders, and there are buttons programmed for recording
positions and replaying previously recorded settings. Past recordings can also be saved
and accessed.

The closed solution, which offers joint angles for the location of the elbow while
positioning the robot's hand, is used to solve the robot's kinematics. The process would
be managed by a PLC with a start and stop push button.

Ideal practical applications for this projects include but not limited to;

● Garbage collection
● Mail Box /office /warehouse
● Lift objects and transport.
● Color detection and matching
● Office application.

3
3. Objective & Proposed task
The Project Objectives include;

1. Design, construct, and develop python controlled robotic arm capable of handling
and lifting that can be controlled by a python program
2. Understand and apply practical DH representation of robotic arm.
3. Solidworks & CAD design & application.
4. Design For Manufacturing (3D Printing).
5. Control system programming using Python.

Denavit - Hartenberg Representation

Definitions:

1 – The axis lies along the axis of motion of the joint

2 – The axis is normal to the axis, and pointing away from it

4
3 – The axis completes the right – handed coordinate systems as required

Parameters:

θi : The joint angle from the axis to the axis about the axis

di : The distance from the origin of the coordinate frame to the intersection of the axis
with the axis along the axis

ai : The offset distance from the intersection of the axis with the axis to the origin of the
frame along the axis (or, the shortest distance between the and )

αi : The offset angle from the axis to the axis about the axis using the right – handed
rule

Hence, with the help of the D-H parameters, we can come up with the coordinate
parameters for a 4DOF robotic manipulator,

5
Kinematics

Forward Kinematics

The position of the arm's end-effector in relation to the joint angles is what is meant by
the phrase "forward kinematics," which is used to describe the process of calculating the
overall cumulative effect of all joint variables. With the use of a homogeneous
transformation matrix, the forward kinematics of the robotic manipulator may be
computed.

Homogenous Transformation Matrix

Each homogeneous transformation A i is a composite of four "basic" transformations


according to D-H convention.

1) Rotation along X by α

2) Translation along X by a

3) Translation along Z by d

4) Rotation along Z by θ

6
Project Scope

The robot system consists of various building blocks like;

1. Arduino UNO (Micro Controller)


2. Normal Sized Servo
3. SG90 Micro-servo motor
4. Breadboard (generic)
5. Power Supply
6. Solid works
7. 3D Printed Arm.

Layout

1. Connections

7
2. Program Codes

a. Robot Arm Ardurino Code

Click here to access code

8
b. Python User Interface

from tkinter import *

from tkinter import filedialog

import serial

import time

port_opened=False

def set_port():

global port_opened,arduino

com_port= port_input.get()

arduino=serial.Serial(com_port,9600)

port_opened=True

print ("COM port set to: "+com_port)

9
def send_positions(position):

message =
"{0:0=3d}".format(position[0])+"{0:0=3d}".format(position[1])+"{0:0=3d}".format(position[2])+"{
0:0=3d}".format(position[3])+"{0:0=3d}".format(position[4])+"\n"

arduino.write(str.encode(message))

print(message, end='')

time.sleep(0.2)

saved_positions = []

def save_positions():

saved_positions.append([servo1_slider.get(), servo2_slider.get(), servo3_slider.get(),


servo4_slider.get(), servo5_slider.get()]);

print("saved positions: "+str(saved_positions))

def play_positions():

for position in saved_positions:

print("playing: "+str(position))

send_positions(position);

time.sleep(1)

def clear_all_positions():

global saved_positions

saved_positions = []

print("cleared all positions")

def clear_last_positions():

global saved_positions

removed = saved_positions.pop()

print("removed: "+str(removed))

print("saved positions: "+str(saved_positions))

def open_file():

global saved_positions

10
filename = filedialog.askopenfilename(initialdir = "/", title = "Select a File", filetypes =
(("Text files","*.txt*"),("all files","*.*")))

file = open(filename, "r")

data=file.read()

saved_positions=eval(data)

file.close()

print("opened: "+filename)

def save_file():

save_file = filedialog.asksaveasfile(mode='w', defaultextension=".txt")

save_file.write(str(saved_positions))

save_file.close()

print("saved file")

def instructions():

print("1.) Set the Arduino's COM port and click Enter. This can be found in Device Manager in
Windows")

print("2.) Move the arm's servos using the sliders")

print("3.) To record a position, click on Record Position")

print("4.) To replay the recorded positions, click on Replay Positions")

print("\nTo save what you've recorded, got to File > Save File.")

print("To open a previously saved file, got to File > Open File.")

window = Tk()

window.title("Robot Arm Controller 2")

window.minsize(355,300)

port_label=Label(window,text="Set Port:");

port_label.place(x=10,y=10);

port_input=Entry(window)

port_input.place(x=10,y=35)

port_button=Button(window, text="Enter", command=set_port)

port_button.place(x=135,y=32)

11
servo1_slider = Scale(window, from_=180, to=0)

servo1_slider.place(x=0, y=100)

servo1_label=Label(window,text="Servo 1")

servo1_label.place(x=10, y=80)

servo2_slider = Scale(window, from_=180, to=0)

servo2_slider.place(x=70, y=100)

servo2_label=Label(window,text="Servo 2")

servo2_label.place(x=80, y=80)

servo3_slider = Scale(window, from_=180, to=0)

servo3_slider.place(x=140, y=100)

servo3_label=Label(window,text="Servo 3")

servo3_label.place(x=150, y=80)

servo4_slider = Scale(window, from_=180, to=0)

servo4_slider.place(x=210, y=100)

servo4_label=Label(window,text="Servo 4")

servo4_label.place(x=220, y=80)

servo5_slider = Scale(window, from_=180, to=0)

servo5_slider.place(x=280, y=100)

servo5_label=Label(window,text="Servo 5")

servo5_label.place(x=290, y=80)

save_button=Button(window, text="Record Position", command=save_positions)

save_button.place(x=10,y=220)

clear_button=Button(window, text="Clear Last Position", command=clear_last_positions)

clear_button.place(x=120,y=220)

12
clear_button=Button(window, text="Clear All Positions", command=clear_all_positions)

clear_button.place(x=120,y=255)

play_button=Button(window, text="Replay Positions", command=play_positions, height=3)

play_button.place(x=250,y=220)

menubar = Menu(window)

filemenu = Menu(menubar, tearoff=0)

filemenu.add_command(label="Open File", command=open_file)

filemenu.add_command(label="Save File", command=save_file)

menubar.add_cascade(label="File", menu=filemenu)

editmenu = Menu(menubar, tearoff=0)

editmenu.add_command(label="Clear last position", command=clear_last_positions)

editmenu.add_command(label="Clear all positions", command=clear_all_positions)

menubar.add_cascade(label="Edit", menu=editmenu)

helpmenu = Menu(menubar, tearoff=0)

helpmenu.add_command(label="How to use (printed in console)", command=instructions)

menubar.add_cascade(label="Help", menu=helpmenu)

window.config(menu=menubar)

while True:

window.update()

if(port_opened):

send_positions([servo1_slider.get(), servo2_slider.get(), servo3_slider.get(),


servo4_slider.get(), servo5_slider.get()])

13
Project Timeline

Week Task Progress Remarks

1 Problem definition, Literature review completed

2 Conceptual Design completed

3 Document proposal acknowledgement completed

4 Modeling - Calculations (DH-Parameters, ongoing


transformation Matrices)

5 Procurement - Materials, Components completed

6 Modeling - 3D CAD Rendering ongoing

7 Testing - Codes, program & hardware completed


nterfacing

8 -
Documentation - Report, Timeline

9 Model Analysis -

10 Presentation -

11-12 Project Defense -

14

You might also like