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

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

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

Thông tin cơ bản

Tiêu đề Bài giảng Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử
Tác giả Vũ Lê Huy
Người hướng dẫn TS. Vũ Lê Huy
Trường học Trường Đại học Bách Khoa Hà Nội
Chuyên ngành Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử
Thể loại Bài giảng
Năm xuất bản 2015
Thành phố Hà Nội
Định dạng
Số trang 62
Dung lượng 1,81 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

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);

Trang 1

Kỹ thuật lập trình mô phỏng Rô bốt

và các hệ cơ điện tử

Giảng viên: TS Vũ Lê Huy

Đơn vị công tác: Bộ môn cơ sở thiết kế máy và Rôbốt, Viện Cơ khí

Trang 3

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

Trang 5

Bài toán vị trí: Tìm các giá trị góc của các khâu 2 và 3 tùy

theo vị trí của khâu 1 với giá trị 1  giải hệ phương trình phi

sin(

) sin(

) sin(

.

0 )

cos(

) cos(

) cos(

.

2 3 3 2 2 1 1

1 3 3 2 2 1 1

d l

l l

d l

l l

Trang 6

 2.1 Động học Cơ cấu 4 khâu

n

n n

x

x

f x

f x f

x

f x

f x f

x

f x

f x f

2 2

2 1 2

1 2

1 1 1

Đặ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), sẽ thu được giá trị của ẩn sau bước lặp thứ k :

x(k+1)= x(k)+ x(k)

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 Bài toán vận tốc: lấy đạo hàm theo thời gian đối với phương trình

).

cos(

).

cos(

.

) sin(

).

sin(

).

