1. Trang chủ
  2. » Tất cả

Bai giang ky thuat lap trinh mo phong robot các hệ cơ điện tử

62 5 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

Nội dung

4. Thư viện đồ họa mở OpenGL 65  4.2. Vấn đề cơ bản của OpenGL  4.2.3. Khởi tạo và sử dụng cấu trúc định dạng điểm ảnh  Lựa chọn sử dụng một định dạng điểm ảnh: CClientDC clientDC(this); int pixelFormat = ChoosePixelFormat(clientDC.m_hDC,pfd); BOOL success = SetPixelFormat(clientDC.m_hDC,pixelFormat,pfd);  4.2.4. Tạo lập ngữ cảnh diễn tả (Rendering context)  Phải tạo lập và làm hiện hành một ngữ cảnh mô tả trước khi có thể vẽ trên cửa sổ với các hàm OpenGL  Tạo lập và làm hiện hành nó thường đặt trong lời đáp thông điệp WM_CREATE, tức là đặt trong hàm OnCreate() ... Khởi tạo và lựa chọn cấu trúc dữ liệu điểm ảnh ở đây HGLRC m_hRC = wglCreateContext(clientDC.m_hDC);  Hủy bỏ ngữ cảnh diễn tả thường đặt trong lời đáp thông điệp WM_ DESTROY, tức là đặt trong hàm OnDestroy() wglDeleteContext(m_hRC);

