16 Sơ đồ đấu dây cho một driver

Một phần của tài liệu Nghiên cứu và thiết kế robot trong công nghiệp (Trang 80 - 103)

P a g e 63 | 108

CHƯƠNG 6. KẾT QUẢ VÀ ĐÁNH GIÁ 6.1. .Kết quả, phân tích và đánh giá

Cơ học

Nghiên cứu được sự chuyển động cơ học và tác động qua lại lẫn nhau của các khâu từ đó đưa ra phương hướng điều khiển, tính tốn.

Nghiên cứu xác định được vị trí của robot tại thời điểm đang xét, tiến hành được phương pháp điều khiển, cũng như tinh chỉnh.

Nghiên cứu chuyển động tịnh tiến, chuyển động quay, chuyển động song phẳng, từ kết quả nghiên cứu đó chúng ta cũng có thể chọn động cơ cho tay máy sao cho phù hợp và công xuất khả năng làm việc và vận hành tay máy sao cho ổn định khi làm việc, trong cả trạng thái quá tải và điều kiện bình thường.

Lập trình điều khiển

Nhóm đồ án sử dụng phần mềm MATLAB lập trình điều khiển, sử dụng ngơn ngữ lập trình C để thiết kế giao diện điều khiển trên máy tính, với đặc tính được tích hợp rất nhiều ưu điểm trong việc lập trình cũng như hỗ trợ xử lý điều khiển linh hoạt với ứng dụng.

6.2. Hướng phát triển

6.2.1. Đánh giá kết quả đạt được Về phần lý thuyết Về phần lý thuyết

Cần phải nghiên cứu tối ưu hơn bài toán động lực học ngược, và bài tốn động lực học thuận để có thể điều khiển độ chĩnh xác về vận tốc và vị trí.

P a g e 64 | 108

Về phần mơ hình

Hạn chế về ý tưởng thiết kế, cần đưa ra nhiều mẫu concept cụ thể để có những cái nhìn khách quan và trực diện hơn về tay máy robot cuối cùng có thể đưa ra một sản phẩm tiêu biểu nhất cho công tác gia công và tạo ra sản phẩm .

6.2.2. Hướng phát triển Về phần lý thuyết: Về phần lý thuyết:

Nghiên cứu chi tiết hơn bài toán động học ngược, bài toán động học thuận để điều khiển động cơ chính xác hơn

Nghiên cứu thêm các thuật toán nội suy khác: Bresenham, đối xứng, Midpoint,.

Về mơ hình:

Nghiên cứu tối ưu hệ thống cơ khí theo quan điểm của “cơ điện tử”. Cần tối ưu hóa từ phần lên ý tưởng đến phần gia công và cuối cùng là tinh chỉnh cho ra sản phẩm hoàn chỉnh sao cho tổng thời gian là ngắn nhất.

Nghiên cứu trang bị cho tay máy robot thêm các hệ thống cảm biến, hệ thống đinh vị để đạt độ chính xác nhất định.

P a g e 65 | 108

TÀI LIỆU THAM KHẢO

1. TS. Nguyễn Mạnh Tiến, Điều khiển robot công nghiệp, NXB Khoa học Kỹ thuật, 2007.

2. Bùi Thư Cao, Trần Hữu Tồn, Kỹ thuật robot, Đại học Cơng nghiệp TPHCM, 2008.

3. PGS.TS. Nguyễn Trường Thịnh, Giáo trình Kỹ thuật robot, NXB Đại học

Quốc gia Thành phố Hồ Chí Minh, 2014.

4. TS. Khổng Minh, Giáo trình Robot cơng ngiệp, Tài liệu lưu hành nội bộ,

2016.

5. R.Paul, Robot Manipulators: Mathematics, Programming and Control. MIT Press, Cambridge, MA, 1982.

6. J.Craig, Introduction to Robotics: Mechanics and Control. Addison Wesley, Reading, MA, 1986.