sin(

.

1 1 1 3 3 3 2 2 2

1 1 1 3 3 3 2 2 2

l

l l

.a

-l

) ( w w )-l ( w w l ) ( w w l ) (

.a

l

a

a ) ( ) (

.

) ( ) (

.

3 sin 3 3 3 2 sin 2 2 2 1 sin 1 1 1 1 cos

1

1

3 cos 3 3 3 2 cos 2 2 2 1 cos 1 1 1 1 sin

1

1

3

2 2

3 2

3 3 2

3 2

cos cos

sin sin

Trang 7

 2.2 Động học Rô bốt

 Thiết lập bộ thông số Denavit-Hartenbeg :

Dao phay

• Trục znđược liên kết với trục của khớp

thứ n+1 Chiều của znđược chọn tuỳ ý.

•Trục xn được xác định là đường vuông

góc chung giữa trục khớp n và khớp n+1 , hướng từ điểm trục của khớp tới

khớp n+1.

•Trục yn được xác định theo xn và zn

theo quy tắc bàn tay phải.

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 Thiết lập bộ thông số Denavit-Hartenbeg :

Dao phay

Trang 8

cossin

0

sincos

sincoscossin

cossin

sinsincoscos

1

n n

n

n n n n i

n n

n n n n n n n

n n

d a a A

Trang 9

10

0

001

0

000

1

1 1

0

d A

0000

00cossin

0sincos

2 2

2 2 2

0000

00cossin

0sincos

3 3

3 3 3

0 0

0 0

0

) cos(

sin 0 ) cos(

) sin(

) cos(

cos 0 ) sin(

) cos(

.

1

3 2 3 2 2 3

2 3

2

3 2 3 2 2 3

2 3

2

4

0

3 2 2

a a

A

A A

 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 được các biến khớp

 Giải bài toán vận tốc, gia tốc, …

Trang 10

 2.3 Bài tập 1: lập ma trận chuyển cho các mô hình

+ Khởi động chương trình : hàm WinMain() thực hiện mọi khởi tạo và thiết

lập các cửa sổ giao diện

+ Xử lý thông điệp : hàm WinProc() được Window gọi tới để xử lý toàn bộ

các thông điệp đang xếp hàng trong hàng đợi của hệ thống được gửi đến chương

trình => thực hiện vòng lặp xử lý các thông điệp (đây là một vòng lặp rất lớn)

Trang 11

 3.1 Khái niệm

 Nguyên lý cơ bản của lập trình Window là cơ sở xử lý thông điệp.

Tuy nhiên để lập chương trình bằng các hàm API là vô cùng phức tạp và rất khó

quản lý

 MFC = Microsoft Foundation Class (lớp nền tảng của Microsoft) : là tập hợp

các lớp định nghĩa sẵn, đóng gói các hàm API của Window theo một hệ thống

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

Trang 12

 3.2 Tạo đề án MFC trên Visual Studio

Bước 1 :

 Single Document (SDI : Single Document Interface): cho phép tạo ứng

dụng đơn tài liệu, tại mỗi thời điểm chương trình chỉ có thể mở một tài liệu

 Multi Documents (MDI : Multi Documents Interface): cho phép tạo ứng

dụng đa tài liệu, tại mỗi thời điểm chương trình có thể mở đồng thời nhiều tài liệu, mỗi

tài liệu được quản lý bởi một cửa sổ riêng nằm gọn trong cửa sổ chính của chương trình

 Dialog Based: tạo ứng dụng là một hộp thoại Đây là loại ứng dụng đơn giản nhất

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 3.2 Tạo đề án MFC trên Visual Studio

a/ Tạo đề án giao diện của chương trình kiểu Dialog Based

Bước 2

Bước 3

Trang 13

 3.2 Tạo đề án MFC trên Visual Studio

a/ Tạo đề án giao diện của chương trình kiểu Dialog Based

Bước 4

Bước 5: soạn thảo mã nguồn cho chương trình

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 3.2 Tạo đề án MFC trên Visual Studio

b/ Tạo đề án giao diện của chương trình kiểu Single Document

và Multi Document

Bước 2

Bước 3

Trang 14

 3.2 Tạo đề án MFC trên Visual Studio

b/ Tạo đề án giao diện của chương trình kiểu Single Document

 3.2 Tạo đề án MFC trên Visual Studio

b/ Tạo đề án giao diện của chương trình kiểu Single Document

và Multi Document

Bước 5

Bước 6

Trang 15

 3.2 Tạo đề án MFC trên Visual Studio

b/ Tạo đề án giao diện của chương trình kiểu Single Document

và Multi Document

Danh sách các lớp sẽ được tạo ra:

 CxxxView được kế thừa từ lớp quan sát, có thể là CView (mặc định), CEditView,

CFormView, đảm nhận công việc thể hiện tài liệu trong chương trình Được đặt

trong file “xxxView.h" và "xxxView.cpp".

 CxxxApp được kế thừa từ lớp CWndApp, đảm nhận công việc khởi tạo và quản lý

ứng dụng Được đặt trong file "xxx.h" và "xxx.cpp".

 CMainFrame được kế thừa từ lớp CFrameWnd nếu chương trình dạng Single

Document, còn nếu là Multi Document thì kế thừa từ lớp CMDIFrameWnd, là lớp quản

lý cửa sổ chính của chương trình Được đặt trong file "MainFrm.h" và "MainFrm.cpp".

 CxxxDocđược kế thừa từ lớp CDocument, quản lý tài liệu của chương trình Được

đặt trong file "xxxDoc.h" và "xxxDoc.cpp".

 Nếu chương trình là dạng MultiDocumentthì sẽ có thêm lớp CChildFrame kế

thừa từ lớp CMDIChildWnd, là lớp quản lý cửa sổ con ứng với mỗi tài liệu đang có.

Được đặt trong file "ChildFrm.h" và "ChildFrm.cpp".

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 3.3 Làm việc với Menu, ToolBar, Status

a/ Sửa đổi Menu và ToolBar có sẵn

 Mặc định ban đầu của MFC sẽ tạo ra cho bạn một menu và một thanh công cụ với ID

là IDR_MAINFRAME, đây sẽ là menu và thanh công cụ mặc định của chương trình và

gắn với cửa sổ ứng dụng chính và được khởi tạo bởi CMainFrame Menu và thanh công

cụ này mới chỉ có một số chức năng cơ bản có ở đa số các ứng dụng.

 Để bổ xung thêm chức năng mới của menu và thanh công cụ trên bạn nên dùng trình

soạn thảo Resource của Microsoft Visual Studio.

 Để tạo công việc xử lý sự kiện bạn cần tạo ra một hàm xử lý sự kiện và tạo ra ánh xạ

thông điệp để quy chiếu sự kiện tới hàm đó, công việc này có thể được thực hiện

nhanh chóng nhờ ClassWizard hoặc có thể kích chuột phải lên tên lớp (ở vùng

WorkSpace) rồi chọn "Add Windows Message Handler …"

Trang 16

 3.3 Làm việc với Menu, ToolBar

a/ Sửa đổi Menu và ToolBar có sẵn

 Trong file tiêu đề (.h) được bổ xung thêm dòng khai báo hàm thành

viên có dạng :

afx_msg ReVal memberFxn(ListParam);

 ReVallà giá trị trả về của hàm

 ListParamlà danh sách tham số, afx_msgchỉ rằng hàm này là một hàm xử lý

thông điệp.

 Trong file nguồn (.cpp) :

 Bổ xung thêm ánh xạ thông điệp vào giữa khu vực :

 BEGIN_MESSAGE_MAP()

 ……

 ……

 END_MESSAGE_MAP()

 Bổ xung triển khai của hàm thành viên đã được thêm khai báo trong

file tiêu đề (thường được đặt vào cuối cùng của file cpp).

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

b/ Thêm ToolBar mới

 Khai báo một thanh công cụ mới :

 CToolBar m_wndToolBar;

 Trong hàm :

 intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct)

