Nghiên cứu thư viện đồ họa OpenGL và ứng dụng trong mô phỏng động học của robot

71 2K 0
Nghiên cứu thư viện đồ họa OpenGL và ứng dụng trong mô phỏng động học của robot

Đ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

LỜI CẢM ƠN Trong suốt trình thực đồ án tốt nghiệp: “Nghiên cứu thư viện đồ họa OpenGL ứng dụng mô động học Robot”, cố gắng thân, trình làm đồ án em nhận giúp đỡ tận tình từ phía nhà trường, thầy cô gia đình bạn bè Em xin gửi lời cảm ơn sâu sắc đến ThS.Nguyễn Văn Huân bận nhiều công việc dành thời gian hướng dẫn giúp đỡ em tận tình trình làm đồ án tốt nghiệp Em xin chân thành cảm ơn thầy, cô trường Đại học Công nghệ thông tin Truyền thông truyền đạt kiến thức quý báu cho em suốt trình học tập Em xin cảm ơn tới gia đình bạn bè quan tâm, động viên, giúp đỡ tạo điều kiện cho em để em có điều kiện tốt để hoàn thành đồ án Trong trình thực đồ án, em có nhiều cố gắng hạn chế thời gian kinh nghiệm nên đồ án chắn mắc phải thiếu sót, mong góp ý kiến thầy cô bạn để ứng dụng mà đồ án đề cập hoàn thiện Em xin chân thành cảm ơn! Thái nguyên, ngày 16 tháng 06 năm 2012 Sinh viên thực Cao Thị Lâm LỜI CAM ĐOAN Để hoàn thành đồ án tốt nghiệp thời gian quy định đáp ứng yêu cầu đề tài, thân em cố gắng tìm hiểu nghiên cứu, học tập làm việc thời gian dài Em tham khảo số tài liệu nêu phần “Tài liệu tham khảo” mã nguồn mở cho phép sử dụng diễn đàn mạng uy tín Internet Nội dung đồ án hoàn toàn không chép từ đồ án khác, không vi phạm quyền tác giả Toàn đồ án thân em nghiên cứu xây dựng nên Em xin cam đoan lời đúng, có thông tin sai lệch em xin hoàn toàn chịu trách nhiệm trước hội đồng Thái nguyên, ngày 16 tháng 06 năm 2012 Sinh viên thực Cao Thị Lâm MỤC LỤC DANH MỤC BẢNG DANH MỤC HÌNH VẼ LỜI NÓI ĐẦU Robot công nghiệp lĩnh vực nghiên cứu phát triển mạnh giới Ở nước ta, lĩnh vực mẻ, ngày môi trường sản xuất đại, hầu hết quy trình thực máy chuyên dùng Với phương pháp này, làm giảm rõ rệt chi phí sản xuất sản phẩm công nghiệp phù hợp với đa số người tiêu dùng Tuy nhiên máy công cụ thiết kế để thực nguyên công cho trước, cần thay đổi kiểu mẫu sản phẩm toàn dây chuyền sản xuất phải cải tạo lại Kiểu tự động hoá kiểu tự động hóa cứng tốn Do mà giới có phương pháp sản xuất tiên tiến chế tạo loại robot đưa vào quy trình chế tạo để thực nhiều nguyên công như: chuyển tải vật tư thiết bị dây chuyền đại, hàn điểm, sơn phun lắp ráp công nghiệp ô tô… Do cấu hoạt động điều khiển máy tính vi xử lý, chúng tái lập dễ dàng cho nhiều nguyên công khác nhau, không cần thay máy móc thay đổi kiểu mẫu sản phẩm Đây kiểu tự động hoá linh hoạt mang lại hiệu kinh tế cao cần thiết hoàn cảnh đất nuớc ta tiến tới công nghiệp hóa đại hoá đất nuớc Robot công nghiệp ứng dụng rộng rãi dây chuyền sản xuất đại có linh hoạt cao, việc nghiên cứu chế tạo robot cần thiết Trong trình tính toán, thiết kế chế tạo robot việc mô hoạt động robot phần quan trọng Quá trình mô cho ta thấy hoạt động trình làm việc robot Với ý nghĩa đó, Đồ án tốt nghiệp em chọn đề tài “Nghiên cứu thư viện đồ họa OpenGL ứng dụng mô động học Robot” Nội dung đồ án gồm có ba chương sau:  Chương 1: Tổng quan động học thư viện đồ họa OpenGL  Chương 2: Phân tích, thiết kế toán mô hoạt động Robot  Chương 3: Chương trình mô CHƯƠNG 1: TỔNG QUAN VỀ ĐỘNG HỌC VÀ THƯ VIỆN ĐỒ HỌA OPENGL Giới thiệu chung Ngày nay, Robot công nghiệp có vai trò quan trọng ứng dụng rộng rãi trình sản xuất công nghiệp đại Để chế tạo mô hình robot đem phục vụ cho sản xuất phải trải qua nhiều giai đoạn như: tìm hiểu loại robot đặc tính hoạt động nó, tính toán cách xác khâu cấu, phương trình hoạt động thiết kế mô hình 3D cho tối ưu hiệu Một mô hình robot hoạt động trơn tru đáp ứng yêu cầu kỹ thuật đề đòi hỏi việc chế tạo tỉ mỉ chi tiết bước Trong mô hình robot bao gồm nhiều phần như: khí để chế tạo chi tiết, điện tử để điều khiển hoạt động tin học để lập trình cho cấu robot hoạt động theo quỹ đạo yêu cầu kỹ thuật đề Một phần quan trọng mà mô hình robot phải thực mô trình hoạt động Để lập trình mô hoạt động robot, sau em xin giới thiệu tổng quan động học thư viện đồ họa OpenGL 1.2 Động học Động học khảo sát chuyển động học vật thể (chất điểm) mặt hình học, không quan tâm đến nguyên nhân gây chuyển động biến đổi chuyển động chúng Khi vật thể có kích thước bé so với quỹ đạo chuyển động bỏ qua ta coi chất điểm chuyển động, gọi tắt động điểm Chuyển động xảy không gian hoàn toàn có tính tương đối phụ thuộc vào vật lấy làm mốc để theo dõi chuyển động Vật lấy làm mốc gọi hệ quy chiếu Để tính thời gian ta chọn thời điểm tuỳ ý làm thời điểm gốc (t 0), thường chọn t0 lúc bắt đầu khảo sát chuyển động Động học chia làm hai phần “Động học điểm” “Động học vật rắn” Và để mô động học Robot, em xin giới thiệu tổng quan động học vật rắn hay chuyển động vật rắn Từ ứng dụng vào tìm hiểu động học Robot 1.2.1 Chuyển động vật rắn 1.2.1.1 Chuyển động tịnh tiến vật rắn  Định nghĩa Chuyển động tịnh tiến vật rắn chuyển động mà đoạn thẳng thuộc vật song song với vị trí ban đầu Ví dụ: Thùng xe chuyển động tịnh tiến so với mặt đường đoạn đường thẳng hình 1.1: Hình 1.1: Chuyển động tịnh tiến thùng xe đoạn đường thẳng Chuyển động tịnh tiến thẳng cong, điểm thuộc vật rắn chuyển động tịnh tiến chuyển động không thẳng, không nên khái niệm điểm chuyển động tịnh tiến  Tính chất chuyển động tịnh tiến Trong chuyển động tịnh tiến, điểm thuộc vật chuyển động giống hệt Nghĩa thời điểm vận tốc gia tốc điểm thuộc vật giống hệt Quỹ đạo điểm thuộc vật tịnh tiến để trùng khít lên Như vậy, thấy: • Khảo sát số chuyển động tịnh tiến vật rắn thay khảo sát chuyển động điểm thuộc vật • Lấy tên chuyển động chất điểm thuộc vật để đặt tên cho chuyển động vật • Lấy vận tốc, gia tốc điểm thuộc vật làm vận tốc, gia tốc vật 1.2.1.2 Chuyển động vật rắn quanh trục cố định  Định nghĩa Nếu trình chuyển động vật rắn có hai điểm cố định vật rắn chuyển động quanh trục cố định qua hai điểm Trục qua hai điểm cố định gọi trục quay vật rắn  Phương trình chuyển động vật rắn quay quanh trục cố định Dựng hai mặt phẳng П chứa trục quay vật, mặt phẳng cố định П mặt phẳng động gắn với vật rắn Vị trí mặt phẳng П xác định vị trí vật Gọi góc hai mặt phẳng П, thông số xác định vị trí vật rắn quay quanh trục cố định Ta có phương trình chuyển động vật rắn: = (t) Quy ước: > vật quay ngược chiều kim đồng hồ Đơn vị tính góc [rad] Hình 1.2: Chuyển động vật rắn quanh trục cố định 1.2.1.3 Chuyển động điểm thuộc vật rắn quanh trục cố định Xét chuyển động điểm M thuộc vật rắn M cách trục quay z R=IM Khi vật rắn quay, quỹ đạoM đường tròn tâm I bán kính R=IM Hình 1.3: Chuyển động điểm thuộc vật rắn quanh trục cố định Khi ta có phương trình chuyển động điểm thuộc vật xác định sau: Do biết quỹ đạo M nên ta dùng hệ tọa độ tự nhiên để khảo sát Chọn O giao điểm quỹ đạo điểm M với mặt phẳng làm gốc tọa độ, chọn chiều quay ngựơc chiều kim đồng hồ làm chiều dương Như vị trí M xác định cung S = Ta có phương trình chuyển động M: = = R (t) 1.2.2 Động học Robot Về mặt động học, xem tay máy chuỗi động hở với khâu cố định, gọi giá, khâu động Mỗi khâu động vật rắn liên kết nối động với nhờ khớp động Bất kỳ Robot bao gồm khâu liên kết với thông qua khớp Hai chuyển động khâu thông qua khớp quay khớp tịnh tiến Để khảo sát chuyển động khâu, ta thường dùng phương pháp hệ toạ độ tham chiếu hay hệ toạ độ sở Bằng cách “gắn cứng” lên khâu động thứ k hệ trục toạ độ vuông góc (Oxyz) k - gọi hệ toạ độ tương đối gắn cứng với giá cố định hệ trục toạ độ vuông góc (Oxyz) - gọi hệ toạ độ tuyết đối, hệ toạ độ tham chiếu hay hệ toạ độ sở, ta khảo sát chuyển động khâu tay máy chuyển động điểm thuộc khâu Theo đó, toạ độ điểm M thuộc khâu bất kỳ, xác định bán kính vectơ Với thành phần (hình chiếu) hệ toạ độ sở (oxyz)0 , , gọi toạ độ tuyệt đối điểm M Toạ độ điểm M thuộc khấu thứ k xác định bán kính vectơ với thành phần tương ứng hệ toạ độ (oxyz), gắn cứng với khâu , , gọi toạ độ tương đối điểm Mếu M điểm cố định khâu toạ độ tương đối M không thay đổi khâu chuyển động Dưới dạng ma trận ta biểu diễn: = =()T = =()T Bằng cách mô tả trên, ta coi tay máy chuỗi hệ toạ độ liên tiếp có chuyển dộng tương Chuyển động tay máy thường nhằm làm thay đổi vị trí hướng khâu tác động cuối hay khâu cuối (end - effector) cách cho khâu cuối qua điểm xác định để tạo hoạt động có ích hoạch định trước Vì vậy, khảo sát chuyển động tay máy, người ta thường quan tâm đến chuyển động khâu cuối bao gồm quỹ đạo vị trí qua (hay tổng quát đường cong không gian ba chiều), vận tốc gia tốc chuyển động mà không quan tâm nhiều đến chuyển động khâu trung gian (gọi khâu thành viên) Từ khái niệm nêu trên, nội dung động học có hai toán thường đặt sau: Bài toán động học thuận toán động học ngược (sẽ trình bày tính toán chi tiết chương tiếp theo) 10 Hình 3.7: Robot vẽ đường thằng 57 KẾT LUẬN  Những kết đạt Sau thời gian thực đồ án, trình nghiên cứu tìm hiểu đạt số kết sau: • Nắm vững biết cách áp dụng sở lý thuyết để xây dựng chương trình mô chuyển động cho robot • Nắm vững quy trình giải toán tính toán, thiết kế, mô điều khiển • Hiểu biết cách sử dụng chương trình phần mềm OpenGL để lập trình mô • Xây dựng chương trình mô hoạt động Robot với chức chạy chương trình, dừng chương trình kéo thả chuột tương tác với mô hình họat động Robot  Hướng phát triển • Xây dựng chương trình (Project) hoàn thiện để mô tất lại Robot cấu động học khác • Xây dựng chương trình với tốc độ xử lý đồ họa nhanh hơn, đọc File liệu nhanh mà không bị chương trình 58 TÀI LIỆU THAM KHẢO [1] Lê Phong (2009), Hướng dẫn lập trình OpenGL [2] Mason Woo, Jackie Neider, Tom Davis (January 1997), Opengl Programming Guide: The Official Guide to Learning Opengl (The Red book), Version 1.1, Addison-Wesley Pub (Sd) [3] Phạm Hồng Thái (2008), Bài giảng Ngôn ngữ lập trình C/C++, Đại học Quốc Gia Hà Nội [4] TS Phạm Đăng Phước (2007), Robot công nghiệp, NXB Đại học Đà Nẵng [5] PGS.TS Đào Văn Hiệp (2003), Kỹ thuật robot công nghiệp, NXB Khoa học kỹ thuật [6] Diễn đàn, website liên quan: http://www.opengl.org/ http://www.opengl.org/sdk/docs/man/xhtml/ http://www.opengl.org/wiki/Code_Resources http://code.google.com/p/mophongrobot/wiki/Baigiang http://svbk.vn/threads/24401-Su-dung-VC-ket-hop-voi-OpenGl-de-mophong-dong-hoc-robot?s=6cd724ce7c068c0f97f256ad31abad45 59 PHỤ LỤC Mã nguồn chương trình MainFrm.cpp #include "stdafx.h" #include "RobotKUKA.h" #include "MainFrm.h" #include "RobotKUKAView.h" #include "CTRPANEL.h" void CMainFrame::Run(double a, double b, double c, double d) { ((CRobotKUKAView*)m_Splitter.GetPane(0,1))-> NhapGiaTriTheta (a,b,c,d); } void CMainFrame::QDao(double _xE, double _yE, double _zE) {((CRobotKUKAView*)m_Splitter.GetPane(0,1))->ToaDoQDao(_xE,_yE, _zE); } void CMainFrame::_CLear() { ((CRobotKUKAView*)m_Splitter.GetPane(0,1))->F_Clear(); } RobotKUKAView.cpp #include "stdafx.h" #include "RobotKUKA.h" #include "RobotKUKADoc.h" #include "RobotKUKAView.h" #define Pi 3.1415926535897932384626433832795 CRobotKUKAView::CRobotKUKAView() { m_pInitGL = new CInitOpenGL(this);//con tro khoi toa thu vien OPENGL m_pInitGL->SetScale(1.3); //ty le 1,3 m_pInitGL->m_TranslateX = -500; m_pInitGL->m_TranslateZ = -100; m_pInitGL->m_RotateY = 20; 60 d1 = 85, a1=40, a3 = 67.5, a2 = 100;//do dai cac khau cua Robot t= 0, a=12, b=20, c=10;//khoi tao gia tri cac bien trung gian theta1 = 0.321750554396642; theta2 = -0.561525972720257; theta3 = 1.60659052346729; } void CRobotKUKAView::ToaDoQDao(double _xp, double _yp, double _zp) { //nhap quy dao xp = _xp; yp = _yp; zp = _zp; m_QuyDao.addPoint(CPoint4D(xp, yp, zp));//ve quy dao } void CRobotKUKAView::NhapGiaTriTheta(double _a, double _b, double _c, double _d) { theta1= _a; //dat gia tri cho goc quay theta theta2 = _b, theta3= _c, d = _d; Paint();//ve robot o vi tri moi } void CRobotKUKAView::Paint() { m_pInitGL->BeforeDrawing();//bat dau ve glPushMatrix();//bat dau he toa tuyet doi xyz m_nen.setMaterial(storageMaterial[11]);//Mau den m_dem.setMaterial(storageMaterial[12]);// Mau xanh nuoc bien // Mau m_de1.setMaterial(storageMaterial[12]);// Mau xanh nuoc bien m_de.setMaterial(storageMaterial[3]);// Mau m_Khau1.setMaterial(storageMaterial[5]);// Mau vang 61 m_Khau2.setMaterial(storageMaterial[0]);// Mau xanh la cay m_Khau3.setMaterial(storageMaterial[6]);// Mau nau //cac lenh hieu chinh he toa m_pInitGL->UseUCS();//su dung he toa m_pInitGL->TranslateGL(); m_pInitGL->MouseMoveGL(); m_pInitGL->ScaleGL(); glPushMatrix();//bat dau he toa tuong doi uvw // ve de robot m_de.drawObject(); //ve de glTranslated(0, 0, -2); //dich xuong truc z m_dem.drawObject();//ve dem m_nen.drawObject();//ve mieng nen glTranslated(0, 0, 2); //tro lai vi tri goc (dang su dung he toa tuong doi) //ve he truc toa xyz //truc z glColor3f(55,0,134); glRasterPos3d(0,5,100); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,'Z'); glBegin(GL_LINES); //ve duong thang glVertex3d(0,0,0); glVertex3d(0,0,100); glVertex3d(0,0,100); glVertex3d(0,4,93); glVertex3d(0,0,100); glVertex3d(0,-4,93); glEnd(); //truc y glColor3f(0,0,134); 62 glRasterPos3d(0,80,0); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,'Y'); glBegin(GL_LINES); glVertex3d(0,0,0); glVertex3d(0,80,0); glVertex3d(0,80,0); glVertex3d(0,73,4); glVertex3d(0,80,0); glVertex3d(0,73,-4); glEnd(); //truc x glColor3f(5,155,0); glRasterPos3d(80,5,0); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,'X'); glBegin(GL_LINES); glVertex3d(0,0,0); glVertex3d(80,0,0); glVertex3d(80,0,0); glVertex3d(73,04,0); glVertex3d(80,0,0); glVertex3d(73,0-4,0); glEnd(); //khau1 glTranslated(0, 0, 50);//di chuyen theo truc z 50 (chieu cao de robot) glRotated(theta1*180/Pi, 0, 0, 1);//xoay he toa di goc theta1 m_Khau1.drawObject();//va ve khau //khau2 glTranslated(a1, 5, 35); glRotated(theta2*180/Pi, 0, 1, 0); m_Khau2.drawObject(); 63 // khau3 glTranslated(a2, 0, 0); glRotated(theta3*180/Pi, 0, 1, 0); m_Khau3.drawObject(); //ve truc toa x1y1z1(uvw) //truc z1 glColor3f(55,0,134); glRasterPos3d(a3,-33,0); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,'W'); glBegin(GL_LINES); glVertex3d(a3,-5,0); glVertex3d(a3,-30,0); glVertex3d(a3,-30,0); glVertex3d(a3,-23,4); glVertex3d(a3,-30,0); glVertex3d(a3,-23,-4); glEnd(); //truc y1 glColor3f(0,0,134); glRasterPos3d(a3,5,33); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,'V'); glBegin(GL_LINES); glVertex3d(a3,-5,0); glVertex3d(a3,0,30); glVertex3d(a3,0,30); glVertex3d(a3,4,23); glVertex3d(a3,0,30); glVertex3d(a3,-4,23); glEnd(); //truc x1 64 glColor3f(5,155,0); glRasterPos3d(a3+33,0,3); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,'U'); glBegin(GL_LINES); glVertex3d(a3,-5,0); glVertex3d(a3+30,0,0); glVertex3d(a3+30,0,0); glVertex3d(a3+23,0,4); glVertex3d(a3+30,0,0); glVertex3d(a3+23,0,-4); glEnd(); glPopMatrix();//ket thuc he toa tuong doi uvw m_QuyDao.drawPoints();//ve quy dao glPopMatrix();//ket thuc he xyz m_pInitGL->AfterDrawing();//ket thuc ve voi GL } void CRobotKUKAView::F_Clear() { m_QuyDao.clear();//xoa quy dao } CTRPANEL.cpp #include "stdafx.h" #include "RobotKUKA.h" #include "CTRPANEL.h" #include "RobotKUKAView.h" #include "MainFrm.h" #define Pi 3.1415926535897932384626433832795 IMPLEMENT_DYNCREATE(CCTRPANEL, CFormView) CCTRPANEL::CCTRPANEL() : CFormView(CCTRPANEL::IDD) { //{{AFX_DATA_INIT(CCTRPANEL) 65 m_ax = 12, m_by = 20, m_cz = 10; m_IndextHAMBD = 0; m_Xp = _T("xp = 160+a*cos(t);"); m_Yp = _T("yp = 50+b*sin(t);"); m_Zp = _T("zp = 90+c*sin(4*t);"); m_theta1 = xp;//0.0; m_theta2 = yp;//0.0; m_theta3 = zp;//0.0; //}}AFX_DATA_INIT d1 = 85, a1 = 40 , a2 = 100, a3 = 67.5; j=0; xp = 160+ m_ax*cos(t); yp = 50 + m_by*sin(t); zp = 90 + m_cz*sin(4*t); } void CCTRPANEL::OnRun() { CLear(); UpdateData(TRUE); KillTimer(2); SetTimer(1, 1, NULL);//khoi dong bo dinh thoi tan so khoang 1ms } void CCTRPANEL::OnStop() { CLear(); UpdateData(TRUE); KillTimer(1), KillTimer(2); GetDlgItem (IDC_LIST_HAM_DB)->EnableWindow(TRUE); GetDlgItem (IDC_AX)->EnableWindow(TRUE); GetDlgItem (IDC_BY)->EnableWindow(TRUE); 66 GetDlgItem (IDC_CZ)->EnableWindow(TRUE); } void CCTRPANEL::OnBack() { CLear(); UpdateData(TRUE); KillTimer(1); SetTimer(2, 1, NULL);//khoi dong bo dinh thoi tan so khoang 1ms } void CCTRPANEL::OnTimer(UINT nIDEvent) { switch(nIDEvent) { case 0: t+=0.03, t2+= 0.01; Cul2(); GetDlgItem (IDC_LIST_HAM_DB)->EnableWindow(FALSE); GetDlgItem (IDC_AX)->EnableWindow(FALSE); GetDlgItem (IDC_BY)->EnableWindow(FALSE); GetDlgItem (IDC_CZ)->EnableWindow(FALSE); ((CMainFrame*)AfxGetMainWnd())-> Run(theta1,theta2,theta3,0); ((CMainFrame*)AfxGetMainWnd())-> QDao(xp,yp,zp); UpdateData(FALSE); InvalidateRect(NULL, FALSE); break; case 1: t+=0.03; Calculater(); GetDlgItem (IDC_LIST_HAM_DB)->EnableWindow(FALSE); GetDlgItem (IDC_AX)->EnableWindow(FALSE); 67 GetDlgItem (IDC_BY)->EnableWindow(FALSE); GetDlgItem (IDC_CZ)->EnableWindow(FALSE); ((CMainFrame*)AfxGetMainWnd())-> Run(theta1,theta2,theta3,0); ((CMainFrame*)AfxGetMainWnd())-> QDao(xp,yp,zp); UpdateData(FALSE); InvalidateRect(NULL, FALSE); break; case 2: t- =0.03; Calculater(); GetDlgItem (IDC_LIST_HAM_DB)->EnableWindow(FALSE); GetDlgItem (IDC_AX)->EnableWindow(FALSE); GetDlgItem (IDC_BY)->EnableWindow(FALSE); GetDlgItem (IDC_CZ)->EnableWindow(FALSE); ((CMainFrame*)AfxGetMainWnd())-> Run(theta1,theta2,theta3,0); ((CMainFrame*)AfxGetMainWnd())-> QDao(xp,yp,zp); UpdateData(FALSE); InvalidateRect(NULL, FALSE); break; } CFormView::OnTimer(nIDEvent); } void CCTRPANEL::Calculater() //ham tinh toan dong hoc robot { UpdateData(TRUE); switch(m_IndextHAMBD) { case 0: //3D m_Xp="xp = 160+a*cos(t);"; m_Yp="yp = 50+b*sin(t);"; 68 m_Zp="zp = 90+c*sin(4*t);"; GetDlgItem (IDC_AX)->EnableWindow(TRUE); GetDlgItem (IDC_BY)->EnableWindow(TRUE); GetDlgItem (IDC_CZ)->EnableWindow(TRUE); xp = 160+ m_ax*cos(t), yp = 50 + m_by*sin(t); zp = 90 + m_cz*sin(4*t); break; case 1: //PT duong canh hoa m_Xp ="xp=160"; m_Yp ="yp=70+b*cos(t)*sin(3*t);"; m_Zp ="zp=70-c*sin(t)*sin(3*t);"; GetDlgItem (IDC_AX)->EnableWindow(FALSE); GetDlgItem (IDC_BY)->EnableWindow(TRUE); GetDlgItem (IDC_CZ)->EnableWindow(TRUE); xp = 160, yp = 70+m_by*cos(t)*sin(3*t); zp = 70-m_cz*sin(t)*sin(3*t); break; case 2: //PT duong Elip m_Xp ="xp=160"; m_Yp ="yp=50+b*cos(t);"; m_Zp ="zp=90+c*sin(t);"; GetDlgItem (IDC_AX)->EnableWindow(FALSE); GetDlgItem (IDC_BY)->EnableWindow(TRUE); GetDlgItem (IDC_CZ)->EnableWindow(TRUE); xp = 160, yp = 50+m_by*cos(t), zp = 90+m_cz*sin(t); break; case 3: //PT duong hinh Sin m_Xp="xp = 100;"; m_Yp="yp = 20+b*t;"; m_Zp="zp = 60+c*sin(t);"; 69 GetDlgItem (IDC_AX)->EnableWindow(FALSE); GetDlgItem (IDC_BY)->EnableWindow(TRUE); GetDlgItem (IDC_CZ)->EnableWindow(TRUE); if(t2*Pi)t=2*Pi; xp = 100, yp = 20+m_by*t, zp = 60+m_cz*sin(t); break; case 4: //PT duong tron m_Xp="xp = 160;"; m_Yp="yp = 50+20*cos(t);"; m_Zp="zp = 90+20*sin(t);"; GetDlgItem (IDC_AX)->EnableWindow(FALSE); GetDlgItem (IDC_BY)->EnableWindow(FALSE); GetDlgItem (IDC_CZ)->EnableWindow(FALSE); xp = 160, yp = 50+20*cos(t), zp = 90+20*sin(t); break; default: break; } theta1=atan2(yp,xp); a12 = ((xp-a1*cos(theta1))*(xp-a1*cos(theta1))+(yp-a1*sin(theta1))*(ypa1*sin(theta1)) +(zp-d1)*( zp-d1)-a3*a3-a2*a2); theta3 = acos(a12/(2*a3*a2)); double ds = (a3*sin(theta1) *cos(theta3)+a2*sin(theta1))* ( d1-zp)(a3*sin(theta3))*(yp-a1*sin(theta1)); double dc =(a3*cos(theta3)+a2)*(yp-a1*sin(theta1))+(a3*sin(theta3) *sin(theta1))*( d1-zp); theta2 = atan2(ds, dc); m_theta1 = theta1, m_theta2 = theta2, m_theta3 = theta3; UpdateData(FALSE); 70 } Danh mục nội dung đĩa CD kèm theo • Bộ cài Microsoft Visual C++ 6.0 thư viện OpenGL kèm theo • Chương trình mã nguồn chương trình • Tập văn báo cáo đồ án tốt nghiệp • Slide báo cáo đồ án tốt nghiệp 71 [...]... Nam Trong kỹ thuật thì việc sử dụng các ứng dụng của OpenGL cũng như DirectX vào việc mô phỏng các cơ cấu máy móc, các hoạt động của Robot công nghiệp trước khi đem thử nghiệm bằng mô hình thực là giải pháp mà rất nhiều kỹ sư cơ khí cũng như cũng như các viện nghiên cứu lựa chọn do tính ưu việt của nó trong việc thể hiện các mô hình đồ họa động trong không gian ba chiều (3D) Vì vậy trong phạm vi của đồ. .. liệu Trong chương trình mô phỏng ta sẽ cần sử dụng rất nhiều trong lớp này để khởi tạo cho OpenGL và các thao tác vẽ lại trên lớp này • CMainFrame: là lớp khung (Frame Class) của ứng dụng và có nhiệm vụ hiển thị và truyền lệnh của người dùng 2.3 Khởi tạo và thiết lập các gói thư viện của OpenGL Mục đích chính của chương trình là mô phỏng quá trình hoạt động của Robot, vì vậy cần thiết phải có một môi... tạo môi trường hỗ trợ cho OpenGL OpenGL là một thư viện đồ hoạ độc lập với hệ thống giao diện của các hệ điều hành, do đó các ứng dụng đồ hoạ sử dụng OpenGL trên các hệ điều hành khác nhau đều phải có một quá trình khởi tạo thích hợp với các hàm xử lý đồ hoạ của OpenGL Quá trình này được thực hiện bằng việc gọi một số hàm thích hợp của các thư viện hỗ trợ giao tiếp với OpenGL trong chương trình ứng dụng. .. học thuận và động học ngược là bước cơ sở cho việc thiết kế sơ bộ robot Kuka, để từ đó giải bài toán điều khiển robot theo các quỹ đạo Từ đây, có thể có các thông số để điều khiển robot theo một quỹ đạo cho trước ta thu được một quỹ đạo chuyển động nhất định Trong đồ án này em ứng dụng vào việc mô phỏng chuyển động của Robot KUKA ba bậc tự do với ba khớp quay Các bước mô phỏng chuyển động của robot này... Hình 2.9: Các lớp ứng dụng trong MFC Chức năng của các lớp cơ sở của ứng dụng MFC như sau: • CApp: là lớp ứng dụng (Applicatiton Class) có nhiệm vụ là khởi tạo và chạy ứng dụng • CDoc: là lớp tài liệu (Document Class) của ứng dụng, dùng để lưu trữ dữ liệu Tuy nhiên, mục đích sử dụng của chương trình là mô phỏng nên không cần quan tâm nhiều đến lớp này • CView: là lớp hiển thị của ứng dụng (View Class),... một hướng định trước của tay kẹp Bài toán này nhằm phục vụ các bài toán điều khiển qũy đạo, các bài toán điều khiển tối ưu 1.3 Thư viện đồ họa OpenGL Để hiểu một cách cụ thể về công cụ đồ họa như OpenGL thì một câu hỏi được đặt ra là: OpenGL là gì? Và tại sao lại sử dụng OpenGL cho bài toán mô phỏng? OpenGL là chữ viết tắt của Open Graphic Library, là một thư viện đồ họa tốc độ cao và độc lập với hệ... mọi nhu cầu của người sử dụng trong việc thiết kế các giao diện của chương trình mô phỏng 30 CHƯƠNG 2: PHÂN TÍCH, THIẾT KẾ BÀI TOÁN MÔ PHỎNG CHUYỂN ĐỘNG CỦA ROBOT 2.1 Giới thiệu về Robot KUKA Robot Kuka là sản phẩm của tập đoàn chuyên chế tạo robot công nghiệp Kuka của Cộng Hoà Liên Bang Đức Sau nhiều năm nghiên cứu và chế tạo, đến nay tập đoàn đã cho ra đời nhiều thế hệ robot công nghiệp Kuka với nhiều... bánh ôtô và gọi nó bốn lần 1.3.2.7 Chọn các đối tượng đồ họa Việc cho phép người dùng chọn đối tượng đồ hoạ bằng cách click chuột trên cửa sổ là một yêu cầu thiết yếu đối với các ứng dụng tương tác Để thực hiện được những chức năng như vậy, trong OpenGL có sẵn một chế độ là Selection Và chế độ này được ứng dụng trong kỹ thuật mô phỏng va chạm của các vật thể 1.3.3 Thư viện hỗ trợ lập trình OpenGL Ngoài... diện, nên các chương trình muốn sử dụng OpenGL trên các hệ điều hành khác nhau thì cần sử dụng các thư viện hỗ trợ giao tiếp giao diện ứng với từng hệ điều hành riêng Ví dụ các chương trình đồ hoạ sử dụng OpenGL trên Microsoft Windows phải sử dụng thư viện giao tiếp WGL, trên Apple Macintosh phải sử dụng thư viện AGL, trên Unix / Linux X Window system phải sử dụng thư viện GLX Phần giao tiếp này phải... sử dụng OpenGL để xây dựng bài toán mô phỏng 11 1.3.1 Cơ chế hoạt động của OpenGL Hình 1.4: Cơ chế hoạt động của OpenGL OpenGL có cơ chế hoạt động theo kiểu ống dẫn, tức là đầu ra của giai đoạn trước là đầu vào của giai đoạn sau Từ sơ đồ thì các thành phần của cơ chế được giải thích như sau: • Display List: Là nơi lưu lại một số lệnh để xử lý sau • Evaluator (bộ ước lượng): Xấp xỉ các đường cong và ... trọng mà mô hình robot phải thực mô trình hoạt động Để lập trình mô hoạt động robot, sau em xin giới thiệu tổng quan động học thư viện đồ họa OpenGL 1.2 Động học Động học khảo sát chuyển động học. .. 1: Tổng quan động học thư viện đồ họa OpenGL  Chương 2: Phân tích, thiết kế toán mô hoạt động Robot  Chương 3: Chương trình mô CHƯƠNG 1: TỔNG QUAN VỀ ĐỘNG HỌC VÀ THƯ VIỆN ĐỒ HỌA OPENGL Giới... 1.3 Thư viện đồ họa OpenGL Để hiểu cách cụ thể công cụ đồ họa OpenGL câu hỏi đặt là: OpenGL gì? Và lại sử dụng OpenGL cho toán mô phỏng? OpenGL chữ viết tắt Open Graphic Library, thư viện đồ họa

