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éctơ 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éctơ này cho hàm Load() • stl.Load(“cylinder.stl”, Vec3D(1, 1.5, 0));
Trang 1BÀI 4
MÔ PHỎNG CHUYỂN ĐỘNG CỦA
ROBOT VỚI OPENGL
Ths Nguyễn Xuân Hồng
Trang 2Sơ đồ quy trình mô phỏng
Vẽ mô hình 3D Inventor
Visual C++
OpenGL DirectX
Thư viện đồ họa
Kích thước, hình ảnh, sơ đồ,…
Data files
STL files
Bắt đầu
Export Import
Load Solve
Connect
Add-in
Robot Simulator Programming
Dimensions
1 2
3
4
4 4
5 6
A
Trang 3MỤC TIÊU
Có hiểu biết cơ bản về quy trình mô phỏng chuyển động.
Nắm được các kỹ thuật trong mô phỏng chuyển động Robot.
Xây dựng được chương trình mô phỏng chuyển động Robot.
Trang 42
3
Quy trình mô phỏng chuyển động Robot
File mô tả mô hình 3d
STL
Xây dựng chương trình
mô phỏng Robot NỘI DUNG
Trang 52
3
Quy trình mô phỏng chuyển động Robot
File mô tả mô hình 3d
STL
Xây dựng chương trình
mô phỏng Robot
NỘI DUNG
Trang 6Quy trình mô phỏng chuyển động Robot
Export
Read Write
Trang 72
3
Quy trình mô phỏng chuyển động Robot
File mô tả mô hình 3d
STL
Xây dựng chương trình
mô phỏng Robot
NỘI DUNG
Trang 8• UINT32 – Số tam giác
• Danh sách tam giác
Trang 9Cấu trúc file ASCII STL
endfacet
… facet normal 0.0000000e+000 -0.0000000e+000 1.0000000e+000 outer loop
vertex 9.6074598e-002 4.0245494e+000 2.0000001e+001 vertex 9.9039274e+000 4.0245494e+000 2.0000001e+001 vertex 1.0000000e-006 5.0000010e+000 2.0000001e+001
Trang 10Xuất mô hình 3D ra file STL trong AutoCad
Sử dụng command STLOUT
Trang 11Xuất mô hình 3D ra file STL trong SolidWorks
Sử dụng chức năng SaveAs chọn STL
Trang 12Sử dụng 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ừ forum của lớp
Trang 13Nội dung lớp CSTL_File
bool Save ( std :: string filename , bool Binary = true ) const ;
void ComputeBoundingBox ( Vec3D & pmin , Vec3D & pmax );
int Size () const ;
bool Load ( std :: string filename );
bool LoadBinary ( std :: string filename );
bool LoadAscii ( std :: string filename );
void Draw ( bool bModelhNormals , bool bShaded );
Trang 14Nội dung lớp CSTL_File
• Đọc tệp STL vào bộ nhớ
bool Load ( std :: string filename);
• Tìm hình hộp chứa trọn vật thể
void ComputeBoundingBox ( Vec3D & pmin, Vec3D &
pmax);
• Vẽ đối tượng bằng OpenGL
void Draw ( bool bModelhNormals, bool bShaded);
- bModelhNormals = true: vẽ véc-tơ pháp
- bShaded = true: vẽ mặt trơn thay vì khung dây
Trang 15Sử 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 của 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(“cylinder.stl”); vào trong hàm
InitGraphics() để đọc tệp cylinder.stl
6 Thêm hàm stl.Draw(false, false); để vẽ đối tượng trong
hàm DrawGraphics()
Trang 16Minh họa sử dụng lớp CSTL_File
Trang 17Kết quả dùng lớp CSTL_File để hiển thị khối Cylinder
Trang 18Dù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:
Trang 19Tọ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(“cylinder.stl”, Vec3D(1, 1.5, 0));
Trang 20Dịch chuyển đối tượng về tọa độ âm
Trang 212
3
Quy trình mô phỏng chuyển động Robot
File mô tả mô hình 3d
STL
Xây dựng chương trình
mô phỏng Robot NỘI DUNG
Trang 22Xây dựng chương trình mô phỏng Robot
Trang 23Xây dựng chương trình mô phỏng Robot
Trang 24Tạo project MFC Application
Khởi động Visual Studio C++ (Visual Studio 2012)
Vào File/New Project/MFC Application.
Đặt tên cho Project là Bai 4.2 RobotSimulator
Trang 25Chọn loại ứng dụng MFC
Chọn tùy chỉnh cho Project là Single Document và MFC
Standard Rồi chọn Finish
Trang 26Xây dựng chương trình mô phỏng Robot
Trang 27Thêm một số lớp hỗ trợ OpenGL vào project
Tạo một Filter OpenGL trong project
Thêm các tệp:
OpenGLInit.h & OpenGLInit.cpp: Chứa lớp khởi tạo OpenGL
Color.h & Color.cpp: Chứa lớp biểu diễn màu sắc
Light.h & Light.cpp: Chứa lớp quản lý ánh sáng
Material.h & Material.cpp: Chứa lớp quản lý vật liệu
Vec3D.h: Chứa các lớp tiện ích về vector 3D
Trang 28Lớp biểu diễn màu sắc: CColor
Biểu diễn 3 thuộc tính màu cơ bản là: Red, Green, Blue và
thuộc tính Alpha
Hàm setData để set các giá trị màu: red, green, blue, alpha
Hàm getData trả ra con trỏ trỏ vào màng giá trị màu
Trang 29Lớp quản lý ánh sáng: CLight
Gồm hàm InitLight để khởi tạo các tham số của nguồn sáng
Khởi tạo chế độ chiếu sáng và khởi tạo nguồn sáng thứ nhất
Trang 30Lớp quản lý vật liệu: CMaterial
Lớp chứa các tham số màu sắc vật liệu
Khởi tạo chế độ chiếu sáng và khởi tạo nguồn sáng thứ nhất
Trang 31Chỉnh sửa lớp View để gọi mã OpenGL
Thêm Include tới file OpenGLInit.h
Khai báo biến thuộc lớp COpenGLInit trong lớp View
Thêm các hàm xử lý các sự kiện và gọi mã opengl tương ứng:
Chỉnh sửa nội dung hàm PreCreateWindow
Thêm hàm xử lý sự kiện OnCreate
Thêm hàm xử lý sự kiện OnSize
Thêm hàm xử lý sự kiện OnEraseBkgnd
Chỉnh sửa nội dung hàm OnDraw
Thêm hàm xử lý sự kiện OnTimer
Thêm hàm xử lý sự kiện OnDestroy
Trang 32Xây dựng chương trình mô phỏng Robot
Trang 33Thêm lớp đọc file STL vào project
Thêm các tệp:
STL_File.h & STL_File.cpp: Chứa lớp đọc file STL
Vector4D.h: Chứa các lớp tiện ích về vector 4D, matrix 4D
Trang 34Xây dựng chương trình mô phỏng Robot
Trang 35Lớp quản lý thông tin mô hình CModel
Lớp mô tả thông tin thuộc tính của một khâu
Thuộc tính
CSTL_File m_stl; Biến lưu trữ dữ liệu đọc từ file STL
Cmaterial m_Material; Thông tin material của model
String m_filename; Đường dẫn file STL
Phương thức
setModel: Tạo model từ file STL
drawObject: Vẽ đối tượng vào OpenGL
Trang 36Lớp quản lý thông tin Robot: CRobot
Lớp mô tả thông tin thuộc tính của Robot
InitData: Khởi tạo dữ liệu Robot
ReadData: Nạp dữ liệu từ file
CalculateData: Nạp dữ liệu từ tính toán
Trang 37Thêm lớp CModel, CRobot vào project
Tạo Filter Robot
Thêm các file Model.h, Model.cpp, Robot.h, Robot.cpp
Thêm biến lớp CRobot vào lớp COpenGLInit
Thêm code InitRobot vào hàm OnCreate
Thêm code Draw Robot vào hàm OnDraw
Trang 38Khởi tạo thông tin robot
Khởi tạo trong hàm InitData
Nạp kích thước các khâu của robot d i
Nạp giá trị đầu của các biến khớp q i
Cài đặt dữ liệu các khâu từ các file STL
Cài đặt scale cho các khâu từ scale của robot
Trang 39Vẽ robot
Vẽ lần lượt từng khâu của robot từ khấu đế, khâu 1, khâu 2, khâu 3
Gọi hàm drawObject để vẽ khâu tương ứng
Trang 40Các phép biến đổi tọa độ trong OpenGL
OpenGL cho phép thực hiện các phép biến đổi tọa độ thông qua
các hàm
Trang 41Xây dựng chương trình mô phỏng Robot
Trang 42Đọc dữ liệu từ file text
Thêm mục Read Data vào menu chính của chương trình
Thực hiện việc chọn file dữ liệu
Gọi hàm ReadData của lớp robot
Trang 43Xây dựng chương trình mô phỏng Robot
Trang 44Tính toán các biến khớp theo công thức
Với các mô hình robot đơn giản, số bậc tự do nhỏ thì có thể tính toán
các các giá trị của biến khớp trực tiếp từ các công thức toán học
Trang 45Quy trình mô phỏng chuyển động Robot
Robot Simulator
Trang 46Chương trình mô phỏng chuyển động Robot