Thêm các dòng lệnh sau để khởi tạo và gán biến trên với một thanh

công cụ đã tạo trong tài nguyên thông qua ID của nó:

 if(!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD|

WS_VISIBLE| CBRS_TOP | CBRS_GRIPPER| CBRS_TOOLTIPS|

CBRS_FLYBY| CBRS_SIZE_DYNAMIC) ||

 !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

 TRACE0("Failed to create toolbar\n");

 return-1; // fail to create

 ID của thanh công cụ là IDR_MAINFRAME , có thể thay ID khác.

Trang 17

 3.4 Vẽ trên Windows

 Để thực hiện công việc vẽ bạn cần có biến quản lý công việc vẽ

thuộc kiểu CDC hoặc CPaintDC, CClientDC, (đều kế thừa từ CDC),

lớp này cần được nhận được con trỏ của lớp điều khiển sẽ được vẽ

lên đó.

 CDC : Class of Device-Context, lớp ngữ cảnh thiết bị, để vẽ tất cả các

thứ đều thông qua các hàm thành viên của lớp này CDC cung cấp

các chức năng thao tác ngữ cảnh thiết bị, làm việc với các công cụ

vẽ, lựa chọn các đối tượng giao diện thiết bị đồ hoạ (GDI : Graphics

Device Interface), làm việc với mầu và bảng mầu.

 Vẽ trong cửa sổ của chương trình Dialog thông qua hàm OnPaint(),

còn với khung View thì thông qua hàm OnDraw(CDC *pDC).

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

Một số hàm vẽ của CDC :

 CPen quản lý các nét vẽ với kiểu đường, độ rộng và mầu vẽ.

 CBrush quản lý vùng tô với kiểu tô, mầu tô

 CFont quản lý kiểu chữ.

 Để chọn một kiểu bút và chổi tô mới cho CDC sử dụng hàm :

Trang 18

 3.4 Vẽ trên Windows

 Nếu sử dụng các đối tượng bút, chổi tô và font chữ được định nghĩa

sẵn trong Window:

với nIndex là một trong những giá trị:

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

dc DrawText ( "Draw Text : My HelloWorld program." ,- 1 , clientRect ,

DT_SINGLELINE | DT_CENTER | DT_VCENTER );

dc MoveTo ( 5 , 5 );

dc LineTo ( 100 , 100 );

}

Trang 19

 Phương pháp thứ hai là xây dựng đối tượng bút chưa truyền tham số rồi

gọi hàm thành phần CreatePen để khởi tạo bút :

 Chổi tô có 3 loại cơ bản: đồng nhất (solid), sọc (hatch) và mẫu (pattern)

 Chổi đồng mầu được lập chỉ với tham số giá trị mầu COLORREF :

 CBrush brush(RGB(255,0,0));

hoặc có thể thực hiện khai báo không truyền tham số và khởi tạo chổi tô

đồng mầu với hàm CreateSolidBrush :

 CBrush brush;

 brush.CreateSolidBrush(RGB(255,0,0));

 Chổi sọc được khởi tạo ngoài tham số giá trị mầu còn cần thêm tham số

xác định kiểu sọc :

 CBrush brush(HS_BDIAGONAL,RGB(255,0,0));

