Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 108 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
108
Dung lượng
3,26 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐẠO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP.HỒ CHÍ MINH VIỆN KỸ THUẬT HUTECH ĐỒ ÁN TỐT NGHIỆP ĐỀ TÀI: NGHIÊN CỨU VÀ THIẾT KẾ ROBOT TRONG CÔNG NGHIỆP Ngành: Kỹ thuật điều khiển tự động hố Giảng viên hướng dẫn: TS Ngơ Hà Quang Thịnh Sinh viên thực Mã số sinh viên Lớp Nguyễn Như Hiếu Mỹ 1711050189 17DTDA2 Trần Văn Phong 1711050199 17DTDA2 Phạm Quang Dũng 1711050239 17DTDA2 TP Hồ Chí Minh, tháng năm 2021 BỘ GIÁO DỤC VÀ ĐẠO TẠO TRƯỜNG ĐẠI HỌC CƠNG NGHỆ TP.HỒ CHÍ MINH VIỆN KỸ THUẬT HUTECH ĐỒ ÁN TỐT NGHIỆP ĐỀ TÀI: NGHIÊN CỨU VÀ THIẾT KẾ ROBOT TRONG CÔNG NGHIỆP Ngành: Kỹ thuật điều khiển tự động hoá Giảng viên hướng dẫn: TS Ngô Hà Quang Thịnh Sinh viên thực Mã số sinh viên Lớp Nguyễn Như Hiếu Mỹ 1711050189 17DTDA2 Trần Văn Phong 1711050199 17DTDA2 Phạm Quang Dũng 1711050239 17DTDA2 TP Hồ Chí Minh, tháng năm 2021 Mã đề: 201 Mã đề tài: 201 VIỆN KỸ THUẬT HUTECH PHIẾU ĐĂNG KÝ ĐỀ TÀI ĐỒ ÁN/KHÓA LUẬN TỐT NGHIỆP Hệ: Chính Quy Họ tên sinh viên/ nhóm sinh viên đăng ký đề tài (sĩ số nhóm ): (1) Nguyễn Như Hiếu Mỹ Điện thoại: 0868984351 (2) Trần Văn Phong Điện thoại: 0899615210 (3) Phạm Quang Dũng Điện thoại: 0965248179 MSSV: 1711050189 Lớp: 17DTDA2 Email: nguyenmyhieunhu@gmail.com MSSV: 1711050199 Lớp: 17DTDA2 Email: tranvanphonghutech17dtda2@gmail.com MSSV: 1711050239 Lớp: 17DTDA2 Email: quangdung7199@gmail.com Ngành: Kỹ Thuật Điều Khiển Tự Động Hóa Tên đề tài đăng ký: Nghiên cứu thiết kế Robot công nghiệp Sinh viên hiểu rõ yêu cầu đề tài cam kết thực đề tài theo tiến độ hoàn thành thời hạn TP.HCM, ngày… tháng… 2021 Giáo viên hướng dẫn Sinh viên thực Mã đề: 201 Viện Kỹ thuật Hutech PHIẾU GIAO NHIỆM VỤ THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Sinh viên thực đề tài Họ tên : Trần Văn Phong Điện thoại: 0899615210 MSSV : 1711050199 Lớp :17DTDA2 Email : tranvanphonghutech17dtda2@gmail.com Ngành: kỹ thuật điều khiển tự động hóa Tên đề tài: Nghiên cứu thiết kế Robot công nghiệp Nhiệm vụ thực đề tài: Tổng quan nhiệm vụ đề tài Tình hình nghiên cứu nước Tính tốn sở lý thuyết Thiết kế mơ hình 3D TP HCM, ngày … tháng … năm 2021 Sinh viên thực Giảng viên hướng dẫn (Ký ghi rõ họ tên) (Ký ghi rõ họ tên) Mã đề: 201 Viện Kỹ thuật Hutech PHIẾU GIAO NHIỆM VỤ THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Sinh viên thực đề tài Họ tên : Nguyễn Như Hiếu Mỹ MSSV : 1711050189 Điện thoại: 0868984351 Lớp :17DTDA2 Email : nguyenmyhieunhu@gmail.com Ngành: kỹ thuật điều khiển tự động hóa Tên đề tài: Nghiên cứu thiết kế Robot công nghiệp Nhiệm vụ thực đề tài: Tính cấp thiết đề tài Tình hình ngun cứu ngồi nước Tính tốn lựa chọn thiết bị điện Thực nghiệm mạch điện TP HCM, ngày … tháng … năm 2021 Sinh viên thực Giảng viên hướng dẫn (Ký ghi rõ họ tên) (Ký ghi rõ họ tên) Mã đề: 201 Viện Kỹ thuật Hutech PHIẾU GIAO NHIỆM VỤ THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Sinh viên thực đề tài: Họ tên : Phạm Quang Dũng Điện thoại: 0965248179 MSSV : 1711050243 Lớp :17DTDA2 Email: quangdung7199@gmail.com Ngành: kỹ thuật điều khiển tự động hóa Tên đề tài: Nghiên cứu thiết kế Robot công nghiệp Nhiệm vụ thực đề tài: Đặt vấn đề Khảo sát thuật toán điều khiển Phát triển thuật tốn giao tiếp Lập trình điều khiển TP HCM, ngày … tháng … năm 2021 Sinh viên thực Giảng viên hướng dẫn (Ký ghi rõ họ tên) `(Ký ghi rõ họ tên) Mã đề: 201 TRƯỜNG ĐẠI HỌC CƠNG NGHỆ TP.HCM CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC VIỆN KỸ THUẬT HUTECH o0o TP.HCM, ngày ….tháng… năm 2021 LỜI CAM ĐOAN Chúng em sinh viên trường Đại Học Công Nghệ TP Hồ Chí Minh, chuyên ngành Kỹ thuật điều khiển tự động hóa, xin cam đoan: Đây đồ án chúng em trực tiếp thực công khai hướng dẫn khoa học thầy Ngô Hà Quang Thịnh Các số liệu tính tốn, kết nghiên cứu nêu đồ án trung thực, xác, có tính kế thừa trích dẫn đầy đủ Tp Hồ Chí Minh, ngày … tháng …năm 2021 Sinh viên thực i Mã đề: 201 LỜI CẢM ƠN Trong suốt thời gian học tập trường Đại học Công Nghệ TPHCM Ban giám hiệu nhà trường, Viện Kỹ Thuật tạo điều kiện cho em học tập, thực hành toàn thể Thầy đặc biệt thầy Ngơ Hà Quang Thịnh tận tình giảng dạy truyền đạt khối kiến thức kinh nghiệm quý báu cho chúng em để làm hành trang vững đầy tự tin bước vào đời Để bày tỏ lòng biết ơn sâu sắc em xin chân thành cảm ơn tất Q Thầy Cơ Để hồn thành đồ án tốt nghiệp mình, em trải qua khơng khó khăn, nhiên động lực để giúp em hồn thành tốt đồ án Em xin gửi lời cảm ơn chân thành đến thầy Ngô Hà Quang Thịnh Thầy người hướng dẫn trực tiếp em hồn thành đồ án Thầy khơng giảng viên truyền đạt kiến thức, kinh nghiệm cho em, Thầy ln tận tình, chu đáo, nhắc nhở trình thực đồ án em Một lần em xin chân thành gửi lời cảm ơn sâu sắc đến Thầy Em xin cảm ơn thành viên gia đình ln ln động viên giúp em có điều kiện tốt vật chất tinh thần để em hoàn thành q trình học tập trường Đại học Cơng Nghệ TpHCM Bên cạnh gia đình, em cảm ơn người bạn làm chung đồ án giúp đỡ lúc gặp khó khăn, đưa lời khun bổ ích để em hồn thành đồ án Cuối cùng, em xin chúc Thầy, Cô sức khỏe, hạnh phúc thành công nghiệp “trồng người” ii Mã đề: 201 Mục lục LỜI CAM ĐOAN i LỜI CẢM ƠN ii Mục lục iii Danh mục từ viết tắt vi Danh mục hình ảnh vii Danh mục bảng x LỜI MỞ ĐẦU CHƯƠNG GIỚI THIỆU CHUNG VỀ ROBOT CÔNG NGHIỆP 1.1 Lịch sử q trình phát triển robot cơng nghiệp 1.2 Robot cịn có cách định nghĩa khác sau: 1.3 IR – Industrial Robot: 1.4 Phân loại theo hệ .9 1.5 Ứng dụng robot công nghiệp 11 1.5.1 Trên giới 11 1.5.2 Tại việt nam: 12 1.6 Phân loại robot 14 1.6.1 Robot toạ độ vng góc (cartesian robot): 14 1.6.2 Robot toạ tộ trụ: 14 1.6.3 Robot toạ độ cầu (Spherical robot): .15 1.6.4 Robot khớp lề (Articular robot): 15 1.7 Phân loại robto theo nguồn dẫn động 16 1.7.1 Robot dùng nguồn cấp điện 16 iii Mã đề: 201 1.7.2 Robot dùng nguồn khí nén 17 1.7.3 Robot dùng nguồn thuỷ lực 17 1.8 Mơ hình hố hệ trục toạ độ 18 1.8.1 Hệ toạ độ quỹ đạo 18 1.8.1.1 Hệ toạ độ (The base Coordinate system): 18 1.8.1.3 Hệ toạ độ công cụ (The tool coordinate system): 21 1.8.1.4 Hệ toạ độ World (The world coordinate system): 22 1.8.1.5 Hệ toạ độ người dùng ( The user coordinate system): 23 1.8.1.6 Hệ tọa độ chuyển vị (The displacement coordinate system): 24 1.8.2 Quỹ đạo 24 CHƯƠNG PHÂN TÍCH VÀ LỰA CHỌN PHƯƠNG ÁN .27 2.1 Yêu cầu việc gắp xếp sản phẩm: .27 2.2 Lựa chọn cấu tay máy: 27 2.2.1 Cơ cấu tay máy 27 2.2.2 Cơ cấu tay máy 28 2.2.3 Cơ cấu tay máy 3: 30 2.3 Lựa chọn cấu tác động 31 2.4 Lựa chọn phận công tác: 32 CHƯƠNG TÍNH TỐN ĐỘNG HỌC ROBOT .36 3.1 Động học robot 36 3.1.1 Động học thuận 36 3.1.2 Động học ngược 38 3.2 Thiết kế quỹ đạo robot 39 CHƯƠNG MƠ HÌNH HỐ ROBOT CƠNG NGHIỆP 42 iv Mã đề: 201 T3 = [ cosd(theta3) -sind(theta3) a3*cosd(theta3); sind(theta3) cosd(theta3) 0 0 0 a3*sind(theta3); 0; 1]; T4 = [ cosd(theta4) -sind(theta4) a4*cosd(theta4); sind(theta4) cosd(theta4) 0 0; 0 0 a4*sind(theta4); 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]); end P a g e 71 | 108 Mã đề: 201 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 72 | 108 Mã đề: 201 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) -sind(theta1) 0; sind(theta1) -cosd(theta1) -1 0 0; 486; 1]; T2 = [ cosd(theta2) -sind(theta2) a2*cosd(theta2); sind(theta2) cosd(theta2) a2*sind(theta2); 0 0; 0 1]; T3 = [ cosd(theta3) -sind(theta3) a3*cosd(theta3); sind(theta3) cosd(theta3) 0 0 0 a3*sind(theta3); 0; 1]; P a g e 73 | 108 Mã đề: 201 T4 = [ cosd(theta4) -sind(theta4) a4*cosd(theta4); sind(theta4) cosd(theta4) 0 0; 0 0 a4*sind(theta4); 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]); 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 74 | 108 Mã đề: 201 % - 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 75 | 108 Mã đề: 201 set_param([ModelName '/Slider Gain3'],'Gain',num2str(theta3)); set_param([ModelName '/Slider Gain4'],'Gain',num2str(theta4)); T1 = [ cosd(theta1) -sind(theta1) 0; sind(theta1) -cosd(theta1) -1 0 0; 486; 1]; T2 = [ cosd(theta2) -sind(theta2) a2*cosd(theta2); sind(theta2) cosd(theta2) a2*sind(theta2); 0 0; 0 1]; T3 = [ cosd(theta3) -sind(theta3) a3*cosd(theta3); sind(theta3) cosd(theta3) 0 0 0 a3*sind(theta3); 0; 1]; T4 = [ cosd(theta4) -sind(theta4) a4*cosd(theta4); sind(theta4) cosd(theta4) 0 0; 0 0 a4*sind(theta4); 1]; T = T1*T2*T3*T4; P a g e 76 | 108 Mã đề: 201 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]); 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)); function slider5_CreateFcn(hObject, eventdata, handles) P a g e 77 | 108 Mã đề: 201 if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.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]); 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 78 | 108 Mã đề: 201 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]); 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 79 | 108 Mã đề: 201 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 80 | 108 Mã đề: 201 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) -sind(theta1) 0; sind(theta1) cosd(theta1) -1 0 0; 486; 1]; T2 = [ cosd(theta2) -sind(theta2) a2*cosd(theta2); sind(theta2) cosd(theta2) 0 a2*sind(theta2); 0; P a g e 81 | 108 Mã đề: 201 0 1]; T3 = [ cosd(theta3) -sind(theta3) a3*cosd(theta3); sind(theta3) cosd(theta3) 0 0 0 a3*sind(theta3); 0; 1]; T4 = [ cosd(theta4) -sind(theta4) a4*cosd(theta4); sind(theta4) cosd(theta4) 0 0; 0 0 a4*sind(theta4); 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 82 | 108 Mã đề: 201 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 83 | 108 Mã đề: 201 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)); set(handles.edit3,'string',num2str(t4_inv)); P a g e 84 | 108 Mã đề: 201 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 P a g e 85 | 108