7. Bruno Siciliano, Lorenzo Sciavico, Luigi Villani, Giuseppe Oriolo, Robotics

P a g e 66 | 108

Code mơ hình:

function varargout = Wan(varargin) % WAN MATLAB code for Wan.fig gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @Wan_OpeningFcn, ... 'gui_OutputFcn', @Wan_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

function Wan_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;

guidata(hObject, handles);

P a g e 67 | 108

varargout{1} = handles.output;

function slider1_Callback(hObject, eventdata, handles) ModelName = 'WAN'; % a1 = 0; a2 = 500; a3 = 420.17; a4 = 160; theta1=get(handles.slider1,'value'); set(handles.edit1,'string',num2str(theta1)); theta2=get(handles.slider2,'value'); set(handles.edit2,'string',num2str(theta2)); theta3=get(handles.slider3,'value'); set(handles.edit3,'string',num2str(theta3)); theta4=get(handles.slider4,'value'); set(handles.edit4,'string',num2str(theta4));

set_param([ModelName '/Slider Gain1'],'Gain',num2str(theta1)); set_param([ModelName '/Slider Gain2'],'Gain',num2str(theta2)); set_param([ModelName '/Slider Gain3'],'Gain',num2str(theta3)); set_param([ModelName '/Slider Gain4'],'Gain',num2str(theta4));

T1 = [ cosd(theta1) 0 -sind(theta1) 0; sind(theta1) 0 -cosd(theta1) 0;

P a g e 68 | 108

0 -1 0 486; 0 0 0 1];

T2 = [ cosd(theta2) -sind(theta2) 0 a2*cosd(theta2); sind(theta2) cosd(theta2) 0 a2*sind(theta2); 0 0 1 0;

0 0 0 1];

T3 = [ cosd(theta3) -sind(theta3) 0 a3*cosd(theta3); sind(theta3) cosd(theta3) 0 a3*sind(theta3); 0 0 1 0;

0 0 0 1];

T4 = [ cosd(theta4) -sind(theta4) 0 a4*cosd(theta4); sind(theta4) cosd(theta4) 0 a4*sind(theta4); 0 0 1 0; 0 0 0 1]; T = T1*T2*T3*T4; px=T(1,4); py=T(2,4); pz=T(3,4); set(handles.edit5,'string',num2str(px));

P a g e 69 | 108

set(handles.edit6,'string',num2str(py)); set(handles.edit7,'string',num2str(pz));

function slider1_CreateFcn(hObject, eventdata, handles)

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]); end

function edit1_Callback(hObject, eventdata, handles) function edit1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function slider2_Callback(hObject, eventdata, handles) ModelName = 'WAN'; % a1 = 0; a2 = 500; a3 = 420.17; a4 = 160;

%get the angle

P a g e 70 | 108 set(handles.edit1,'string',num2str(theta1)); theta2=get(handles.slider2,'value'); set(handles.edit2,'string',num2str(theta2)); theta3=get(handles.slider3,'value'); set(handles.edit3,'string',num2str(theta3)); theta4=get(handles.slider4,'value'); set(handles.edit4,'string',num2str(theta4));

%xoay canh tay ben simulink

set_param([ModelName '/Slider Gain1'],'Gain',num2str(theta1)); set_param([ModelName '/Slider Gain2'],'Gain',num2str(theta2)); set_param([ModelName '/Slider Gain3'],'Gain',num2str(theta3)); set_param([ModelName '/Slider Gain4'],'Gain',num2str(theta4)); T1 = [ cosd(theta1) 0 -sind(theta1) 0; sind(theta1) 0 -cosd(theta1) 0; 0 -1 0 486; 0 0 0 1];

