Bài giảng Lập trình mô phỏng robot và hệ cơ điện tử ME4291: Bài 3 - PGS. Phan Bùi Khôi, TS. Phan Mạnh Dần

Chia sẻ: Trần Trọng Đức Đức | Ngày: | Loại File: PDF | Số trang:51

0
76
lượt xem
26
download

Bài giảng Lập trình mô phỏng robot và hệ cơ điện tử ME4291: Bài 3 - PGS. Phan Bùi Khôi, TS. Phan Mạnh Dần

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài 3 - Mô phỏng chuyển động của robot với OpenGL. Trong bài này, các kỹ thuật sau sẽ được giới thiệu: Đọc và hiển thị các tệp STL (được xuất ra từ AutoCAD, Solidworks...); sử dụng ma trận đồng nhất để hiển thị vị trí các đối tượng hình học trong không gian 3 chiều; mô phỏng chuyển động của robot bằng OpenGL.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình mô phỏng robot và hệ cơ điện tử ME4291: Bài 3 - PGS. Phan Bùi Khôi, TS. Phan Mạnh Dần

  1. BÀI 3 MÔ PHỎNG CHUYỂN ĐỘNG CỦA ROBOT VỚI OPENGL 1
  2. Tóm tắt Trong bài này, các kỹ thuật sau sẽ được giới thiệu – Đọc và hiển thị các tệp STL (được xuất ra từ AutoCAD, Solidworks…) – Sử dụng ma trận đồng nhất để hiển thị vị trí các đối tượng hình học trong không gian 3 chiều – Mô phỏng chuyển động của robot bằng OpenGL 2
  3. Nội dung • Cấu trúc file ASCII STL 1. Đọc và hiển thị • Lớp CSTL_File các tệp STL • Hiển thị đối tượng trong tệp STL 2. Sử dụng ma trận • Mô hình hệ mặt trời-trái đất-mặt trăng đồng nhất trong • Ma trận chuyển vị đồng nhất mô phỏng • Sử dụng các phép dịch chuyển đơn lẻ 3. Mô phỏng • Các bước thực hiện chuyển động của • Minh họa: Mô phỏng cơ cấu 4 khâu robot bằng OpenGL • Bài tập: Mô phỏng robot Scorbot 3
  4. Cấu trúc file ASCII STL solid AutoCAD facet normal 1.0000000e+000 facet normal 0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000 1.0000000e+000 outer loop outer loop vertex 1.0000010e+000 vertex 1.0000010e+000 1.0000000e-006 1.0000000e-006 1.0000010e+000 1.0000010e+000 vertex 1.0000010e+000 vertex 1.0000000e-006 1.0000010e+000 1.0000000e-006 1.0000010e+000 1.0000010e+000 vertex 1.0000010e+000 vertex 1.0000010e+000 1.0000010e+000 1.0000010e+000 1.0000000e-006 1.0000010e+000 endloop endloop endfacet endfacet endsolid AutoCAD … 4
  5. Cấu trúc file STL Dạng văn bản Dạng nhị phân • solid name • UINT8[80] – Tiêu đề • Danh sách tam giác • UINT32 – Số tam giác – facet normal ni nj nk • Danh sách tam giác – outer loop – REAL32[3] – véc-tơ pháp • vertex v1x v1y v1z – REAL32[3] – Đỉnh 1 • vertex v2x v2y v2z – REAL32[3] – Đỉnh 2 • vertex v3x v3y v3z – REAL32[3] – Đỉnh 3 • endloop – UINT16 – Thuộc tính – endfacet • endsolid name 5
  6. Lớp CSTL_File • Là một lớp đối tượng C++ dùng để thao tác các tệp STL • Lấy từ project AMF tại http://amff.wikispaces.com/STL+to+AMF+converter • Các thao tác chính – Đọc file STL (nhị phân & văn bản) vào bộ nhớ – Tính toán hình hộp bao – Vẽ đối tượng bằng các lệnh OpenGL 6
  7. Lớp CSTL_File class CSTL_File int Size() const; { bool Load(std::string public: filename); CSTL_File(void); bool LoadBinary(std::string ~CSTL_File(void); filename); bool Save(std::string bool LoadAscii(std::string filename, bool Binary = true) filename); const; void Draw(bool void ComputeBoundingBox bModelhNormals, bool (Vec3D& pmin, Vec3D& pmax); bShaded); }; 7
  8. Lớp CSTL_File • Đọc tệp STL vào bộ nhớ • Vẽ đối tượng bằng bool Load(std::string OpenGL filename); void Draw(bool bool LoadBinary(std::string bModelhNormals, bool filename); bShaded); bool LoadAscii(std::string filename); bModelhNormals = true: • Tìm hình hộp chứa trọn vẽ véc-tơ pháp vật thể bShaded = true: vẽ mặt ComputeBoundingBox trơn thay vì khung dây (Vec3D& pmin, Vec3D& pmax); 8
  9. Sử dụng Lớp CSTL_File để hiển thị đối tượng trong tệp STL 1. Copy 3 file Vec3D.h, STL_File.h và STL_File.cpp vào thư mục project 2. Thêm 3 file Vec3D.h, STL_File.h và STL_File.cpp vào project 3. Thêm dòng #include "STL_File.h" ở đầu chương trình 4. Thêm dòng CSTL_File stl; để khai báo biến stl 5. Thêm dòng stl.Load(“sphere.stl”); vào trong hàm InitGraphics() để đọc tệp sphere.stl 6. Thêm hàm stl.Draw(false, false); để vẽ đối tượng 9
  10. Kết quả 10
  11. Dùng lớp CSTL_File vẽ nhiều đối tượng • Nếu có nhiều đối tượng trong các tệp STL khác nhau cần vẽ thì cần khai báo thêm các biến: – CSTL_File stl1, stl2, stl3; hoặc – CSTL_File stl[3]; 11
  12. Tọa độ âm trong file STL • Theo mặc định, các phần mềm CAD không cho phép xuất ra các tọa độ âm trong file STL. Điều này là để tạo ra các file STL tương thích với các máy in khắc hình (stereolithography). • Nếu phát hiện tọa độ âm, phần mềm sẽ tự động tịnh tiến đối tượng để đảm bảo tọa độ xuất ra không âm. Điều này làm cho việc định vị đối tượng trong chương trình OpenGL có thể bị sai lệch. • Một giải pháp là trong phần mềm CAD, dịch các đối tượng sao cho tọa độ dương, ghi nhận véc-tơ dịch chuyển, rồi trong chương trình OpenGL sử dụng lớp CSTL_File, truyền thêm tham số véc-tơ này cho hàm Load() stl.Load(“sphere.stl”, Vec3D(100, 20, 50)); 12
  13. Câu hỏi?
  14. Nội dung • Cấu trúc file ASCII STL 1. Đọc và hiển thị • Lớp CSTL_File các tệp STL • Sử dụng lớp CSTL_File 2. Sử dụng ma trận • Mô hình hệ mặt trời-trái đất-mặt trăng đồng nhất trong • Ma trận chuyển vị đồng nhất mô phỏng • Sử dụng các phép dịch chuyển đơn lẻ 3. Mô phỏng • Các bước thực hiện chuyển động của • Minh họa: Mô phỏng cơ cấu 4 khâu robot bằng OpenGL • Bài tập: Mô phỏng robot Scorbot 14
  15. Mô hình hệ mặt trời-trái đất-mặt trăng 15
  16. Làm thế nào?
  17. Sử dụng ma trận chuyển vị đồng nhất 17
  18. Sử dụng ma trận chuyển vị đồng nhất 4x4 • Vẽ mặt trời glMultMatrixf( mSunMatrix.m ); glColor4f( 1.0f, 1.0f, 0.0f, 1.0f ); renderWireSphere( 1.0f, 20, 20 ); • Vẽ trái đất glMultMatrixf( mEarthMatrix.m ); glColor4f( 0.0f, 0.0f, 1.0f, 1.0f ); renderWireSphere( 1.0f, 10, 10 ); 18
  19. Vẽ mặt trời matrix4x4f mSunMatrix; mSunMatrix.rotate_y ( fSunSpin ); glPushMatrix(); { glMultMatrixf( mSunMatrix.m ); glColor4f( 1.0f, 1.0f, 0.0f, 1.0f ); renderWireSphere( 1.0f, 20, 20 ); } glPopMatrix(); 19
  20. Vẽ trái đất matrix4x4f mEarthMatrix = mEarthTranslationToOrbit; mEarthOrbitRotation * matrix4x4f mEarthSpinRotation; mEarthTranslationToOrbit * matrix4x4f mEarthOrbitRotation; mEarthSpinRotation; matrix4x4f mEarthMatrix; glPushMatrix(); mEarthSpinRotation.rotate_y( { fEarthSpin ); glMultMatrixf( mEarthMatrix.m ); mEarthTranslationToOrbit.translate( glColor4f( 0.0f, 0.0f, 1.0f, 1.0f ); vector3f(0.0f, 0.0f, -12.0f) ); renderWireSphere( 1.0f, 10, 10 ); } mEarthOrbitRotation.rotate_y( glPopMatrix(); fEarthOrbit ); 20

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản