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