T2 = [ cosd(theta2) -sind(theta2) 0 a2*cosd(theta2); sind(theta2) cosd(theta2) 0 a2*sind(theta2); 0 0 1 0;

P a g e 71 | 108

T3 = [ cosd(theta3) -sind(theta3) 0 a3*cosd(theta3); sind(theta3) cosd(theta3) 0 a3*sind(theta3); 0 0 1 0;

0 0 0 1];

T4 = [ cosd(theta4) -sind(theta4) 0 a4*cosd(theta4); sind(theta4) cosd(theta4) 0 a4*sind(theta4); 0 0 1 0; 0 0 0 1]; T = T1*T2*T3*T4; px=T(1,4); py=T(2,4); pz=T(3,4); set(handles.edit5,'string',num2str(px)); set(handles.edit6,'string',num2str(py)); set(handles.edit7,'string',num2str(pz));

function slider2_CreateFcn(hObject, eventdata, handles)

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]); end

P a g e 72 | 108

function edit2_Callback(hObject, eventdata, handles) function edit2_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

% --- Executes on slider movement.

function slider3_Callback(hObject, eventdata, handles) ModelName = 'WAN'; % a1 = 0; a2 = 500; a3 = 420.17; a4 = 160;

%get the angle

theta1=get(handles.slider1,'value');

set(handles.edit1,'string',num2str(theta1)); theta2=get(handles.slider2,'value');

set(handles.edit2,'string',num2str(theta2)); theta3=get(handles.slider3,'value');

P a g e 73 | 108

set(handles.edit3,'string',num2str(theta3)); theta4=get(handles.slider4,'value');

set(handles.edit4,'string',num2str(theta4));

set_param([ModelName '/Slider Gain1'],'Gain',num2str(theta1)); set_param([ModelName '/Slider Gain2'],'Gain',num2str(theta2)); set_param([ModelName '/Slider Gain3'],'Gain',num2str(theta3)); set_param([ModelName '/Slider Gain4'],'Gain',num2str(theta4)); T1 = [ cosd(theta1) 0 -sind(theta1) 0; sind(theta1) 0 -cosd(theta1) 0; 0 -1 0 486; 0 0 0 1];

T2 = [ cosd(theta2) -sind(theta2) 0 a2*cosd(theta2); sind(theta2) cosd(theta2) 0 a2*sind(theta2); 0 0 1 0;

0 0 0 1];

T3 = [ cosd(theta3) -sind(theta3) 0 a3*cosd(theta3); sind(theta3) cosd(theta3) 0 a3*sind(theta3); 0 0 1 0;

0 0 0 1];

P a g e 74 | 108

T4 = [ cosd(theta4) -sind(theta4) 0 a4*cosd(theta4); sind(theta4) cosd(theta4) 0 a4*sind(theta4); 0 0 1 0; 0 0 0 1]; T = T1*T2*T3*T4; px=T(1,4); py=T(2,4); pz=T(3,4); set(handles.edit5,'string',num2str(px)); set(handles.edit6,'string',num2str(py)); set(handles.edit7,'string',num2str(pz));

function slider3_CreateFcn(hObject, eventdata, handles)

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]); end

function edit3_Callback(hObject, eventdata, handles) function edit3_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

P a g e 75 | 108

% --- Executes on slider movement.

function slider4_Callback(hObject, eventdata, handles) ModelName = 'WAN'; % a1 = 0; a2 = 500; a3 = 420.17; a4 = 160;

%get the angle

theta1=get(handles.slider1,'value'); set(handles.edit1,'string',num2str(theta1)); theta2=get(handles.slider2,'value'); set(handles.edit2,'string',num2str(theta2)); theta3=get(handles.slider3,'value'); set(handles.edit3,'string',num2str(theta3)); theta4=get(handles.slider4,'value'); set(handles.edit4,'string',num2str(theta4));

%xoay canh tay ben simulink

set_param([ModelName '/Slider Gain1'],'Gain',num2str(theta1)); set_param([ModelName '/Slider Gain2'],'Gain',num2str(theta2));

P a g e 76 | 108