hoặc khởi tạo với hàm CreateSolidBrush :

Trang 20

 3.5 Tạo một chương trình vẽ đồ thị với thư viện sẵn có

 Tạo một project mới với kiểu Dialog Based.

 Copy thư mục “ToolInter” vào thư mục của project đã tạo.

 Đưa file “ToolInter\bin\ToolInter.lib” hoặc “…\ToolInterd.lib” (tùy theo

chế độ biên dịch của đề án) vào đề án bằng chức năng “Add Files to

Project …”

 Trong file “stdafx.h” thêm dòng sau

 #include "ToolInter/ToolInter.h“

(đặt sau dòng: #endif // _AFX_NO_AFXCMN_SUPPORT)

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 3.5 Tạo một chương trình vẽ đồ thị với thư viện sẵn có

A) Với khung giao diện CView:

 Trong file “xxxView.h” thêm biến cho lớp CxxxView

Trang 21

 3.5 Tạo một chương trình vẽ đồ thị với thư viện sẵn có

B) Với hộp thoại:

 Trên giao diện chỉnh sửa hộp thoại, thêm Static Text (kéo kích thước

của nó theo vùng muốn thể hiện đồ thị) và đổi ID của nó.

 Thêm khai báo biến cho đối tượng Static Text vừa tạo bằng chức

 m_graph.DrawTable();//vẽ bảng lưới của đồ thị

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 3.5 Tạo một chương trình vẽ đồ thị với thư viện sẵn có

 Thực hiện vẽ đồ thị:

 m_graph.DrawBackGround(RGB(255,255,255));//đặt mầu nền

 m_graph.DrawTable();//vẽ bảng lưới của đồ thị

 m_graph.SetScaleXY(1.0);//đặt tỉ lệ của trục Y theo trục X

 m_graph.SetScaleYX(1.0);//đặt tỉ lệ của trục X theo trục Y

 m_graph.SetGridStyle(PS_DOT); //đặt kiểu vẽ đường lưới

 m_graph.SetGridWidth(2); //đặt độ rộng đường lưới

 m_graph.SetGraphStyle(PS_DOT);//đặt kiểu vẽ đường đồ thị

 m_graph.SetGraphWidth(2); //đặt độ rộng đường đồ thị

Trang 22

 3.5 Tạo một chương trình vẽ đồ thị với thư viện sẵn có

 Thực hiện vẽ đồ thị:

 m_graph.SetColorGraph(RGB(255,0,255));//đặt mầu vẽ của đường

 //vẽ 1 đường cong theo tọa độ x và y

 const int n=10; double x[n],y[n];

 for (int i=0;i<n;i++) { x[i]=i/2.0;y[i]=1.0/(i+1.0);}

 Copy thư mục “PpsTools” vào thư mục của project đã tạo ở trên.

 Đưa file “PpsTools\bin\PpsTools.lib” hoặc “…\ PpsToolsd.lib” (tùy theo

chế độ biên dịch của đề án) vào đề án bằng chức năng “Add Files to

Project …”

 Trong file “stdafx.h” thêm dòng sau

 #include " PpsTools / PpsTools.h“

Trang 23

 }

Trang 26

 3.7 Giải hệ phương trình bằng phương pháp số

 Giải hệ phương trình đại số tuyến tính:

a.x = b

 int Gauss_Jordan(const smatrix & a, const vector & b, vector & x);

 int linear(const smatrix & a, const vector & b, vector & x);

 int Jacobi(const smatrix& a, const vector & b, vector & x, const double &

eps=1e-10, const int & Max=100);

 int Gauss_Seidel(const smatrix & a, const vector & b,vector & x, const

double & eps=1e-10, const int & Max=100);

 a : ma trận hệ số

 b : véc tơ vế phải

 x : chứa xấp sỉ đầu, đồng thời chứa kết quả giải bài toán

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 Giải hệ phương trình phi tuyến:

int Newton_Raphson(vector & x, functionNR & func, const

double & eps=1e-10, const int& Max=100);

 x là véc tơ chứa xấp xỉ đầu, đồng thời chứa kết quả bài toán

 func là tên hàm được định nghĩa theo cú pháp

void func(smatrix & a, vector & c, const vector & x)

 Hàm này có nhiệm vụ định nghĩa ma trận Jacobi Fx(x(k)) (chứa trong a)

