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 ii TÓM TẮT LUẬN VĂN THẠC SĨ Trong luận văn này trình bày một bộ điều khiển bám thích nghi PID Neural để kiểm soát quỹ đạo của robot Omni 3 bánh Khi robot di chuyển sẽ chịu tác động của một số thành phần không chắc chắn của mô hình, các nhiễu c.
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 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 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 DANH MỤC HÌNH ẢNH Hình 1.1 Robot thám hiểm hỏa Sojourner[1] Hình 1.2 (A) Seekur, (B) Pioneer 3D-X, (C) PowerBot[1] Hình 1.3 WABOT-1(A) WABOT(B)[1] Hình 1.4 WowWee Rovio[1] Hình 1.5 Phase V Robocat robot[3] Hình 1.6 Robot đá banh[4] Hình 2.1 Cấu trúc hình học Omni robot bánh 12 Hình 2.2 (A) Ổn định Lyapunov, (B) Ổn định tiệm cận Lyapunov 17 Hình 2.3 Cấu trúc mạng RBF 19 Hình 3.1 Sơ đồ khối đề xuất cho hệ thống Robot 21 Hình 3.2 Sơ đờ mơ tồn bợ hệ thống Omni robot bánh Matlab 26 Hình 3.3 Quỹ đạo robot di chuyển theo đường tròn trường hợp 28 Hình 3.4 Bám trục X robot di chuyển theo trường hợp 29 Hình 3.5 Bám trục Y robot di chuyển theo trường hợp 29 Hình 3.6 Bám góc theta robot di chuyển theo trường hợp 30 Hình 3.7 Sai số bám theo x, y, theta robot di chuyển theo trường hợp 30 Hình 3.8 Momen điều khiển robot di chuyển theo trường hợp 31 Hình 3.9 Quỹ đạo robot di chuyển theo trường hợp 32 Hình 3.10 Bám trục x robot di chuyển theo trường hợp 33 Hình 3.11 Bám trục y robot di chuyển theo trường hợp 33 Hình 3.12 Bám góc theta robot di chuyển theo trường hợp 34 Hình 3.13 Sai số bám theo x, y, theta robot di chuyển theo trường hợp 34 Hình 3.14 Momen điều khiển robot di chuyển theo trường hợp 35 Hình 3.15 Ước lượng nhiễu thơng số khơng biết trường hợp 35 Hình 3.16 Quỹ đạo robot di chuyển theo trường hợp 37 Hình 3.17 Bám trục X robot di chuyển theo trường hợp 38 Hình 3.18 Bám trục Y robot di chuyển theo trường hợp 38 Hình 3.19 Bám góc Theta robot di chuyển theo trường hợp 39 Hình 3.20 Sai số bám theo x, y, theta robot di chuyển theo trường hợp 39 Hình 3.21 Momen điều khiển robot di chuyển theo trường hợp 40 Hình 3.22 Ước lượng nhiễu thông số theo trường hợp 40 Hình 3.23 Robot bám quỹ đạo trường hợp 42 vii Hình 3.24 Đáp ứng theo trục x robot bám quỹ đạo trường hợp 42 Hình 3.25 Đáp ứng theo trục y robot bám quỹ đạo trường hợp 43 Hình 3.26 Đáp ứng theo góc theta robot bám quỹ đạo trường hợp 43 Hình 3.27 Sai số bám theo x, y, theta robot trường hợp 44 Hình 3.28 Momen điều khiển robot robot di chuyển theo trường hợp 44 Hình 4.1 Sơ đờ khối phần cứng hệ thống robot 46 Hình 4.2 Khu vực chạy thử robot 47 Hình 4.3 Robot Omni bánh thực tế 48 Hình 4.4 Giao diện Matlab 48 Hình 4.5 Quỹ đạo bám robot chạy thực nghiệm 49 Hình 4.6 Đáp ứng robot theo trục x 50 Hình 4.7 Đáp ứng robot theo trục y 51 Hình 4.8 Sai số bám theo trục x,y 51 Hình 4.9 Momen điều khiển robot theo trục x 52 Hình 4.10 Momen điều khiển robot theo trục y 52 Hình 4.11 Robot bám quỹ đạo thực nghiệm 53 Hình 4.12 Sai số bám theo trục x,y 54 Hình 4.13 Tín hiệu PWM điều khiển theo trục x 55 Hình 4.14 Tín hiệu PWM điều khiển theo trục y 55 viii DANH MỤC BẢNG BIỂU Bảng 3.1 Thơng số mơ hình robot Omni bánh 27 Bảng 3.2 Thơng số mơ hình Robot Omni bánh ban đầu 27 Bảng 3.3 MSE trình robot di chuyển theo trường hợp 31 Bảng 3.4 MSE trình robot di chuyển theo trường hợp 36 Bảng 3.5 MSE robot di chuyển theo trường hợp 41 Bảng 3.6 MSE trình robot di chuyển theo trường hợp 44 Bảng 4.1 MSE trình robot di chuyển theo thực nghiệm 53 Bảng 4.2 MSE trình robot di chuyển theo thực nghiệm 56 ix MỞ ĐẦU Đặt vấn đề Xã hội ngày phát triển, robot tự hành dần trở nên phổ biến giới Robot tự hành di chuyển từ nơi đến nơi khác một cách tự động, không cần can thiệp hay trợ giúp từ bên Robot tự hành có đặc tính đặc biệt di chuyển tự không gian làm việc xác định trước, để đạt mục tiêu đề Khả di động làm cho chúng phù hợp với nhiều ứng dụng mơi trường Muốn robot di chuyển theo mợt quỹ đạo định trước, địi hỏi phải có mợt bợ điều khiển Chất lượng bám quỹ đạo sai số quỹ đạo yêu cầu quỹ đạo chạy thực Tuy nhiên, thực tế rất khó để robot bám quỹ đạo mợt cách xác, tồn một số thành phần không chắn mơ hình robot, nhiễu chưa biết, tương tác thông số hệ thống, đặc biệt robot tăng tốc giảm tốc Để điều khiển robot di chuyển theo một quỹ đạo cách hiệu một nhiệm vụ đầy thách thức rất quan trọng Vì thế, ta cần thiết kế mợt bợ điều khiển thích nghi giúp cho chất lượng bám robot cải thiện Mục tiêu nghiên cứu Nghiên cứu phương trình đợng học, đợng lực học robot omni bánh Nghiên cứu khả học mạng neural, cụ thể dùng mạng sở xuyên tâm RBF 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 kế áp dụng vào mơ hình robot omni bánh, sử dụng phần mềm Matlab/simulink Chạy thực nghiệm để kiểm chứng giải thuật phịng thí nghiệm Giao diện Guide Matlab: giám sát, điều khiển robot thông qua camera Cách tiếp cận phương pháp nghiên cứu Điều khiển Omni robot dùng thuật toán PID nhiều người sử dụng, mang lại hiểu nhất định, nhiên cịn có nhiều hạn chế việc điều khiển mợt hệ phi tuyến, đưa cách giải dùng mạng neural để ước lượng yếu tố bất định hệ phi tuyến Nghiên cứu báo, tạp chí cơng bố Xây dựng mơ hình đợng lực học robot Chứng minh tính ổn định bợ điều khiển dựa định lý Lyaponov, sau mơ Matlab Simulink để xem hoạt động bộ điều khiển thiết kế Kiểm tra chất lượng bộ điều khiển thông qua mơ hình thực tế Ý nghĩa thực tiễn đề tài Nâng cao chất lượng bộ điều khiển, giúp cho robot hoạt đợng linh hoạt xác Ứng dụng nhiều lĩnh việc điều khiển máy móc thiết bị, làm tăng śt hoạt đợng, giảm sức lao động người '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 Q TRÌNH CƠNG TÁC CHUN 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 ... 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... thực nghi? ??m để kiểm chứng hoạt đợng thực tế Trong [12] bợ điều khiển thích nghi PI mờ áp dụng cho Omni robot, mô thực để kiểm tra hiệu bộ điều khiển Kết mô chứng tỏ bộ điều khiển thích nghi