1. Trang chủ
  2. » Luận Văn - Báo Cáo

Điều khiển mờ thích nghi hệ con lắc ngược quay

80 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 527,55 KB

Nội dung

Đại Học Quốc Gia Tp Hồ Chí Minh TRƯỜNG ĐẠI HỌC BÁCH KHOA NGUYỄN THANH PHÚC ĐIỀU KHIỂN MỜ THÍCH NGHI HỆ CON LẮC NGƯC QUAY Chuyên ngành : Điều Khiển Học Kỹ Thuật Mã số ngành : 2.05.01 LUẬN VĂN THẠC SĨ TP.HỒ CHÍ MINH, tháng 12 năm 2007 CÔNG TRÌNH ĐƯC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH Cán hướng dẫn khoa học: TS Hoàng Minh Trí (Ký tên) Cán chấm nhận xét 1: (Ký tên) Cán chấm nhận xét 2: (Ký tên) Luận văn thạc só bảo vệ tại: HỘI ĐỒNG CHẤM BẢO VỆ LUẬN VĂN THẠC SĨ TRƯỜNG ĐẠI HỌC BÁCH KHOA Ngày tháng năm 2007 TRƯỜNG ĐẠI HỌC BÁCH KHOA PHÒNG ĐÀO TẠO SĐH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC TP HCM, ngày 16 tháng 07 năm 2007 NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên : Nguyễn Thanh Phúc Phái Sinh ngày : 15/04/1981 Nơi sinh : Long An Chuyên ngành : Điều Khiển Học Kỹ Thuật MSHV : Nam : 01504374 I- TÊN ĐỀ TÀI: Điều khiển mờ thích nghi hệ lắc ngược quay II- NHIỆM VỤ VÀ NỘI DUNG: Điều khiển cân hệ lắc ngược quay ví trí cân ngược, dùng giải thuật điều khiển mờ thích nghi III- NGÀY GIAO NHIỆM VỤ : 16 /07 /2007 IV- NGÀY HOÀN THÀNH NHIỆM VỤ : 16 / 12/2007 V- HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN : CÁN BỘ HƯỚNG DẪN TS Hoàng Minh Trí CHỦ NHIỆM NGÀNH BỘ MÔN QUẢN LÝ CHUYÊN NGÀNH TS Hoàng Minh Trí - - (Ký tên) (Ký tên) (Ký tên) Nội dung luận văn thạc só Hội Đồng Chuyên Ngành thông qua Ngày PHÒNG ĐÀO TẠO SĐH tháng năm 2004 KHOA QUẢN LÝ NGÀNH Lời cảm ơn Trước hết, xin bày tỏ lòng biết ơn chân thành đến cha mẹ người thân gia đình tạo điều kiện nguồn động viên cho thời gian qua Đồng thời xin gởi lời cảm ơn đến thầy Hoàng Minh Trí hướng dẫn trình hoàn tất luận văn Sau xin gởi lời cảm ơn đến thầy cô khoa Điện-Điện Tử, thầy cô môn Điều Khiển Tự Động , bạn giúp đỡ thời gian qua Xin chân thành cảm ơn! Tp Hồ Chí Minh, ngày 19/12/07 Nguyễn Thanh Phúc Mục lục Trang Tóm tắt luận văn Chương 1:Toång quan 1.1 Đặt vấn đề 1.2 Nhiệm vụ luận văn: Chương 2:Cơ sở lý thuyết 2.1 Logic mờ 2.1.1 Mệnh đề mờ: 2.1.2 Các phép toán mệnh đề mờ: 2.1.3 Mệnh đề hợp thành: 2.1.4 Điều khiển mờ 2.1.5 Hệ mờ Tankagi-Sugeno-Kang: 11 2.2 Điều khiển mờ thích nghi: 12 2.2.1 Điều khiển hồi tiếp tuyến tính hóa 12 2.2.2 Điều khiển thích nghi gián tiếp 18 Chương 3:Thiết kế điều khiển 23 3.1 Giới thiệu hệ lắc ngược quay: 23 3.2 Thiết kế điều khiển swing-up: 27 3.3 Thiết kế điều khiển mờ thích nghi: 27 3.3.1 Thiết kế không vận dụng hiểu biết hệ thống: 28 3.3.2 Kết hợp hiểu biết đặc tính động hệ thống thiết kế 33 i 3.4 Kết luận: 35 Chương 4:Kết mô 36 4.1 Bộ điều khiển LQR 36 4.2 Bộ điều khiển mờ thích nghi gián tiếp 42 4.2.1 Sơ đồ điều khiển mờ thích nghi gián tiếp 43 4.2.2 BĐK không vận dụng hiểu biết đối tượng: 44 4.2.3 BĐK vận dụng hiểu biết đối tượng: 50 Chương 5:Kết luận hướng phát triển 57 5.1 Kết luận: 57 5.2 Hướng phát triển đề tài: 58 Phụ lục chương trình 59 Tài liệu tham khảo 71 ii Bảng liệt kê hình vẽ viết Hình 2.2: Bộ điều khiển mờ Hình 2.2: Bộ điều khiển mờ 10 Hình 2.3 Ngõ điều khiển dùng hệ mờ TSK 12 Hình 2.4 : Sơ đồ khối hệ mờ 15 Hình 3.1: Mô hình hệ lắc ngược quay 24 Hình 3.2 Mô tả hệ lắc không gian 24 Hình 3.3 Mô hình Simulink hệ laéc 26 Hình 3.4: Hàm liên thuộc ngõ vào x3 32 Hình 4.1: BĐK LQR điều khiển hệ lắc 37 Hình 4.2:Đáp ứng BĐK LQR trường hợp 38 Hình 4.3:Đáp ứng BĐK LQR trường hợp 39 Hình 4.4:Đáp ứng BĐK LQR trường hợp 40 Hình 4.5:Đáp ứng BĐK LQR trường hợp 41 Hình 4.6: Đáp ứng BĐK LQR trường hợp 42 Hình 4.7: Bộ điều khiển mờ thích nghi gián tiếp cân hệ lắc ngược quay.43 Hình 4.8: Thành phần điều khiển thích nghi 44 Hình 4.9: Thành phần điều khiển chế độ trượt 44 Hình 4.10: Thành phần điều khiển giám sát 44 Hình 4.11: Đáp ứng BĐK mờ thích nghi trường hợp 45 Hình 4.12: Đáp ứng BĐK mờ thích nghi trường hợp 46 iii Hình 4.13: Đáp ứng BĐK mờ thích nghi trường hợp 47 Hình 4.14: Đáp ứng BĐK mờ thích nghi trường hợp 48 Hình 4.15: Đáp ứng BĐK mờ thích nghi trường hợp 49 Hình 4.16: Đáp ứng BĐK mờ thích nghi trường hợp 50 Hình 4.17: BĐK mờ thích nghi vận dụng hiểu biết đối tượng 51 Hình 4.18: Đáp ứng BĐK mờ thích nghi có hiểu biết 52 đối tượng trường hợp 52 Hình 4.19: Đáp ứng BĐK mờ thích nghi có hiểu biết 53 đối tượng trường hợp 53 Hình 4.20: Đáp ứng BĐK mờ thích nghi có hiểu biết 54 đối tượng trường hợp 54 Hình 4.21 : Đáp ứng BĐK mờ thích nghi có hiểu biết 55 đối tượng trường hợp 55 Hình 4.22: Đáp ứng BĐK mờ thích nghi có hiểu biết 56 đối tượng trường hợp 56 iv TÓM TẮT LUẬN VĂN Tóm tắt luận văn Sự tiến lý thuyết điều khiển phi tuyến áp dụng thành công việc thiết kế điều khiển có chất lượng độ tin cậy cao Dựa tảng đó, tác giả viết đề cập đến việc thiết kế điều khiển mờ thích nghi gián tiếp để cân hệ lắc ngược quay vị trí cân không ổn định, phương pháp áp dụng thành công nhiều lónh vực điều khiển khác Bộ điều khiển mờ thích nghi thiết kế dựa việc xấp xỉ đặc tính phi tuyến hệ thống hệ mờ Takagi-Sugeno-Kang dùng hồi tiếp tuyến tính hoá đặc tuyến vào Luận văn cho thấy ưu điều khiển thích nghi thay đổi nhiễu tác động vào hệ thống CHƯƠNG 1: TỔNG QUAN Chương 1: Tổng quan 1.1 Đặt vấn đề Ngày nay, lý thuyết điều khiển tuyến tính phát triển hoàn chỉnh áp dụng thành công trình công nghiệp thiết bị dân dụng Các lý thuyết trở nên không hiệu hệ thống phi tuyến mà khó xác định xác mô hình toán học, hệ thống có mô hình toán học thay đổi chịu tác động nhiễu Bên cạnh đó, lý thuyết điều khiển phi tuyến có bước phát triển đáng kể, làm tảng toán học cần thiết nhằm thiết lập điều kiện ổn định cho việc thiết kế điều khiển đạt chất lượng Ngày nay, lý thuyết áp dụng thành công để điều khiển hệ phi tuyến chia thành nhóm chính: lý thuyết điều khiển kinh điển lý thuyết điều khiển đại Nhóm phương pháp điều khiển kinh điển dựa vào việc tuyến tính hóa đặc tuyến hệ thống xung quanh điểm làm việc, áp dụng phương pháp điều khiển cho hệ tuyến tính Nhóm phương pháp điều khiển đại bao gồm điều khiển mờ, điều khiển dùng giải thuật di truyền, dùng mạng thần kinh nhân tạo, …v.v Lý thuyết điều khiển kinh điển bộc lộ yếu điểm chất lượng độ tin cậy đối tượng điều khiển hệ phi tuyến, đối tượng không rõ khó xác định cách xác mô hình toán học, chịu tác động nhiễu LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 58 • Bài viết thành công việc vận dụng tool box V-Realm Builder MATLAB để mô hình hệ thống thực cách sinh động 5.2 Hướng phát triển đề tài: • Cần phân tích ảnh hưởng loại nhiễu khác tác động vào hệ thống, cải thiện chất lượng tính thích nghi BĐK cách sử dụng dạng hàm khác biến ngõ vào • Dựa vào kết đạt thông qua mô phỏng, cần phát triển việc thiết kế BĐK thực sử dụng toolbox XPC-Target MATLAB để điều khiển mô hình thực Từ rút kết luận khác biệt mô thực tế LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC 59 PHỤ LỤC Phụ lục chương trình Tính toán điều khiển LQR: A=[ 0 -33.04 0 0001 49.30 73.41 -2.29 ]; B=[ 74.89 -111.74 ]; Q= diag([1 0]); R= 1; [K S e] = lqr(A,B,Q,R) Giải thuật điều khiển swing-up: function [sys,x0,str,ts] = swingup(t,x,u,flag,A,K) % % The following outlines the general structure of an S-function % switch flag, %%%%%%%%%%%%%%%%%% % Initialization % %%%%%%%%%%%%%%%%%% LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC PHỤ LỤC 60 case 0, [sys,x0,str,ts]=mdlInitializeSizes; %%%%%%%%%%%%%%% % Derivatives % %%%%%%%%%%%%%%% case 1, sys=mdlDerivatives(t,x,u); %%%%%%%%%% % Update % %%%%%%%%%% case 2, sys=mdlUpdate(t,x,u); %%%%%%%%%%% % Outputs % %%%%%%%%%%% case 3, sys=mdlOutputs(t,x,u,A,K); %%%%%%%%%%%%%%%%%%%%%%% % GetTimeOfNextVarHit % %%%%%%%%%%%%%%%%%%%%%%% case 4, sys=mdlGetTimeOfNextVarHit(t,x,u); %%%%%%%%%%%%% % Terminate % %%%%%%%%%%%%% case 9, sys=mdlTerminate(t,x,u); %%%%%%%%%%%%%%%%%%%% % Unexpected flags % %%%%%%%%%%%%%%%%%%%% otherwise error(['Unhandled flag = ',num2str(flag)]); LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC 61 PHỤ LỤC end % end sfuntmpl % %========================================================= % mdlInitializeSizes % Return the sizes, initial conditions, and sample times for the S-function %========================================================= % function [sys,x0,str,ts]=mdlInitializeSizes % % call simsizes for a sizes structure, fill it in and convert it to a % sizes array % % Note that in this example, the values are hard coded This is not a % recommended practice as the characteristics of the block are typically % defined by the S-function parameters % sizes = simsizes; sizes.NumContStates = 0; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 4; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; % at least one sample time is needed sys = simsizes(sizes); % % initialize the initial conditions % x0 = []; % LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC PHỤ LỤC 62 % str is always an empty matrix % str = []; % % initialize the array of sample times % ts = [0 0]; % end mdlInitializeSizes % %========================================================= % mdlDerivatives % Return the derivatives for the continuous states %========================================================= % function sys=mdlDerivatives(t,x,u) sys = []; % end mdlDerivatives % %========================================================= % mdlUpdate % Handle discrete state updates, sample time hits, and major time step % requirements %========================================================= % function sys=mdlUpdate(t,x,u) sys = []; % end mdlUpdate % %========================================================= LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC 63 PHỤ LỤC % mdlOutputs % Return the block outputs %========================================================= % function sys=mdlOutputs(t,x,u,A,K) if (u(3)>=pi) sys = K*(A-u(1)); else sys = K*(-A-u(1)); end % end mdlOutputs % %========================================================= % mdlGetTimeOfNextVarHit % Return the time of the next hit for this block Note that the result is % absolute time Note that this function is only used when you specify a % variable discrete-time sample time [-2 0] in the sample time array in % mdlInitializeSizes %========================================================= % function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 1; % Example, set the next hit to be one second later sys = t + sampleTime; % end mdlGetTimeOfNextVarHit % %========================================================= % mdlTerminate % Perform any end of simulation tasks %========================================================= % function sys=mdlTerminate(t,x,u) sys = []; LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC 64 PHỤ LỤC % end mdlTerminate Khối mờ hóa giá trị ngõ vào dùng hàm liên thuộc dạng tam giaùc: function [sys,x0,str,ts] = triangle_full(t,x,u,flag,D,N) lobal CENTER_OF_ANGLE WIDTH switch flag, %%%%%%%%%%%%%%%%%% % Initialization % %%%%%%%%%%%%%%%%%% case 0, sizes = simsizes; sizes.NumContStates = 0; sizes.NumDiscStates = 0; sizes.NumOutputs = N; sizes.NumInputs = 1; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; % at least one sample time is needed sys = simsizes(sizes); WIDTH = (D(2) - D(1))/(N-1); CENTER_OF_ANGLE = [D(1):WIDTH:D(2)]; % initialize the initial conditions x0 = []; % % str is always an empty matrix % str = []; % % initialize the array of sample times % ts = [-1 0]; % end mdlInitializeSizes %%%%%%%%%%%%%%% % Derivatives % %%%%%%%%%%%%%%% case 1, LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC 65 PHỤ LUÏC sys=mdlDerivatives(t,x,u); %%%%%%%%%% % Update % %%%%%%%%%% case 2, sys=mdlUpdate(t,x,u); %%%%%%%%%%% % Outputs % %%%%%%%%%%% case 3, sys = zeros(1,N); for i = 1:(N-1) if((u(1) >= CENTER_OF_ANGLE(i)) & (u(1)< CENTER_OF_ANGLE(i+1))) sys(i) = (CENTER_OF_ANGLE(i+1)-u(1))/WIDTH; sys(i+1) = 1-sys(i); break; end end if(u(1) =D(2)) sys(N) = 1; end %%%%%%%%%%%%%%%%%%%%%%% % GetTimeOfNextVarHit % %%%%%%%%%%%%%%%%%%%%%%% % case 4, % sys=mdlGetTimeOfNextVarHit(t,x,u); %%%%%%%%%%%%% % Terminate % %%%%%%%%%%%%% case 9, sys=mdlTerminate(t,x,u); LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC PHỤ LỤC 66 %%%%%%%%%%%%%%%%%%%% % Unexpected flags % %%%%%%%%%%%%%%%%%%%% otherwise error(['Unhandled flag = ',num2str(flag)]); end % end sfuntmpl % %========================================================= % mdlInitializeSizes % Return the sizes, initial conditions, and sample times for the S-function %========================================================= % function [sys,x0,str,ts]=mdlInitializeSizes(D,N) % % call simsizes for a sizes structure, fill it in and convert it to a % sizes array % % Note that in this example, the values are hard coded This is not a % recommended practice as the characteristics of the block are typically % defined by the S-function parameters % sizes = simsizes; sizes.NumContStates = 0; sizes.NumDiscStates = 0; sizes.NumOutputs = N; sizes.NumInputs = 1; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; % at least one sample time is needed sys = simsizes(sizes); WIDTH = (D(2) - D(1))/(N-1); CENTER_OF_ANGLE = [D(1):WIDTH:D(2)]; % % initialize the initial conditions LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC PHỤ LỤC 67 % x0 = []; % % str is always an empty matrix % str = []; % % initialize the array of sample times % ts = [0 0]; % end mdlInitializeSizes % %========================================================= % mdlDerivatives % Return the derivatives for the continuous states %========================================================= % function sys=mdlDerivatives(t,x,u) sys = []; % end mdlDerivatives % %========================================================= % mdlUpdate % Handle discrete state updates, sample time hits, and major time step % requirements %========================================================= % function sys=mdlUpdate(t,x,u) sys = []; LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC 68 PHỤ LỤC % end mdlUpdate % %========================================================= % mdlOutputs % Return the block outputs %========================================================= % function sys=mdlOutputs(t,x,u,D,N) sys = zeros(1,N); for i = 1:(N-1) if((x >= CENTER_OF_ANGLE(i)) && (x< CENTER_OF_ANGLE(i+1))) sys(i) = (CENTER_OF_ANGLE(i)-x)/WIDTH; sys(i+1) = 1-sys(i); break; end end sys % end mdlOutputs % %========================================================= % mdlGetTimeOfNextVarHit % Return the time of the next hit for this block Note that the result is % absolute time Note that this function is only used when you specify a % variable discrete-time sample time [-2 0] in the sample time array in % mdlInitializeSizes %========================================================= % function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 1; % Example, set the next hit to be one second later sys = t + sampleTime; % end mdlGetTimeOfNextVarHit LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC 69 PHỤ LỤC % %========================================================= % mdlTerminate % Perform any end of simulation tasks %========================================================= % function sys=mdlTerminate(t,x,u) sys = []; % end mdlTerminate Hàm s-funtion tính toán chế độ điều khiển %========================================================== = % mdlOutputs % Return the block outputs %========================================================== = % function sys=mdlOutputs(t,x,u,theta_threshold,theta_dot_threshold) if (abs(u(3)) < theta_threshold ) & (abs(u(4)) < theta_dot_threshold ) sys = -1; % Fuzzy Adaptive Control else sys = 1; % Swing up control end % end mdlOutputs Haøm vẽ kết mô phỏng: function r = plot_result(file_name) r = load(file_name); u = r.out_data(2,:); theta0 = r.out_data(3,:); theta1 = r.out_data(4,:); N = length(u); LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC 70 PHỤ LỤC % Set title of figure h=gcf; set(gcf,'Name',file_name) % Plot control out put subplot(3,1,1); plot(u); Xlabel('Time(ms)');Ylabel('u(V)'); axis([0 N -7 7]);grid on; % Plot base angel subplot(3,1,2); plot(theta0); Xlabel('Time(ms)');Ylabel('Arm Position (rad)'); axis([0 N -5 5]);grid on; % Plot Pendulum angel position subplot(3,1,3); plot(theta1); Xlabel('Time(ms)');Ylabel('Pendulum Angle (rad)'); axis([0 N -1 7]);grid on; LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC 71 TÀI LIỆU THAM KHẢO Tài liệu tham khaûo [1] Li-Xin Wang, A Course in Fuzzy Systems anh Control, Prentice – Hall International, Tnc [2] Huỳnh Thái Hoàng, Hệ thống điều khiển thông minh, Nhà xuấ ÑH Quoác Gia TP.HCM-2006 [3] C.J.A van Kats, Nonlinear control of a Furuta Rotary inverted pendulum, DCT Report no: 2004.69,June 2004 [4] Dr V M Becerra, Stabilisation of a rotary inverted pendulum, October 2002 [5] Châu Nguyễn Ngọc Lan, Điều Khiển Trược thích nghi dùng mô hình RBF, tháng 01/2007 LUẬN VĂN THẠC SĨ HV: NGUYỄN THANH PHÚC TÓM TẮT LÝ LỊCH TRÍCH NGANG Họ tên : NGUYỄN THANH PHÚC Phái : Nam Ngày sinh : 15-04-1981 Nơi sinh : Long An Địa liên lạc : 265, ấp Vónh Hoà, xã An Vónh Ngãi, thị xã Tân An, Long An ĐT: 0989 725 836 Email: phucthanh0481@gmail.com Khoá(năm trúng tuyển) : K15 (2004-2006) QUÁ TRÌNH ĐÀO TẠO Từ 1999 - 2004: sinh viên trường Đại học Bách khoa Tp HCM, chuyên ngành Điều khiển tự động Tháng 04-2004 tốt nghiệp Kỹ sư Từ 2004 - 2006: học viên cao học trường Đại học Bách khoa Tp HCM, chuyên ngành Điều Khiển Học Kỹ Thuật QUÁ TRÌNH CÔNG TÁC Từ 2004 -> 2005: làm việc công ty cổ phần Vitek Từ 2005 đến nay: làm việc công ty cổ phần truyền thông Sơn Ca – 15 Mai Thị Lựu, Q1, TP.HCM ... ngành : Điều Khiển Học Kỹ Thuật MSHV : Nam : 01504374 I- TÊN ĐỀ TÀI: Điều khiển mờ thích nghi hệ lắc ngược quay II- NHIỆM VỤ VÀ NỘI DUNG: Điều khiển cân hệ lắc ngược quay ví trí cân ngược, dùng... Bộ điều khiển mờ baûn Hình 2.2: Bộ điều khiển mờ 10 Hình 2.3 Ngõ điều khiển dùng hệ mờ TSK 12 Hình 2.4 : Sơ đồ khối hệ mờ 15 Hình 3.1: Mô hình hệ lắc ngược quay. .. hợp 42 Hình 4.7: Bộ điều khiển mờ thích nghi gián tiếp cân hệ lắc ngược quay. 43 Hình 4.8: Thành phần điều khiển thích nghi 44 Hình 4.9: Thành phần điều khiển chế độ trượt

Ngày đăng: 11/02/2021, 23:17

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w