Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 89 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
89
Dung lượng
4,83 MB
Nội dung
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH TRẦN VĂN THIỆN ĐIỀU KHIỂN THÍCH NGHI CHO HỆ OMNI ROBOT SỬ DỤNG GIẢI THUẬT PID-NEURAL Chuyên ngành: KỸ THUẬT ĐIỆN TỬ Mã chuyên ngành: 60520203 LUẬN VĂN THẠC SĨ THÀNH PHỐ HỒ CHÍ MINH, NĂM 2019 BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH TRẦN VĂN THIỆN ĐIỀU KHIỂN THÍCH NGHI CHO HỆ OMNI ROBOT SỬ DỤNG GIẢI THUẬT PID-NEURAL Chuyên ngành: KỸ THUẬT ĐIỆN TỬ Mã chuyên ngành: 60520203 LUẬN VĂN THẠC SĨ THÀNH PHỐ HỒ CHÍ MINH, NĂM 2019 Cơng trình hồn thành Trường Cao Đẳng Sài Gòn, quận 12, Tp.HCM Người hướng dẫn khoa học: Tiến Sĩ Mai Thăng Long Người phản biện 1: Người phản biện 2: Luận văn thạc sĩ bảo vệ Hội đồng chấm bảo vệ Luận văn thạc sĩ Trường Đại học Công nghiệp thành phố Hờ Chí Minh ngày … tháng .năm …… Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: - Chủ tịch Hội đồng - Phản biện - Phản biện - Ủy viên - Thư ký CHỦ TỊCH HỘI ĐỒNG TRƯỞNG KHOA BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CƠNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự - Hạnh phúc NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: Trần Văn Thiện MSHV: 16083561 Ngày, tháng, năm sinh: 10-04-1994 Nơi sinh: Quy Nhơn, Bình Định Chuyên ngành: Kỹ thuật Điện tử Mã chuyên ngành: 60520203 I TÊN ĐỀ TÀI: Điều khiển thích nghi cho hệ Omni robot sử dụng giải thuật PID-Neural NHIỆM VỤ VÀ NỘI DUNG: Nghiên cứu tìm hiểu bợ điều khiển PID-Neural Thiết kế bộ điều khiển PIDNeural, chứng minh tính ổn định bợ điều khiển thiết kế định lý ổn định Lyapunov Mô bộ điều khiển ứng dụng hệ Omni robot sử dụng phần mềm Matlab Thực nghiệm để kiểm chứng bộ điều khiển đề xuất Phân tích đánh giá kết lý thuyết thực nghiệm II NGÀY GIAO NHIỆM VỤ: Quyết định số 2057/QĐ-ĐHCN, ngày 02/10/2018 Trường Đại học Công Nghiệp TPHCM việc giao đề tài cử người hướng dẫn luận văn thạc sĩ III NGÀY HOÀN THÀNH NHIỆM VỤ: 02/04/2019 IV NGƯỜI HƯỚNG DẪN KHOA HỌC: Tiến sĩ Mai Thăng Long Tp Hồ Chí Minh, ngày … tháng … năm 20 … NGƯỜI HƯỚNG DẪN CHỦ NHIỆM BỘ MÔN ĐÀO TẠO TRƯỞNG KHOA/VIỆN LỜI CẢM ƠN Đầu tiên xin cảm ơn Chúa đồng hành giúp đỡ tơi hồn thành đề tài này, tơi gửi lời cảm ơn sâu sắc đến thầy TS.Mai Thăng Long, người hướng dẫn nhiệt tình cung cấp cho nhiều kiến thức mới, định hướng cho luận văn đường học tập Xin cảm ơn quý thầy cô khoa Công Nghệ Điện tử nhiệt tình giúp đỡ, cung cấp kiến thức cần thiết, thầy TS.Nguyễn Tấn Lũy hướng dẫn nhiều kiến thức thực tế, cho biết kinh nghiệm thầy rất nhiệt tình bảo cần tư vấn Đặc biệt phải cảm ơn thầy TS.Nguyễn Ngọc Sơn, lúc gặp bế tắc thầy ln đợng viên, khích lệ, dẫn phương hướng để giải vấn đề thầy dẫn thiếu xót mà tơi vấp phải để hồn thiện kiến thức Cảm ơn Trường SaigonTech tạo điều kiện cho làm việc, cảm ơn anh Nguyễn Đức Tiến tạo nhiều điều kiện, giúp đỡ nhiều mặt để tơi hồn thành hết luận văn Đồng thời xin cảm ơn anh, bạn lớp CHDT6B bên giúp đỡ việc học, đặc biệt cảm ơn bạn Nghĩa cạnh để làm việc chung, giúp đỡ để hoàn thành tốt việc học, chia sẻ vui buồn cuộc sống Cảm ơn gia đình ủng hợ, ng̀n đợng viên vô lớn với việc học Tôi gửi lời cảm ơn đến người bạn, người em trai giúp đỡ công việc hàng ngày, giúp đỡ tơi lúc khó khăn, để chuyên tâm lo cho công việc, lo cho việc học Xin chân thành cảm ơn tất người i TÓM TẮT LUẬN VĂN THẠC SĨ Trong luận văn trình bày mợt bợ điều khiển bám thích nghi PID-Neural để kiểm soát quỹ đạo robot Omni bánh Khi robot di chuyển chịu tác động mợt số thành phần khơng chắn mơ hình, nhiễu chưa biết, tương tác thông số hệ thống robot Mạng neural sử dụng để ước lượng thành phần không chắn nhiễu chưa biết hệ thống robot Bợ điều khiển bám thích nghi PID-Neural chứng minh ổn định qua định lý Lyapunov Hiệu bộ điều khiển kiểm chứng mô kết thực tế ii ABSTRACT This thesis presents an adaptive tracking PID-Neural controller to control the trajectory of the Omni three-wheeled robot When the robot moves, it is affected by some uncertain components of the model, unknown noise, the interaction of parameters in the robot system Neural networks are used here to estimate uncertain components and unknown noise of the robot system PID-Neural adaptive grip controller is proved stable through Lyapunov's theorem The adaptive tracking PIDNeural controller is proved stable through Lyapunov's theorem The efficiency of the controller is verified by simulation and actual results iii LỜI CAM ĐOAN Tôi xin cam đoan đề tài với nội dung “Điều khiển thích nghi cho hệ Omni robot sử dụng giải thuật PID-NEURAL” đề tài nghiên cứu tôi, hướng dẫn TS Mai Thăng Long Các số liệu, kết quả, mơ trình bày báo cáo hồn tồn trung thực, có ng̀n trích dẫn cụ thể Học viên Trần Văn Thiện iv MỤC LỤC MỤC LỤC v DANH MỤC HÌNH ẢNH vii DANH MỤC BẢNG BIỂU ix MỞ ĐẦU 1 Đặt vấn đề Mục tiêu nghiên cứu Đối tượng phạm vi nghiên cứu: Cách tiếp cận phương pháp nghiên cứu Ý nghĩa thực tiễn đề tài CHƯƠNG TỔNG QUAN 1.1 Giới thiệu robot tự hành 1.2 Giới thiệu robot omni 1.3 Các cơng trình nghiên cứu CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 Cơ sở toán 2.1.1 Chuẩn (Norm) 2.1.2 Hàm liên tục 10 2.1.3 Hàm đạo hàm 10 2.1.4 Vết ma trận 10 2.2 Động lực học robot 11 2.2.1 Động lực học robot tổng quát 11 2.2.2 Động lực học cho robot Omni bánh 12 2.3 Lý thuyết ổn định Lyapunov 15 2.3.1 Giới thiệu phương pháp Lyapunov 15 2.3.2 2.3.3 2.3.4 2.3.5 Điểm cân hệ phi tuyến 16 Ổn định Lyapunov 16 Phương pháp trực tiếp Lyapunov 17 Bổ đề Barbalat 18 2.4 Mạng neural để ước lượng 18 CHƯƠNG THIẾT KẾ BỘ ĐIỀU KHIỂN VÀ MÔ PHỎNG 21 3.1 Thiết kế bộ điều khiển PID-Neural 21 v 3.2 3.3 Mô 26 Kết mô 27 3.3.1 3.3.2 Robot hoạt động không nhiễu 28 Robot hoạt đợng có nhiễu 32 3.4 Kết luận mô 45 CHƯƠNG MƠ HÌNH THỰC NGHIỆM 46 4.1 4.2 Sơ đồ khối tồn bợ hệ thống robot 46 Mơ hình thực tế phịng thí nghiệm 47 4.3 Kết thực nghiệm: 48 4.3.1 Thực nghiệm 49 4.3.2 4.3.3 Thực nghiệm 53 Kết luận thực nghiệm 56 KẾT LUẬN VÀ KIẾN NGHỊ 57 Kết luận 57 Kiến nghị 57 TÀI LIỆU THAM KHẢO 58 PHỤ LỤC 61 LÝ LỊCH TRÍCH NGANG CỦA HỌC VIÊN 76 vi 'BoundingBoxOutputPort', true', 'MinimumBlobArea', 100, 'MaximumBlobArea', 3000, 'MaximumCount', 10); hshapeinsBox = vision.ShapeInserter('BorderColorSource', 'Input port', % Set box handling 'Fill', true, 'FillColorSource', 'Input port', 'Opacity', 0.4); htextinsRed = vision.TextInserter('Text', 'Red : %2d', % Set text for number of blobs 'Location', [5 2], 'Color', [1 0], // red color 'Font', 'Courier New', 'FontSize', 14); htextinsGreen = vision.TextInserter('Text', 'Green : %2d', % Set text for number of blobs 'Location', [5 18], 'Color', [0 0], // green color 'Font', 'Courier New', 'FontSize', 14); htextinsCent = vision.TextInserter('Text', '+ X:%4d, Y:%4d', % set text for centroid 'LocationSource', 'Input port', 'Color', [1 0], // yellow color 'Font', 'Courier New', 'FontSize', 14); hVideoIn = vision.VideoPlayer('Name', 'Final Video', % Output video player 'Position', [100 100 vidInfo.MaxWidth+20 vidInfo.MaxHeight+30]); nFrame = 0; % Frame number initialization %% Processing Loop while (nFrame < 200) rgbFrame = step(vidDevice); % Acquire single frame rgbFrame = flipdim(rgbFrame,1); 62 diffFrameRed = imsubtract(rgbFrame(:,:,1), rgb2gray(rgbFrame)); diffFrameRed = medfilt2(diffFrameRed, [3 3]); binFrameRed = im2bw(diffFrameRed, redThresh); diffFrameGreen = imsubtract(rgbFrame(:,:,2), rgb2gray(rgbFrame)); diffFrameGreen = medfilt2(diffFrameGreen, [3 3]); binFrameGreen = im2bw(diffFrameGreen, greenThresh); [centroidRed, bboxRed] = step(hblob, binFrameRed); centroidRed = uint16(centroidRed [centroidGreen, bboxGreen] = step(hblob, binFrameGreen); centroidGreen = uint16(centroidGreen); rgbFrame(1:50,1:90,:) = 0; vidIn = step(hshapeinsBox, rgbFrame, bboxRed, single([1 0])); % vidIn = step(hshapeinsBox, vidIn, bboxGreen, single([0 0])); % for object = 1:1:length(bboxRed(:,1)) centXRed = centroidRed(object,1); centYRed = centroidRed(object,2); vidIn = step(htextinsCent, vidIn, [centXRed centYRed], [centXRed-6 centYRed-9]); end for object = 1:1:length(bboxGreen(:,1)) centXGreen = centroidGreen(object,1); centYGreen = centroidGreen(object,2); vidIn = step(htextinsCent, vidIn, [centXGreen centYGreen], [centXGreen-6 centYGreen-9]); end tile=3.2; mang = [centXRed/tile,centYRed/tile,centXGreen/tile,centYGreen/tile,x_mouse*10,y _mouse*10]; set(handles.x_do, 'string', mang(1)); set(handles.y_do, 'string', mang(2)); set(handles.x_xanh, 'string', mang(3)); set(handles.y_xanh, 'string', mang(4)); arrayString='!'; specCharArray='@#$%^&'; 63 for i=1:length(mang) arrayString=strcat(arrayString, num2str(mang(i)),specCharArray(i)); end fprintf(s,arrayString); %arrayString %mang(1) vidIn = step(htextinsRed, vidIn, uint8(length(bboxRed(:,1)))); % Count the number of red blobs vidIn = step(htextinsGreen, vidIn, uint8(length(bboxGreen(:,1)))); % x_tam = 100*tile; y_tam =75*tile; bk=45*tile; hold on t=0:0.0008:100; x=x_tam+bk*sin(2*pi*2*t); y=y_tam+bk*cos(2*pi*2*t); % save hX.mat x x_8=x_tam+bk*sin(2*pi*2*t); y_8=y_tam+bk*cos(1*pi*2*t); %hold on plot(x,y,'b',x_tam, y_tam,'*');%Plotting sin Vs cos hold on plot(mang(1)*tile, mang(2)*tile,'b o'); % plot(x_8,y_8,x_tam, y_tam,'*');%Plotting sin Vs cos %axes(handles.axes2); cla; axes(handles.axes1); cla; imshow(vidIn); nFrame = nFrame+1; if nFrame >100 nFrame=0; end end %% Clearing Memory release(hVideoIn); % Release all memory and buffer used release(vidDevice); clear all; 64 clc;fclose(s);delete(s);close function thoat_Callback(hObject, eventdata, handles) global s; close;fclose(s);delete(s); release(hVideoIn); % Release all memory and buffer used release(vidDevice); clear all; clc; function x_do_Callback(hObject, eventdata, handles) function x_do_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function y_do_Callback(hObject, eventdata, handles) % - Executes during object creation, after setting all properties function y_do_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function y_xanh_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function Connect_com_Callback(hObject, eventdata, handles) global s; s = serial('COM17'); set(s,'Baudrate', 19200); fopen(s); function guichuoi_Callback(hObject, eventdata, handles) global s; fprintf(s,'1234567E'); function disconnect_Callback(hObject, eventdata, handles) function figure1_WindowButtonMotionFcn(hObject, eventdata, handles) global s x_mouse y_mouse ; pos = get(hObject, 'currentpoint'); % get mouse location on figure 65 x_mouse =pos(1); y_mouse = 15- pos(2); % assign locations to x and y set(handles.lbl_x, 'string', [num2str(10*x_mouse)]); % update text for x set(handles.lbl_y, 'string', [num2str(10*y_mouse)]); % update text for y function figure1_WindowButtonUpFcn(hObject, eventdata, handles) global s; pos = get(hObject, 'currentpoint'); % get mouse location on figure x_mouse = pos(1); y_mouse = pos(2); % assign locations to x and y set(handles.lbl_last_action, 'string', [' X: ', num2str(x_mouse), ', Y: ', num2str(y_mouse)]); % fprintf(s,'1234567E'); function pushbutton11_Callback(hObject, eventdata, handles) disp('thien'); Chương trình viết cho điều khiển PID-Neural: function [sys,x0,str,ts] = bodieukhienPID_neural_omni3wheel(t,x,u,flag) switch flag, cas [sys,x0,str,ts]=mdlInitializeSizes; case 1, e 0, sys= mdlDerivatives(t, x, u); case 3, sys=mdlOutputs(t,x,u); case {2,4,9} sys=[]; otherwise error(['Unhandled flag = ',num2str(flag)]); end function [sys,x0,str,ts]=mdlInitializeSizes global a b c l m Kw Kr Ke ki esi to_d D1 D2 D3 theta b= 5; % so node an c= 3;% ngo f_hat laf ngo mangj NN a = 15; % ngo vao mang l=0.5; %thong so ham RBF m=6; % ngo Kw= 7; % he so hojc cho mang Kr= 3; % he so ty le kp+kd Ke= 2; % he so ty le kp 66 ki=0; esi = 0.01; % chan tren to_d = 0.01; %chan tren sizes = simsizes; %% t?o giá tr? ??t mong mu?n sizes.NumContStates = c*b;%% b node an, g?m bi?n tr?ng thái sizes.NumDiscStates = 0; sizes.NumOutputs =7; %%%s? l??ng ngõ q q dot sizes.NumInputs = 18; %s? l??ng ngõ vào sizes.DirFeedthrough = 0; sizes.NumSampleTimes = 0; sys = simsizes(sizes); for ii=1:c*b x0(ii)= 0; end % str = []; ts = []; function sys= mdlDerivatives(t,x,u) global a b c l m Kw Kr Ke ki esi to_d to f_hat theta D1 D2 D3 e xdat = u(1); ydat = u(2); xdat_1dot = u(4); ydat_1dot = u(5); xdat_2dot = u(7); ydat_2dot = u(8); xthuc = u(10); ythuc = u(11); xthuc_1dot = u(13); ythuc_1dot = u(14); thetadat = u(3); thetadat_1dot = u(6); thetadat_2dot = u(9); thetathuc = u(12); thetathuc_1dot = u(15); e_tichphan=[u(16);u(17);u(18)]; qd= [xdat;ydat;thetadat]; qd_1dot = [xdat_1dot;ydat_1dot;thetadat_1dot]; 67 qd_2dot = [xdat_2dot;ydat_2dot;thetadat_2dot]; qt= [xthuc;ythuc;thetathuc]; qt_1dot = [xthuc_1dot;ythuc_1dot;thetathuc_1dot]; theta = pi/2 + thetathuc; goc =1; D1= [cos(theta);sin(theta) ;goc]; D2 =(1/2)*[-cos(theta)-sqrt(3)*sin(theta);sin(theta)+sqrt(3)*cos(theta);goc]; D3 =(-1/2)*[cos(theta)-sqrt(3)*sin(theta);sin(theta)+sqrt(3)*cos(theta);goc]; e = qd - qt; e_dot = qd_1dot - qt_1dot; r=(Ke*e+e_dot+ki*e_tichphan); for j=1:1:c, for jj=1:1:b, % W(j,jj)=x(jj+(j-1)*jj); W(j,jj)=x(j*jj+(j-1)*(b-jj)); end end %% ngo vao cho mang NN 15 z= [qd_2dot(1); qd_1dot(1); qd(1); e_dot(1);e(1); qd_2dot(2);qd_1dot(2);qd(2); e_dot(2); e(2);qd_1dot(3);qd(3); qd_2dot(3);e_dot(3);e(3)]; e_dot(2); e(2)]; %% tinhs toans ham kich hoat (xich ma) for j = 1:1:b, for i= 1:1:a, deta(j)= exp(-(z(i)-l)^2/(m*m)) ; %e^ end end %% tính tốn giátriji uoc luong luc dieu khien y = W*deta td=[0.1*sin(t);0.1*cos(t);0]; f_hat = W*deta' ; to_v = (esi+to_d)*r/norm(r); to= Kr*r+f_hat +to_v; %to= Kr*r; 68 for j= 1:1:c, for jj = 1:1:b, W(j,jj)= Kw*deta(jj)*r(j); % sys(jj+(j-1)*jj)= W(j, jj); sys(j*jj+(j-1)*(b-jj))= W(j, jj); end end function sys=mdlOutputs(t,x,u) global to f_hat theta D1 D2 D3 e if t==0 to=zeros(3,1); e=zeros(3,1); f_hat=zeros(3,1); D1= [0;1;1]; D2=[-sqrt(3)/2;-0.5;1] ;D3=[sqrt(3)/2;-0.5;1] ; end u1 = to'*D1; u2 = to'*D2; u3 = to'*D3; sys(1)=u1;%q1 sys(2)=u2;%q2 sys(3)=u3;%q2 sys(4)= norm(f_hat); sys(5)= e(1); sys(6)= e(2); sys(7)= e(3); Mơ hình: function [sys,x0,str,ts] = mohinh2(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts]=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); %case 2, %sys=mdlUpdate(t,x,u,A,B,C); 69 case 3, sys=mdlOutputs(t,x,u); %case 4, % sys = mdlGetTimeOfNextVarHit( m= 5; end u1=u(1); u2=u(2); u3=u(3); u=[u1;u2; u3]; %%% x3=q1_dot, x4 = q2_dot xt=x(1); 70 yt=x(2); thetat=x(3); xt_1dot=x(4); %x_1dot yt_1dot=x(5); %y_1dot thetat_1dot = x(6);%theta1dot H11 =-sin(thetat); H12 =-sin(pi/3 -thetat ); H13 = sin(pi/3 +thetat ); H21 = cos(thetat); H22 =-cos(pi/3 - thetat); H23 =-cos(pi/3 + thetat); H31 = L; H32 = L; H33 = L; H = [H11 H12 H13; H21 H22 H23; H31 H32 H33]; % inv(H') MM=[m 0 ;0 m ; 0 J]; VV=[1.5*b 0; 1.5*b ; 0 3*b*L*L]; M= (1/a)*inv(H)*MM; V = (1/a)*inv(H)*VV; %% o=6; r= 1; xd = o+r*sin(t); yd = o+r*cos(t); thetad= 0; xd_1dot = cos(t); yd_1dot = -sin(t); thetad_1dot= 0; xd_2dot = -sin(t); yd_2dot = -cos(t); thetad_2dot =0; qd = [xd;yd;thetad]; qd_1dot = [xd_1dot;yd_1dot;thetad_1dot]; qd_2dot = [xd_2dot;yd_2dot;thetad_2dot]; 71 q=[xt;yt;thetat]; q_1dot=[xt_1dot;yt_1dot;thetat_1dot]; td=[0.1*sin(t);0.1*cos(t);0]; Kr = 3; e = qd -q; e_1dot = qd_1dot - q_1dot; fd = M*(qd_2dot+Kr*e_1dot)+V*(qd_1dot+Kr*e); %nhieu mo hinh %% +td QQ=inv(M)*(u-V*q_1dot-td); % q_2dot mo hinh %% -td sys(1)=x(4); % t?a ?? x sys(2)=x(5); % sys(3)= x(6); sys(4)=QQ(1); sys(5)=QQ(2); sys(6)=QQ(3); function sys=mdlOutputs(t,x,u) global fd if t==0 fd = zeros(3,1); end sys(1)=x(1); sys(2)=x(2); sys(3)=x(3); sys(4)=x(4); sys(5)=x(5); sys(6)=x(6); sys(7)=norm(fd); Hiện thị: close all; figure(1); plot(t, Qd(:,1), 'k', t, Q(:,1), ' ',t, Q_pd(:,1), '-.' ,'LineWidth',3);title('X'); xlabel('Time (s)'); ylabel('x(m)'); 72 legend('Dat','PID-Neural', 'PID'); grid on; %%%%% xuat gia tri y figure(2); plot(t, Qd(:,2), 'k', t, Q(:,2), ' ',t, Q_pd(:,2), '-.' ,'LineWidth',3);title('Y'); xlabel('Time (s)'); ylabel('y(m)'); legend('Dat','PID-Neural', 'PID'); grid on; %%%%% xuat gia tri theta figure(3); plot(t, Qd(:,3), 'k', t, Q(:,3), ' ',t, Q_pd(:,3), '-.' ,'LineWidth',3);title('theta'); xlabel('Time (s)'); ylabel('theta'); legend('Dat','PID-Neural', 'PID'); grid on; %%%%% xy grab figure(4); plot(Qd(:,1),Qd(:,2), 'k' ,'LineWidth',2); hold on; plot(Q(:,1), Q(:,2), ' ' ,'LineWidth',2); plot(Q_pd(:,1), Q_pd(:,2), 'r-.' ,'LineWidth',2); xlabel('x(m)'); ylabel('y(m)'); legend('Dat','PID-Neural', 'PID'); title('XY'); grid on; %%%%% sai so E1 = Qd(:,1) - Q(:,1); E2 = Qd(:,2) - Q(:,2); E3 =Qd(:,3)-Q(:,3); %%%%% xuat gia tri van toc q2_dot vaf q2d_dot figure(5); plot(t, E1,'k', t, E2, ' ', t, E3, '-.' ,'LineWidth',3); xlabel('Time (s)'); ylabel('sai so x, y, theta'); legend('x','y', 'theta'); title('Sai so x y, theta') grid on; %%%%% xuat gia tri luc dieu khien figure(6); plot(t, to(:,1), 'k', t, to(:,2), ' ' ,t, to(:,3),'-.' ,'LineWidth',3); 73 title('LUC DIEU KHIEN'); xlabel('Time (s)'); ylabel('Luc dieu khien'); legend('u1','u2', 'u3'); grid on; %%%%% xuat gia tri uoc l??ng figure(7); plot(t, Q(:,7), 'k' , t,f_hat, ' ', 'LineWidth',3); title('SO SANH UOC LUONG'); xlabel('Time (s)'); ylabel('fhat, fd'); legend('fd','fhat'); grid on; A1=Qd(:,1)-Q(:,1); A2=Qd(:,2)-Q(:,2); A3=Qd(:,3)-Q(:,3); A4=Qd(:,1)-Q_pd(:,1); A5=Qd(:,2)-Q_pd(:,2); A6=Qd(:,3)-Q_pd(:,3); MSE_x_pid_neural=sum(A1.^2)/3001 MSE_y_pid_neural=sum(A2.^2)/3001 MSE_theta_pid_neural=sum(A3.^2)/3001 MSE_x_pd=sum(A4.^2)/3001 MSE_y_pd=sum(A5.^2)/3001 MSE_theta_pd=sum(A6.^2)/3001 Quỹ đạo đặt hình trịn: function [sys,x0,str,ts] = dat_tron(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts]=mdlInitializeSizes; case 3, sys=mdlOutputs(t,x,u); case {1,2,4,9} sys=[]; otherwise error(['Unhandled flag = ',num2str(flag)]); end function [sys,x0,str,ts]=mdlInitializeSizes 74 sizes = simsizes; %% t?o giá tr? ??t mong mu?n sizes.NumContStates = 0;%% g?m bi?n tr?ng thái sizes.NumDiscStates = 0; sizes.NumOutputs = 9; %%%s? l??ng ngõ q q dot sizes.NumInputs = 0; %s? l??ng ngõ vào sizes.DirFeedthrough = 0; sizes.NumSampleTimes = 1; sys = simsizes(sizes); x0 = []; %giá tr? ban ??u c?a bi?n tr?ng thái str = []; ts = [0]; function sys=mdlOutputs(t,x,u) o=6; r= 1; xd = o+r*sin(t); yd = o+r*cos(t); thetad= 0; xd_1dot = cos(t); yd_1dot = -sin(t); thetad_1dot= 0; xd_2dot = -sin(t); yd_2dot = -cos(t); thetad_2dot =0; sys(1)=xd;%q1 sys(2)=yd;%q2 sys(3)=thetad;%q1_dot sys(4)=xd_1dot;%q_dot sys(5)=yd_1dot;%q1_2dot sys(6)=thetad_1dot;%q2_2dot sys(7)=xd_2dot;%q_dot sys(8)=yd_2dot;%q1_2dot sys(9)=thetad_2dot;%q2_2dot 75 LÝ LỊCH TRÍCH NGANG CỦA HỌC VIÊN I LÝ LỊCH SƠ LƯỢC: Họ tên: Trần Văn Thiện Giới tính: Nam Ngày, tháng, năm sinh: 10/04/1994 Nơi sinh: Quy Nhơn, Bình Định Email: t.v.thien1994@gmail.com Điện thoại: 0348 368 009 II QUÁ TRÌNH ĐÀO TẠO: Năm 2012-2016 Trường Đại học Công nghiệp thành phố Hồ Chí Minh Bậc đào tạo: Đại học – Tín Loại hình đào tạo: Chính quy Khoa: Khoa Cơng nghệ Điện tử Lớp: Đại học điện tử tự động 8A Năm: 2016-2018 Trường Đại học Công nghiệp thành phố Hồ Chí Minh Bậc đào tạo: Thạc sĩ – Tín Loại hình đào tạo: Chính quy (Đợt 2) Ngành: Kỹ thuật điện tử - 60520203 Chuyên ngành: Kỹ thuật điện tử - 60520203 Khoa: Khoa Công nghệ Điện tử Lớp: Cao học Kỹ thuật điện tử 6B III QUÁ TRÌNH CÔNG TÁC CHUYÊN MÔN: Thời gian Từ 2016 - Nay Nơi cơng tác Trường Cao đẳng Sài Gịn Cơng việc đảm nhiệm Nhân viên IT XÁC NHẬN CỦA Tp HCM, ngày tháng Năm 20 CƠ QUAN / ĐỊA PHƯƠNG Người khai Trần Văn Thiện 76 ... Kỹ thuật Điện tử Mã chuyên ngành: 60520203 I TÊN ĐỀ TÀI: Điều khiển thích nghi cho hệ Omni robot sử dụng giải thuật PID- Neural NHIỆM VỤ VÀ NỘI DUNG: Nghi? ?n cứu tìm hiểu bợ điều khiển PID- Neural. .. robot tăng lên từ 2kg lên 5kg Bộ điều khiển PID- Neural tỏ thích ứng bợ điều khiển PID Cụ thể: Hình 3.9 quỹ đạo bám robot sử dụng hai bộ điều khiển PID PID -Neural, ta thấy bộ điều khiển PID. .. Thiết kế bợ điều khiển thích nghi PID- Neural cho robot omni bánh, để robot di chuyển theo quỹ đạo định trước một cách xác Đối tượng phạm vi nghi? ?n cứu: Mơ bợ điều khiển thích nghi PID- Neural thiết