3/20/2015 Trường Đại học Bách Khoa Hà Nội Bài giảng Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Giảng viên: TS Vũ Lê Huy Đơn vị công tác: Bộ môn sở thiết kế máy Rơbốt, Viện Cơ khí Hà Nội, 1/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Các phép biến hình  1.1 Phép tịnh tiến P’(x’,y’)  P’ = m.P z trz P’ P trx x try y 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Các phép biến hình  1.2 Phép tỉ lệ y Q’ Q P’ P  P’Q’ = m.PQ x z P’ P Q’ Q y x Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Các phép biến hình  1.3 Phép quay y P’ P   P’ = m.P z  x O Quanh trục Z P’z P  y x 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Các phép biến hình  1.4 Phép quay z P’x Quanh trục X   P y x z Quanh trục Y  P  P’y y x Kỹ thuật lập trình mơ Rô bốt hệ điện tử Các phép biến hình  1.5 Kết hợp phép biến hình     Quay P quanh  P’ y P’’ P’ try P’ = mR.P P  Tịnh tiến P’  P’’ P’’ = mT.P’ = mR.mT.P = m.P O trx x 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Các phép biến hình  1.5 Kết hợp phép biến hình z x y STL Kỹ thuật lập trình mơ Rô bốt hệ điện tử Các phép biến hình  z z , z2 1.5 Kết hợp phép biến hình  Tịnh tiến Oxyz  Ox1y1z1 x2 x1 2 trz1  Quay Ox1y1z1  Ox2y2z2 y1 y2 try3 x3 O x4 z4 z3 y4 y3 4 y x  Tịnh tiến Ox2y2z2  Ox3y3z3  Quay Ox3y3z3  Ox4y4z4 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Các phép biến hình  z z , z2 1.5 Kết hợp phép biến hình  Ma trận chuyển Oxyz  Ox4y4z4 x2 x1 2 z4 y1 y2 try3 x3 trz1 x4 z3 y4 y3 4 y O x Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Bài toán Động học 2.1 Động học Cơ cấu khâu  Bài tốn vị trí: Tìm giá trị góc khâu 2 3 tùy theo vị trí khâu với giá trị 1  giải hệ phương trình phi tuyến : l1 cos(1 )  l2 cos( )  l3 cos(3 )  d1    l1 sin(1 )  l2 sin( )  l3 sin(3 )  d   Phương pháp NewtonRaphson: Giải gần hệ phương trình phi tuyến n ẩn số f(x) = l2 Đây phương pháp lặp với biểu thức hồi quy dạng : x(k+1) = x(k) – Fx-1(x(k)).f(x(k)) k : bước lặp thứ k Fx : ma trận Jacobi 2 l3 3 l1 1 d2  10 d1 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Bài toán Động học  11 2.1 Động học Cơ cấu khâu  Phương pháp NewtonRaphson: x(k+1) = x(k) – Fx-1(x(k)).f(x(k)) Fx : ma trận Jacobi,  f1  x   f Fx   x1    f  n  x1 f1 x2 f x2  f n x2 f1  xn   f   xn     f n    xn   Đặt : x(k) = – Fx-1(x(k)).f(x(k))  Fx(x(k)).x(k) = –f(x(k)) Giải hệ tìm x(k), thu giá trị ẩn sau bước lặp thứ k : x(k+1) = x(k) + x(k) Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Bài toán Động học  12 2.1 Động học Cơ cấu khâu  Bài toán vận tốc: lấy đạo hàm theo thời gian phương trình vị trí    l2 sin( ).2  l3 sin(3 ).3  l1.1 sin(1 )  l2 cos( ).2  l3 cos(3 ).3  l1.1 cos(1 ) Bài toán gia tốc: lấy đạo hàm theo thời gian phương trình vận tốc  l2.sin ( ) l3.sin (3 )  a2   l cos ( )  l cos ( )  a   3   2    l a sin ( )  l w w cos (1 )  l w w cos ( )-l w w cos ( ) 1 1 2 2 3 3  1 -l1.a1.cos (1 )  l1.w1.w1.sin (1 )  l2.w2.w2.sin ( )-l3.w3.w3.sin (3 )  Thực giải hệ phương trình đại số tuyến tính phương pháp GaussJordan, …… 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Bài toán Động học  13 2.2 Động học Rô bốt Dao phay  Thiết lập thơng số Denavit-Hartenbeg : • Trục zn liên kết với trục khớp thứ n+1 Chiều zn chọn tuỳ ý •Trục xn xác định đường vng góc chung trục khớp n khớp n+1, hướng từ điểm trục khớp tới khớp n+1 •Trục yn xác định theo xn zn theo quy tắc bàn tay phải Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Bài toán Động học  14 2.2 Động học Rô bốt Dao phay  Thiết lập thơng số Denavit-Hartenbeg : 3/20/2015 Kỹ thuật lập trình mô Rô bốt hệ điện tử Bài toán Động học  15 2.2 Động học Rô bốt Dao phay  Thiết lập thông số Denavit-Hartenbeg : n 1 An  cos  n  sin  n      cos  n sin  n sin  n sin  n cos  n cos  i sin  n cos  n sin  n cos  n 0 an cos  n  an sin  n  dn    Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Bài toán Động học  2.2 Động học Rôz bốt 3 2 x1 d1 z2 y2 a3 z3 y3 x2 a2 x3 Dao phay z x  y1 16 y Thiết lập thông số Denavit-Hartenbeg : Khâu θi αi di 0 d1 θ2 a2 θ3 a3 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Bài toán Động học  2.2 Động học Rôz bốt 3 2 x1 y1 d1 z2 y2 a3 z3 y3 x2 a2 x3 Dao phay z x 1 0 A1   0  0 17 y 0  d1   0 1 0 cos   sin  A2       sin  cos  cos   sin  A3       sin  cos  0 0 a2  0  0  1 a3  0  0  1 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Bài toán Động học  2.2 Động học Rôz bốt 3 2 x1 d1 z2 a2 y2 a3 x2 Dao phay z x y1 18 z3 y3 x3 E(xE,yE,zE) =0A4 E4(x4,y4,z4) y A4  2A1.1A2 A3 cos(   )  sin(   )  sin(   ) cos(   ) 3 A4    0  0  a2 cos   a3 cos(   ) a2 sin   a3 cos(   )   d1    Phương trình điểm tác động cuối: E(xE,yE,zE) = 0A4 E4(x4,y4,z4)  Giải hệ phương trình phi tuyến  Thu biến khớp  Giải toán vận tốc, gia tốc, … 3/20/2015 Kỹ thuật lập trình mơ Rô bốt hệ điện tử Bài toán Động học  19 2.3 Bài tập 1: lập ma trận chuyển cho mơ hình Đầu dao khắc Dao phay Bàn gá phơi Kỹ thuật lập trình mô Rô bốt hệ điện tử Lập trình Windows với MFC  20 3.1 Khái niệm  Nguyên lý lập trình Window sở xử lý thơng điệp Một chương trình Window có thành phần : + Khởi động chương trình : hàm WinMain() thực khởi tạo thiết lập cửa sổ giao diện + Xử lý thông điệp : hàm WinProc() Window gọi tới để xử lý tồn thơng điệp xếp hàng hàng đợi hệ thống gửi đến chương trình => thực vịng lặp xử lý thơng điệp (đây vịng lặp lớn) 10 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Thư viện đồ họa mở OpenGL  95 4.6 Tạo lập mơ hình 3D  4.6.1 Sử dụng ngăn xếp ma trận    Ngăn xếp ma trận (matrix stack) giống với ngăn xếp máy tính mà bạn sử dụng, ngoại trừ ngăn xếp ma trận lưu giữ giá trị ma trận, kiểu giá trị bạn lưu trữ ngăn xếp máy tính Mỗi ma trận chuyển đổi có ngăn xếp ma trận thân Để ghi lại ngữ cảnh ma trận hành, cần gọi hàm sau: glPushMatrix();   Sau đặt ma trận hành vào ngăn xếp, bạn thực tất phép chuyển đổi bạn muốn mà lo lắng thay đổi ma trận gốc Khi bạn muốn trả lại ma trận gốc bạn gọi hàm glPopMatrix() Kỹ thuật lập trình mơ Rô bốt hệ điện tử Thư viện đồ họa mở OpenGL  96 4.6 Tạo lập mơ hình 3D  4.6.2 Vùng đệm kép    Các vùng đệm kép gọi vùng đệm trước (vùng đệm hiển thị) vùng đệm sau (vùng đệm ẩn) Khi đặt OpenGL làm việc với vùng đệm kép, lệnh vẽ bạn luôn tới vùng đệm sau hành, người sử dụng khơng thấy hình bạn vẽ Sau chương trình vẽ ảnh xong, hốn đổi vùng đệm trước sau, ảnh xuất hình Cài đặt mơi trường vùng đệm kép:       PIXELFORMATDESCRIPTOR { sizeo (PIXELFORMATDESCRIPTOR), 1, PFD DRAW_TO_WINDOW |D_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, … }; Gọi hàm SwapBuffers() sau vẽ ảnh để hoán đổi vùng đệm 48 3/20/2015 Kỹ thuật lập trình mơ Rô bốt hệ điện tử Thư viện đồ họa mở OpenGL  97 4.6 Tạo lập mơ hình 3D  4.6.3 Danh sách hiển thị      Danh sách hiển thị coi vùng đệm cho nhóm lệnh OpenGL Khi danh sách hiển thị gọi ra, thực lệnh chứa nó, theo thứ tự mà lệnh gọi tạo danh sách hiển thị Mục đích chủ yếu danh sách hiển thị dành cho việc vẽ lại nhiều lần vật thể, vẽ vật thể có hình dạng giống hệt dịch chuyển, quay theo cách Việc làm thực mang lại hiệu muốn vẽ lại vật thể phức tạp Danh sách hiển thị chứa nhớ nhóm lệnh mà ta đặt vào Khi ta muốn gọi lại nhóm lệnh này, ta phải gọi lại danh sách hiển thị chứa nhóm lệnh Ngồi ra, danh sách hiển thị lưu lệnh theo cách tối ưu hoá thực nhanh Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Thư viện đồ họa mở OpenGL  98 4.6 Tạo lập mơ hình 3D  4.6.3 Danh sách hiển thị  Khởi tạo danh sách hiển thị:            int listIndex ; listIndex = glGenLists(1); // glGenLists(1) trả lại số nguyên tương ứng với danh sách hiển thị Hàm đảm bảo listIndex không trùng với danh sách hiển thị có Tham số số danh sách hiển thị mà ta cần tạo if (listIndex != 0) { glNewList(listIndex , GL_COMPILE); //khởi tạo danh sách hiển thị …… //gọi lệnh vẽ OpenGL để vẽ vật thể glEndList(); //kết thúc danh sách hiển thị } Gọi thực danh sách hiển thị:  glCallLits(listIndex); // đối số tên danh sách hiển thị 49 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Công cụ hỗ trợ mô 3D  99 5.1 Tệp tin mơ hình 3D - STL  5.1.1 Tệp tin STL gì?  STL = STereoLithography dạng thường sử dụng hỗ trợ mô chiều do:   Được hỗ trợ tất phần mềm xây dựng mô hình 3D  Cấu trúc đơn giản, dễ hiểu dễ sử dụng Tệp tin STL mô tả hình dạng bề mặt đối tượng 3D mà không kèm theo thông tin mấu sắc, dán ảnh hay lệnh thuộc tính đối tượng, đơn vị, tỉ lệ, …  Tệp tin mơ hình STL có hai định dạng :  Tệp tin văn (theo mã ASCII)  Tệp tin nhị phân (binary)  ASCII - American Standard Code for Information Interchange Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Thư viện đồ họa mở OpenGL  100 5.1 Tệp tin mơ hình 3D - STL  5.1.2 Định dạng tệp tin STL theo mã ACSII   Tệp tin STL dạng văn : mở để xem nội dung phần mềm soạn thảo văn Ví dụ :            solid NAP HOP ascii – chuỗi tên tùy chọn facet normal 0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex 1.079286e+001 1.400000e+001 9.100000e+001 vertex 8.426600e+001 1.400000e+001 9.100000e+001 vertex 1.322431e+001 2.809329e+001 9.100000e+001 endloop endfacet endsolid NAP HOP ascii – chuỗi tên tùy chọn Mỗi facet định nghĩa mặt tam giác  Gồm vector pháp đỉnh 50 3/20/2015 Kỹ thuật lập trình mô Rô bốt hệ điện tử Thư viện đồ họa mở OpenGL  101 5.1 Tệp tin mơ hình 3D - STL  5.1.3 Định dạng tệp tin STL nhị phân  Kích thước tệp tin STL nhị phân nhỏ dạng ASCII  Định dạng tệp tin có cấu trúc theo bảng sau: Khơng sử dụng Kỹ thuật lập trình mơ Rô bốt hệ điện tử Công cụ hỗ trợ mô 3D  102 5.2 Sử dụng thư viện OpenGLCtrl  5.2.1 Lợi ích thư viện  Khởi tạo mơi trường OpenGL nhanh chóng thuận lợi  Hỗ trợ tương tác giao tiếp chuột  Đóng gói hàm OpenGL theo lớp quản lý tác vụ riêng:  COpenGLCtrl: quản lý môi trường giao diện OpenGL đưới dạng điều khiển (Control)  Cấu trúc GL_MATERIAL GL_LIGHT quản lý vật liệu ánh sáng  Cấu trúc STRUCT_OBJECTGLLIST quản lý đối tượng vẽ danh sách hiển thị  Hỗ trợ đọc tệp tin mơ hình 3D với định dạng STL hiển thị chúng nhanh chóng  Chú ý: Đây thư viện Vũ Lê Huy xây dựng, khơng có sẵn VC 51 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Công cụ hỗ trợ mô 3D  103 5.2 Sử dụng thư viện OpenGLCtrl  5.2.2 Đưa thư viện vào đề án  Copy thư mục “OpenGLCtrl” vào thư mục project tạo  Đưa file “OpenGLCtrl\bin\OpenGL.lib” “…\OpenGLd.lib” (tùy theo chế độ biên dịch đề án) vào đề án chức “Add Files to Project …”  Trong file “stdafx.h” thêm dòng sau   #include “OpenGLCtrl/Inc/OpenGLCtrl.h“ Khai báo sử dụng điều khiển OpenGLCtrl khung View:   Tạo lớp kế thừa từ COpenGLCtrl, ví dụ tên lớp CMyOpenGLCtrl Thêm hàm void DrawInOpenGL() cho lớp vừa tạo, lệnh vẽ OpenGL đặt hàm  Thêm khai báo đối tượng kiểu CMyOpenGLCtrl cho lớp CxxxView, ví dụ: CMyOpenGLCtrl m_OpenGL; Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Công cụ hỗ trợ mô 3D  104 5.2 Sử dụng thư viện OpenGLCtrl  5.2.3 Sử dụng đối tượng COpenGLCtrl  Khởi tạo OpenGLCtrl khung View:  Tạo hàm xử lý kiện OnCreate() chức “Add Windows Message Handle …”  Thêm lệnh khởi tạo sau:  CRect rect;  GetClientRect(rect); //lấy kích thước khung View để cài đặt cho OpenGLCtrl  m_openGL.Create(rect, this, 100); // khởi tạo OpenGLCtrl với kích thước khung View (tham số đầu tiên), cha cửa sổ OpenGLCtrl khung View (tham số thứ 2) danh (ID) cửa sổ OpenGLCtrl 100 (tham số thứ 3)  m_openGL.SetScaleWithClient(); //đặt tỉ lệ vẽ theo kích thước OpenGLCtrl  m_openGL.SetMouseStyleDone(CMouseEvent::MOUSE_ROTATE); // Đặt thao tác chuột trái mặc định ban đầu quay mơ hình 52 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Công cụ hỗ trợ mô 3D  105 5.2 Sử dụng thư viện OpenGLCtrl  5.2.3 Sử dụng đối tượng COpenGLCtrl  Đặt lại kích thước khung OpenGLCtrl theo khung View:  Thêm hàm xử lý kiện OnSize(UINT nType, int cx, int cy)  Thêm lệnh sau vào cuối hàm kiện này:  CRect rect;  GetClientRect(rect); //lấy kích thước khung View để cài đặt cho OpenGLCtrl  m_openGL.MoveWindow(rect); // đặt lại kích thước vị trí khung OpenGLCtrl theo kích thước khung View thời Kỹ thuật lập trình mô Rô bốt hệ điện tử Công cụ hỗ trợ mô 3D  106 5.2 Sử dụng thư viện OpenGLCtrl  5.2.4 Sử dụng danh sách hiển thị đọc tệp tin mơ hình STL  Trong lớp CMyOpenGLCtrl, tạo thêm biến (Số lượng biến tùy thuộc số danh sách hiển thị):   STRUCT_OBJECTGLLIST m_objectDraw; Tạo hàm LoadModel để thực đọc vẽ mơ hình từ tệp tin STL vào danh sách hiển thị:             void CMyOpenGLCtrl::LoadModel(const CString &sfilename) { STLfile stlfile; //khai báo biến quản lý đọc tệp tin STL stlfile.ReadBinary(sfilename); //thực đọc tệp tin nhị phân m_objectDraw.m_Max = stlfile.Max; m_objectDraw.m_Min = stlfile.Min; MakeCurrent(); //đặt môi trường OpenGL thành hành để thực vẽ m_objectDraw.BeginNewList(); //bắt đầu danh sách hiển thị glPushMatrix(); stlfile.Draw(); //vẽ mơ hình vào danh sách hiển thị glPopMatrix(); m objectDraw EndNewList(); //kết thúc danh sách 53 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Công cụ hỗ trợ mô 3D  107 5.2 Sử dụng thư viện OpenGLCtrl  5.2.4 Sử dụng danh sách hiển thị đọc tệp tin mô hình STL  Gọi mơ hình vẽ danh sách hiển thị vào hàm DrawInOpenGL() lớp CMyOpenGLCtrl:  void CMyOpenGLCtrl::DrawInOpenGL()  {  //Một số lệnh đặt tham số môi trường vẽ  glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);  glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);  glShadeModel(GL_SMOOTH);  glEnable(GL_NORMALIZE);   //Thực gọi vẽ mơ hình từ danh sách hiển thị  double scale=10.0/m_objectDraw.GetSizeX();  glPushMatrix();  glScalef(scale,scale,scale); khung OpenGL  hiển thị  // đặt tỉ lệ mơ hình cho vừa m_objectDraw.Draw(); // vẽ mơ hình danh sách glPopMatrix(); Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Công cụ hỗ trợ mô 3D  108 5.2 Sử dụng thư viện OpenGLCtrl  5.2.4 Đặt vật liệu chiếu sáng   Trong thư viện OpenGLCtrl, vật liệu chiếu sáng đóng gói vào cấu trúc  GL_MATERIAL  GL_LIGHT Mỗi đối tượng vẽ với STRUCT_OBJECTGLLIST có định nghĩa sẵn biến thành viên quản lý vật liệu với tên biến STRUCT_OBJECTGLLIST ::m_glMaterial  Các cấu trúc có số giá trị gán mặc định gọi thông qua phương thức:  ::SetStyleDefault(int style); //đặt tham số lựa chọn giá trị mặc định  ::Default(); //đặt giá trị mặc định 54 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Công cụ hỗ trợ mô 3D  109 5.3 Sử dụng thư viện OpenGLSetting  5.3.1 Nhiệm vụ thư viện  Đặt vật liệu chiếu sáng với nhiều tham số rắc rối, đặc biệt phải thiết đặt chúng cách thủ công  Thư viện OpenGLSetting cho phép thiết đặt tham số vật liệu ánh sáng thông qua giao diện hộp thoại cách tường minh  Trong thư viện định nghĩa sẵn hộp thoại:  CDlgSettingLight - Hộp thoại thiết đặt tham số ánh sáng  CDlgSettingMaterial - Hộp thoại thiết đặt tham số vật liệu Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Công cụ hỗ trợ mô 3D  110 5.3 Sử dụng thư viện OpenGLSetting  5.3.2 Đưa thư viện vào đề án  Copy thư mục “OpenGLSetting” vào thư mục project tạo  Đưa file“OpenGLSetting\bin\OpenGLSetting.lib”hoặc“OpenGLSettingd lib” (tùy theo chế độ biên dịch đề án) vào đề án chức “Add Files to Project …”  Trong file “stdafx.h” thêm dòng sau    #include “OpenGLSetting/Inc/OpenGLSetting.h“ Khai báo sử dụng hộp thoại thiết đặt ánh sáng:  CDlgSettingLight dlg;  dlg.SetData(m_glLight, &m_openGL);  dlg.DoModal(); Sử dụng hộp thoại đặt vật liệu CDlgSettingMaterial tương tự 55 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Công cụ hỗ trợ mô 3D  111 5.4 Thực mô chuyển động  Sử dụng kiện thời gian  Tạo chức Run() khởi tạo kiện thời gian  SetTimer(ID_TIMER_DEMO,100,0) //tham số: Chỉ danh kiện, khoảng trễ (ms), trỏ hàm xử lý kiện (mặc định đặt dùng hàm OnTimer() mặc định)  Tạo chức Stop() hủy bỏ kiện thời gian    KillTimer(ID_TIMER_DEMO); Thêm hàm xử lý kiện OnTimer(UINT nIDEvent), với tham số danh kiện thời gian gọi đến hàm (thường dùng chương trình có nhiều kiện thời gian) Trong hàm OnTimer() thêm tính tốn di chuyển mơ hình 3D cập nhật việc hiển thị mơ hình:  … //Thực tính tốn di chuyển vị trí mơ hình 3D  m_openGL.Invalidate(FALSE); //cập nhật hiển thị Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Ví dụ - Chương trình RobotDemo  112 6.1 Giới thiệu chương trình  Giao diện chính: 56 3/20/2015 Kỹ thuật lập trình mơ Rô bốt hệ điện tử Ví dụ - Chương trình RobotDemo  113 6.1 Giới thiệu chương trình  Đồ thị kết tính: Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Ví dụ - Chương trình RobotDemo  114 6.2 Các lớp chương trình  Các lớp tạo MFC:   AboutDlg CRobotDemoApp CMainFrame CRobotDemoDoc CRobotDemoView 57 3/20/2015 Kỹ thuật lập trình mô Rô bốt hệ điện tử Ví dụ - Chương trình RobotDemo  115 6.2 Các lớp chương trình  Các lớp tạo MFC:    AboutDlg CRobotDemoApp CMainFrame CRobotDemoDoc CRobotDemoView Các lớp tạo   CDlgGraphs - Hộp thoại hiển thị kết dạng đồ thị CDlgGraphTrajectory - Lớp hộp thoại kế thừa từ CDlgGraphs, hiển thị đồ thị quỹ đạo X, Y Z theo thời gian  CDlgResultTable - Hộp thoại hiển thị kết dạng bảng số  CDlgSelectElement - Hộp thoại lựa chọn khâu để đặt vật liệu  CElement - Lớp quản lý khâu  CModel - Lớp quản lý mơ hình rơ bốt   COpenGLCtrlDemo - Lớp kế thừa từ COpenGLCtrl, thực quản lý việc vẽ mơ hình Rơ bốt OpenGL CTrajectory - Lớp quản lý quỹ đạo nhập vào ban đầu Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Ví dụ - Chương trình RobotDemo  116 6.3 Lớp CElement  Lớp có nhiệm vụ quản lý khâu, bao gồm mơ hình 3D (m_glList), kích thước chiều dài khâu (m_l), tọa độ gốc khâu (m_OrgPosition), góc xoay khâu (m_angle) 58 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Ví dụ - Chương trình RobotDemo  117 6.4 Lớp CModel  Lớp có nhiệm vụ quản lý tồn mơ hình Rơ bốt bao gồm khâu (m_listElement), quỹ đạo (m_trajectory), biến khớp (m_parameter), … Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Ví dụ - Chương trình RobotDemo  118 6.5 Một số điểm cần sửa đổi cho mơ hình Rơ bốt  Cập nhật tệp tin STL cho mơ hình Rơ bốt mới, khâu đặt file với cú pháp:  elementX.STL  Với X số thứ tự khâu, khâu khâu đế  Chú ý khai báo file “OpenGLCtrlDemo.cpp”:   SUBDIRECTORY_MODEL_FILE  EXTENT_MODEL_FILE Mơ hình Rơ bốt tải vào hàm COpenGLCtrlDemo:: CreateModel() gọi đến CRobotDemoView::OnCreate() Element2.STL Element1.STL Element3.STL Element0.STL 59 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Ví dụ - Chương trình RobotDemo  119 6.5 Một số điểm cần sửa đổi cho mơ hình Rơ bốt  Đặt lại kích thước khâu hàm:  void CModel::SetModelSize()  {  m_listElement[0].m_l=500;  m_listElement[0].m_theta=90;  m_listElement[1].m_l=500;  m_listElement[2].m_l=500;  m_listElement[3].m_l=100;  m_listElement[3].m_theta=-90;  z P }  x  y Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Ví dụ - Chương trình RobotDemo  120 6.5 Một số điểm cần sửa đổi cho mơ hình Rơ bốt  Đặt lại tham số vị trí khâu hàm:  Đặt lại góc xoay vị trí khâu mơ hình cho bước chạy thứ m_idStep hàm CModel::RunNext()  void CModel::RunNext()  {   m_listElement[1].m_Angle[2]=m_parameter[0][m_idStep];  m_listElement[2].m_Angle[2]=m_parameter[1][m_idStep]+m_parameter[0][m_ idStep];  m_listElement[3].m_Translate[2]=m_parameter[2][m_idStep];  UpdatePosition();  } 60 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Ví dụ - Chương trình RobotDemo  121 6.5 Một số điểm cần sửa đổi cho mơ hình Rơ bốt  Đặt lại tham số vị trí khâu hàm:  Đặt lại việc gán giá trị biến khớp CModel::Solve()  void CModel::Solve()  {  …  x[0]=(m_listElement[1].m_Angle[2]-0.1)/scaleDegRad;  x[1]=(m_listElement[2].m_Angle[2]+0.1)/scaleDegRad;  x[2]=m_listElement[3].m_Translate[2]-0.1;  …  …  m_idStep=preIdStep;  } Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Ví dụ - Chương trình RobotDemo  122 6.5 Một số điểm cần sửa đổi cho mơ hình Rơ bốt  Đặt lại tham số vị trí khâu hàm:  Đặt lại việc gán giá trị biến khớp CModel::Solve()                     void CModel::Solve() { … for (i=0;iPI) x(0)-=2*PI; if (x(1)>PI) x(1)-=2*PI; m_parameter[0].Add(x(0)*scaleDegRad); m_parameter[1].Add(x(1)*scaleDegRad); m_parameter[2].Add(m_listElement[3].m_l-x[2]); } … … 61 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Ví dụ - Chương trình RobotDemo  123 6.5 Một số điểm cần sửa đổi cho mơ hình Rô bốt  Đặt lại tham số vị trí khâu hàm:  Đặt lại việc gán giá trị biến khớp CModel::Solve() … //Giai bai toan van toc GetMatrixVelocity(ma,vb,i); if (Gauss_Jordan(ma,vb,vt)==0) { m_velocity[0].Add(vt(0)*scaleDegRad); m_velocity[1].Add(vt(1)*scaleDegRad); m_velocity[2].Add(vt(2)); }          //Giai bai toan gia toc GetMatrixAcceleration(ma,vb,i); if (Gauss_Jordan(ma,vb,at)==0) { m_acceleration[0].Add(at(0)*scaleDegRad); m_acceleration[1].Add(at(1)*scaleDegRad); m_acceleration[2].Add(at(2)); }            } } m_idStep=preIdStep; Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Ví dụ - Chương trình RobotDemo  124 6.5 Một số điểm cần sửa đổi cho mô hình Rơ bốt  Sửa lại giá trị phần tử ma trận phương trình vị trí, vận tốc gia tốc hàm:    void CModel::Func(smatrix & a,vector & c,const vector & x) void CModel::GetMatrixVelocity(smatrix &m, vector &c, const int & idStep) void CModel::GetMatrixAcceleration(smatrix &m, vector &c, const int &idStep) 62 ...3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Các phép biến hình  1.2 Phép tỉ lệ y Q’ Q P’ P  P’Q’ = m.PQ x z P’ P Q’ Q y x Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Các phép biến hình  1.3 Phép... thuật lập trình mơ Rơ bốt hệ điện tử Các phép biến hình  1.4 Phép quay z P’x Quanh trục X   P y x z Quanh trục Y  P  P’y y x Kỹ thuật lập trình mơ Rô bốt hệ điện tử Các phép biến hình  1.5... x 3/20/2015 Kỹ thuật lập trình mơ Rơ bốt hệ điện tử Các phép biến hình  1.5 Kết hợp phép biến hình z x y STL Kỹ thuật lập trình mơ Rô bốt hệ điện tử Các phép biến hình  z z , z2 1.5 Kết hợp

Ngày đăng: 02/03/2023, 14:14

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

TÀI LIỆU LIÊN QUAN

w