Ngày đăng: 09/12/2016, 15:30

Từ khóa liên quan

Mục lục

  • 1 Giới thiệu chung

  • 1.2 Động học

    • 1.2.1 Chuyển động cơ bản của vật rắn

    • 1.2.2 Động học của Robot

    • 1.3 Thư viện đồ họa OpenGL

      • 1.3.1 Cơ chế hoạt động của OpenGL

      • 1.3.2 Đặc điểm của OpenGL

      • 1.3.3 Thư viện hỗ trợ lập trình OpenGL

      • 1.3.4 Các bước tổng quan khi xây dựng ứng dụng đồ hoạ với thư viện OpenGL

      • 2.1 Giới thiệu về Robot KUKA

      • 2.2 Cách tạo ra Project MFC để thực hiện quá trình mô phỏng

      • 2.3 Khởi tạo và thiết lập các gói thư viện của OpenGL

      • 2.4 Thiết kế mô hình Robot trên Solidwork

      • 2.5 Tính toán động học Robot

        • 2.5.1 Phương trình xác định vị trí khâu thao tác (bàn kẹp) của Robot (Bài toán động học thuận)

        • 2.5.2 Bài toán ngược xác định thông số động học Robot

        • 2.6 Mô phỏng chương trình trên OpenGL

        • 3.1 Giao diện tổng quan của chương trình

        • 3.2 Robot vẽ theo quỹ đạo đường gấp khúc 3D

        • 3.3 Robot vẽ theo quỹ đạo đường cánh hoa

        • 3.4 Robot vẽ theo quỹ đạo đường Ellipse

        • 3.5 Robot vẽ theo quỹ đạo đường hình Sin

Tài liệu cùng người dùng

Tài liệu liên quan