Robotic Arm Design
Robotic Arm Design
Robotic Arm Design
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.
Definitions:
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.
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
Layout
1. Connections
7
2. Program Codes
8
b. Python User Interface
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
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():
def play_positions():
print("playing: "+str(position))
send_positions(position);
time.sleep(1)
def clear_all_positions():
global saved_positions
saved_positions = []
def clear_last_positions():
global saved_positions
removed = saved_positions.pop()
print("removed: "+str(removed))
def open_file():
global saved_positions
10
filename = filedialog.askopenfilename(initialdir = "/", title = "Select a File", filetypes =
(("Text files","*.txt*"),("all files","*.*")))
data=file.read()
saved_positions=eval(data)
file.close()
print("opened: "+filename)
def save_file():
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("\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.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.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.place(x=70, y=100)
servo2_label=Label(window,text="Servo 2")
servo2_label.place(x=80, y=80)
servo3_slider.place(x=140, y=100)
servo3_label=Label(window,text="Servo 3")
servo3_label.place(x=150, y=80)
servo4_slider.place(x=210, y=100)
servo4_label=Label(window,text="Servo 4")
servo4_label.place(x=220, y=80)
servo5_slider.place(x=280, y=100)
servo5_label=Label(window,text="Servo 5")
servo5_label.place(x=290, y=80)
save_button.place(x=10,y=220)
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.place(x=250,y=220)
menubar = Menu(window)
menubar.add_cascade(label="File", menu=filemenu)
menubar.add_cascade(label="Edit", menu=editmenu)
menubar.add_cascade(label="Help", menu=helpmenu)
window.config(menu=menubar)
while True:
window.update()
if(port_opened):
13
Project Timeline
8 -
Documentation - Report, Timeline
9 Model Analysis -
10 Presentation -
14