và véc tơ –f(x(k)) (chứa trong b) ở bước lặp thứ k với giá trị x = x(k)

 Fx(x(k)).x(k)= –f(x(k)) (*)

x(k+1)= x(k)+ x(k)

Trang 27

 3.7 Giải hệ phương trình bằng phương pháp số

 Ví dụ giải hệ phương trình phi tuyến:

 void Func(smatrix & a,

 vector & c,const vector & x)

sin(

) sin(

)

sin(

.

0 )

cos(

) cos(

)

cos(

.

2 3 3 2 2 1

1

1 3 3 2 2 1

1

d l

l l

d l

l l

 Ví dụ giải hệ phương trình phi tuyến:

 double eps=0.001;

 int maxloop=300;

 int n=2;

 vector x(2);

 m_phi1 = …; //giá trị góc khâu 1

 x[0]=m_phi2; x[1]=m_phi3; //lấy xấp xỉ đầu=giá trị vị trí trước đó

sin(

) sin(

)

sin(

.

0 )

cos(

) cos(

)

cos(

.

2 3 3 2 2 1

1

1 3 3 2 2 1

1

d l

l l

d l

l l

Trang 28

 4.1 OpenGL là gì?

 OpenGL = Open Graphic Library

 Được phát triển đầu tiên bởi Silicon Graphic, Inc., là một giao

diện phần phần mềm hướng thủ tục theo chuẩn công nghiệp hỗ

trợ đồ họa 3 chiều.

 Cung cấp khoảng 120 tác vụ để vẽ các primitive trong nhiều

mode khác nhau.

 Là một giao diện phần mềm độc lập với phần cứng (hardware –

independent software interface) hộ trợ cho lập trình đồ họa.

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 OpenGL = Open Graphic Library

Trang 29

 4.1 OpenGL là gì?

 OpenGL = Open Graphic Library

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 OpenGL = Open Graphic Library

Trang 30

 4.1 OpenGL là gì?

 Để sử dụng các nội dung trên của OpenGL trong đề án chương

trình, thêm các dòng sau vào header file (nên đưa vào stdafx.h):

 #include <gl\gl.h>

 #include <gl\glu.h>

 #include <gl\glaux.h>

 #pragma comment(lib, "opengl32.lib")

 #pragma comment(lib, "glu32.lib")

 #pragma comment(lib, "glaux.lib")

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 4.2.1 Các kiểu dữ liệu

 OpenGL định nghĩa một số kiểu dữ liệu tương đương với các các kiểu

truyền thống của C

Kiểu dữ liệu Kiểu tương đương Kiểu dữ liệu Kiểu tương đương

Trang 31

 4.2 Vấn đề cơ bản của OpenGL

 4.2.2 Ngữ cảnh diễn tả

 Có 5 hàm "WGL" được cung cấp trong triển khai OpenGL trong

WindowNT chịu trách nhiệm quản lý các ngữ cảnh diễn tả

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 4.2.2 Định dạng điểm ảnh

 Trước khi chương trình có thể tạo lập một ngữ cảnh diễn tả, nó phải

đặt định dạng điểm ảnh của thiết bị

 Các thuộc tính này được gộp vào trong bề mặt vẽ sử dụng chế độ

mầu RGBA hoặc chỉ số, hoặc vùng đệm điểm và các thông tin đồ hoạ

khác của OpenGL

Trang 32

 4.2 Vấn đề cơ bản của OpenGL

 Thuộc tính của một định dạng điểm ảnh được mô tả chi tiết bởi cấu

trúc PIXELFORMATDESCRIPTOR, nó có 26 trường thông tin

typedef struct tagPIXELFORMATDESCRIPTOR

{

DWORD dwLayerMask; DWORD dwVisibleMask; DWORD dwDamageMask;

} PIXELFORMATDESCRIPTOR, * PIXELFORMATDESCRIPTOR, FAR * LPPIXELFORMATDESCRIPTOR;

Kỹ thuật lập trình mô phỏng Rô bốt và các hệ cơ điện tử

 4.2.3 Khởi tạo và sử dụng cấu trúc định dạng điểm ảnh

 Giá trị mặc định để làm việc tốt trên tất cả các hệ thống như sau:

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

🧩 Sản phẩm bạn có thể quan tâm

w