set_param([ModelName '/Slider Gain3'],'Gain',num2str(theta3)); set_param([ModelName '/Slider Gain4'],'Gain',num2str(theta4)); T1 = [ cosd(theta1) 0 -sind(theta1) 0; sind(theta1) 0 -cosd(theta1) 0; 0 -1 0 486; 0 0 0 1];

T2 = [ cosd(theta2) -sind(theta2) 0 a2*cosd(theta2); sind(theta2) cosd(theta2) 0 a2*sind(theta2); 0 0 1 0;

0 0 0 1];

T3 = [ cosd(theta3) -sind(theta3) 0 a3*cosd(theta3); sind(theta3) cosd(theta3) 0 a3*sind(theta3); 0 0 1 0;

0 0 0 1];

T4 = [ cosd(theta4) -sind(theta4) 0 a4*cosd(theta4); sind(theta4) cosd(theta4) 0 a4*sind(theta4); 0 0 1 0;

0 0 0 1]; T = T1*T2*T3*T4;

P a g e 77 | 108 px=T(1,4); py=T(2,4); pz=T(3,4); set(handles.edit5,'string',num2str(px)); set(handles.edit6,'string',num2str(py)); set(handles.edit7,'string',num2str(pz));

function slider4_CreateFcn(hObject, eventdata, handles)

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]); end

function edit4_Callback(hObject, eventdata, handles) function edit4_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function slider5_Callback(hObject, eventdata, handles) px_inv=get(handles.slider5,'value');

set(handles.edit8,'string',num2str(px_inv));

P a g e 78 | 108

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]); end

function edit5_Callback(hObject, eventdata, handles) function edit5_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function slider6_Callback(hObject, eventdata, handles) py_inv=get(handles.slider6,'value');

set(handles.edit9,'string',num2str(py_inv));

function slider6_CreateFcn(hObject, eventdata, handles)

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]); end

function edit6_Callback(hObject, eventdata, handles) function edit6_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

P a g e 79 | 108

function slider7_Callback(hObject, eventdata, handles) pz_inv=get(handles.slider7,'value');

set(handles.edit10,'string',num2str(pz_inv));

function slider7_CreateFcn(hObject, eventdata, handles)

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]); end

function edit7_Callback(hObject, eventdata, handles) function edit7_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function edit8_Callback(hObject, eventdata, handles) function edit8_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function edit9_Callback(hObject, eventdata, handles) function edit9_CreateFcn(hObject, eventdata, handles).

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

P a g e 80 | 108 set(hObject,'BackgroundColor','white'); end

function edit10_Callback(hObject, eventdata, handles) function edit10_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function pushbutton1_Callback(hObject, eventdata, handles) ModelName = 'WAN'; open_system(ModelName); set_param(ModelName,'BlockReduction','off'); set_param(ModelName,'StopTime','inf'); set_param(ModelName,'simulationMode','normal'); set_param(ModelName,'StartFcn','1');

set_param(ModelName, 'SimulationCommand', 'start'); function pushbutton2_Callback(hObject, eventdata, handles) ModelName = 'WAN';

% a1 = 486; a2 = 500;

P a g e 81 | 108 a3 = 420.17; a4 = 160; theta1 = 0; theta2 = 0; theta3 = 0; theta4 = 0;

%xoay canh tay ben simulink

set_param([ModelName '/Slider Gain1'],'Gain',num2str(theta1)); set_param([ModelName '/Slider Gain2'],'Gain',num2str(theta2)); set_param([ModelName '/Slider Gain3'],'Gain',num2str(theta3)); set_param([ModelName '/Slider Gain4'],'Gain',num2str(theta4)); T1 = [ cosd(theta1) 0 -sind(theta1) 0; sind(theta1) 0 cosd(theta1) 0; 0 -1 0 486; 0 0 0 1];

T2 = [ cosd(theta2) -sind(theta2) 0 a2*cosd(theta2); sind(theta2) cosd(theta2) 0 a2*sind(theta2); 0 0 1 0;

P a g e 82 | 108

0 0 0 1];

T3 = [ cosd(theta3) -sind(theta3) 0 a3*cosd(theta3); sind(theta3) cosd(theta3) 0 a3*sind(theta3); 0 0 1 0;

0 0 0 1];

T4 = [ cosd(theta4) -sind(theta4) 0 a4*cosd(theta4); sind(theta4) cosd(theta4) 0 a4*sind(theta4); 0 0 1 0; 0 0 0 1]; T = T1*T2*T3*T4; px=T(1,4); py=T(2,4); pz=T(3,4); set(handles.slider1,'value',theta1); set(handles.slider2,'value',theta2); set(handles.slider3,'value',theta3); set(handles.slider4,'value',theta4); set(handles.edit1,'string',num2str(theta1)); set(handles.edit2,'string',num2str(theta2)); set(handles.edit3,'string',num2str(theta3));

P a g e 83 | 108

set(handles.edit4,'string',num2str(theta4)); set(handles.edit5,'string',num2str(px)); set(handles.edit6,'string',num2str(py)); set(handles.edit7,'string',num2str(pz));

function pushbutton3_Callback(hObject, eventdata, handles) ModelName = 'WAN'; global var; px_inv=get(handles.slider5,'value'); set(handles.edit8,'string',num2str(px_inv)); py_inv=get(handles.slider6,'value'); set(handles.edit9,'string',num2str(py_inv)); pz_inv=get(handles.slider7,'value'); set(handles.edit10,'string',num2str(pz_inv)); set(handles.edit5,'string',num2str(px_inv)); set(handles.edit6,'string',num2str(py_inv)); set(handles.edit7,'string',num2str(pz_inv)); L1 = 486; L2 = 500; L3 = 420.17; L4 = 160; %ph??ng pháp ??i s? t1_inv=atan2d(py_inv,px_inv); %theta1 nx=px_inv*cosd(t1_inv)+py_inv*sind(t1_inv)-L4;

P a g e 84 | 108 ny=L1-pz_inv; M=(nx*nx+ny*ny-L2*L2-L3*L3)/(2*L2*L3); %cos(theta3_inv) N=sqrt(1-M*M); %sin(theta3_inv) t3_inv=atan2d(N,M); %theta3 A=ny*(L3*cosd(t3_inv)+L2)-L3*sind(t3_inv)*nx; B=nx*(L3*cosd(t3_inv)+L2)+L3*sind(t3_inv)*ny; t2_inv=atan2d(A,B); %theta2

t4_inv= -t2_inv -t3_inv; %theta4

guidata(hObject,handles);

set_param([ModelName '/Slider Gain1'],'Gain',num2str(t1_inv)); set_param([ModelName '/Slider Gain2'],'Gain',num2str(t2_inv)); set_param([ModelName '/Slider Gain3'],'Gain',num2str(t3_inv)); set_param([ModelName '/Slider Gain4'],'Gain',num2str(t4_inv)); set(handles.edit1,'string',num2str(t4_inv));

set(handles.edit2,'string',num2str(t4_inv));

P a g e 85 | 108

set(handles.edit4,'string',num2str(t4_inv));

function pushbutton4_Callback(hObject, eventdata, handles) close;

function axes4_ButtonDownFcn(hObject, eventdata, handles) handles.output = hObject; guidata(hObject, handles); clc; axes(handles.axes4); imshow('C:\Users\My Poor\Desktop\123\Logohutech.jpg'); axes(handles.axes6); imshow('C:\Users\My Poor\Desktop\123\background.jpg'); function edit12_Callback(hObject, eventdata, handles) function edit12_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

Một phần của tài liệu Nghiên cứu và thiết kế robot trong công nghiệp (Trang 80 - 103)

Tải bản đầy đủ (PDF)

(103 trang)