Professional Documents
Culture Documents
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ử
Hà Nội, 1/2015 1
P’ = m.P
trz
P’
P
try
trx y
x
1
3/20/2015
1.2. Phép tỉ lệ y
Q’
Q P’
P
P’Q’ = m.PQ x
z
P’
P
Q’
Q
y
x
P
P’ = m.P O x
z
P’z
P
Quanh trục Z
y
x
2
3/20/2015
y
x
z
Quanh trục Y
P
P’y
y
x
P’ = mR.P
P
3
3/20/2015
STL
y
x
4
3/20/2015
O y
x
l2
Đây là phương pháp lặp với biểu thức 2
l3
hồi quy dạng :
3
x(k+1) = x(k) – Fx-1(x(k)).f(x(k)) l1
1
k : bước lặp thứ k
d2
Fx : ma trận Jacobi
d1
5
3/20/2015
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)
Bài toán gia tốc: lấy đạo hàm theo thời gian đối với phương trình
vận tốc
Thực hiện giải hệ phương trình đại số tuyến tính bằng phương
pháp GaussJordan, ……
6
3/20/2015
Dao phay
Dao phay
7
3/20/2015
Dao phay
0 sin n cos n dn
0 0 0 1
x y
Khâu θi αi ai di
1 0 0 0 d1
2 θ2 0 a2 0
3 θ3 0 a3 0
8
3/20/2015
x y
1 0 0 0 cos 2 sin 2 0 a2
0 sin 0 0
1 0 0 cos 2
0
A1
1
A2 2
0 0 1 d1 0 0 0 0
0 0 0 1 0 0 0 1
cos 3 sin 3 0 a3
sin cos 3 0 0
2
A3 3
0 0 0 0
0 0 0 1
0
A4 2A1.1A2 .2 A3
cos( 2 3 ) sin( 2 3 ) 0 a2 cos 2 a3 cos( 2 3 )
sin( ) cos( ) 0 a2 sin 2 a3 cos( 2 3 )
0
A4 2 3 2 3
0 0 0 d1
0 0 0 1
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, …
9
3/20/2015
Dao phay
Bàn gá phôi
10
3/20/2015
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.
11
3/20/2015
Bước 3
12
3/20/2015
Bước 3
13
3/20/2015
Bước 6
14
3/20/2015
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".
Để 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 …"
15
3/20/2015
16
3/20/2015
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).
CPen quản lý các nét vẽ với kiểu đường, độ rộng và mầu vẽ.
Để chọn một kiểu bút và chổi tô mới cho CDC sử dụng hàm :
CDC::SelectObject
17
3/20/2015
void CDlgTest::OnPaint()
{
CRect clientRect;
GetClientRect(clientRect);
CPaintDC dc(this);
clientRect.InflateRect(-5,-5,-5,-5);
dc.Rectangle(clientRect);
dc.DrawText("Draw Text : My HelloWorld program.",-1, clientRect,
DT_SINGLELINE|DT_CENTER|DT_VCENTER);
dc.MoveTo(5,5);
dc.LineTo(100,100);
}
18
3/20/2015
19
3/20/2015
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.
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:
20
3/20/2015
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
năng “ClassWizard…”
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ị
21
3/20/2015
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
m_graph.DrawPline(x,y,n);
m_graph.Ellipse(4,1,1,2);
m_graph.Rectangle(-1,-1,2,2);
m_graph.DrawTextWithColor(m_graph.GetCurrentX(),m_graph.GetCurre
ntY(),“Welcome to my Graph",RGB(0,255,0),TA_CENTER|TA_TOP );
22
3/20/2015
vector x(3),y;
X(i)=1;
y=m*x
{
m.SetSize(3,3);
}
23
3/20/2015
{
SetIdentityMatrix(m);
m(0,2)=tx;
m(1,2)=ty;
}
{
SetIdentityMatrix(m);
m(0,0)=cos(angle);
m(1,1)=cos(angle);
m(1,0)=sin(angle);
m(0,1)=-sin(angle);
}
24
3/20/2015
{
SetIdentityMatrix(m);
m(0,0)=sx;
m(1,1)=sy;
}
y
P3
ty P2
P1
25
3/20/2015
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
f(x) = 0
x là véc tơ chứa xấp xỉ đầu, đồng thời chứa kết quả bài toán
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)
26
3/20/2015
d2
{
a.SetSize(2);
d1
c.SetSize(2);
a(0,0)=-m_l2*sin(x(0)); a(0,1)=m_l3*sin(x(1));
a(1,0)=m_l2*cos(x(0)); a(1,1)=-m_l3*cos(x(1));
c(0)=m_l1*cos(m_phi1)+m_l2*cos(x(0))-m_l3*cos(x(1))-m_d1;
c(1)=m_l1*sin(m_phi1)+m_l2*sin(x(0))-m_l3*sin(x(1))-m_d2;
}
int n=2;
vector x(2);
d1
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 đó
if (Newton_Raphson(x,Func,eps,maxloop)==0)
{
m_phi2=x(0);m_phi3=x(1);
}
27
3/20/2015
Đượ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.
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.
28
3/20/2015
29
3/20/2015
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
Kiểu dữ liệu Kiểu tương đương Kiểu dữ liệu Kiểu tương đương
GLbyte signed char GLubyte unsigned char
GLshort short GLboolean unsigned char
GLint int GLushort unsigned short
GLsizei long GLuint unsigned long
GLfloat float GLenum unsigned long
GLclampf float GLbitfield unsigned long
GLdouble double GLvoid void
GLclampd double HGLRC HGDIOBJ
30
3/20/2015
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.
31
3/20/2015
Các định dạng điểm ảnh sẵn có của chúng là các khả năng thể hiện
cơ sở.
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
{
WORD nSize; WORD nVersion; DWORD dwFlags;
BYTE iPixelType; BYTE cColorBits; BYTE cRedBits;
BYTE cRedShift; BYTE cGreenBits; BYTE cGreenShift;
BYTE cBlueBits; BYTE cBlueShift; BYTE cAlphaBits;
BYTE cAlphaShift; BYTE cAccumBits; BYTE cAccumRedBits;
BYTE cAccumGreenBits; BYTE cAccumBlueBits; BYTE cAccumAlphaBits;
BYTE cDepthBits; BYTE cStencilBits; BYTE cAuxBuffers;
BYTE iLayerType; BYTE bReserved;
DWORD dwLayerMask; DWORD dwVisibleMask; DWORD dwDamageMask;
} PIXELFORMATDESCRIPTOR, * PIXELFORMATDESCRIPTOR, FAR * LPPIXELFORMATDESCRIPTOR;
PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR), //kích thước cấu trúc
1, //số phiên bản
PFD_DRAW_TO_WINDOW | //các cờ đặc tính
PFD_SUPPORT_OPENGL|PFD_TYPE_RGBA,
24, //dùng 24 bit mầu
0,0,0,0,0,0, //không sử dụng chúng
0,0,0,0,0,0,0, //không vùng đệm alpha
//hoặc accum
32, //32 nit vùng đệm sâu
0,0, //không vùng đệm khung
//hoặc vùng đệm phụ
PFD_MAIN_PLANE, //kiểu lớp chính
0, //dự trữ
0,0,0 //không được cung cấp
};
32
3/20/2015
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);
33
3/20/2015
Hậu tố Ý nghĩa
b Cho đối mục GLbyte
d GLdouble hoặc GLclampd
f GLfloat hoặc GLclampf
i GLint hoặc GLsizei
s GLshort
ub GLubyte hoặc GLboolean
ui GLuint , GLenum , GLbitfield
us GLushort
bv GLbyte cho trong 1 vector
dv GLdouble hoặc GLclampd cho trong 1 vector
fv GLfloat hoặc GLclampf cho trong 1 vector
iv GLint hoặc GLsizei cho trong 1 vector
sv GLshort cho trong 1 vector
ubv GLubyte hoặc GLboolean cho trong 1 vector
uiv GLuint , GLenum , GLbitfield cho trong 1 vector
usv GLushort cho trong 1 vector
34
3/20/2015
35
3/20/2015
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glVertex2fv(p7);
glEnd ();
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glVertex2fv(p7);
glEnd ();
36
3/20/2015
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glVertex2fv(p7);
glEnd ();
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glVertex2fv(p7);
glEnd ();
37
3/20/2015
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glVertex2fv(p7);
glEnd ();
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glVertex2fv(p7);
glEnd ();
38
3/20/2015
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glVertex2fv(p7);
glEnd ();
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glVertex2fv(p7);
glEnd ();
39
3/20/2015
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glVertex2fv(p7);
glEnd ();
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glVertex2fv(p7);
glEnd ();
40
3/20/2015
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glVertex2fv(p7);
glEnd ();
glFlush(); //đảm bảo cho bất kỳ các lệnh OpenGL trên vùng
//đệm sẽ được thể hiện lên màn hình.
factor: chỉ định cách lặp lại mẫu ; pattern: chứa mẫu vẽ theo chấm
Ví dụ:
glLineStipple(1, 0x00FF); // 0x00FF = 0000000011111111
glEnable(GL_LIXE_STIPPLE);
41
3/20/2015
Một đa giác được xem như là mặt trước khi các đỉnh của nó được
định nghĩa theo thứ tự ngược chiều quay kim đồng hồ, bạn có thể
bảo với OpenGL đổi chiều khái niệm của nó về mặt trước đa giác:
void glFrontFace (GLenum mode)
mode: có thể là GL_CW để lựa chọn thứ tự các đỉnh theo chiều
quay kim đồng hồ, trong khi GL_CCW (được OpenGL đặt mặc
định) lựa chọn các đỉnh theo ngược chiều kim đồng hồ.
42
3/20/2015
43
3/20/2015
Phép tỉ lệ mô hình:
void glScalef (GLfloat x, GLfloat y, GLfloat z)
44
3/20/2015
Đối mục thứ 3 là địa chỉ của mảng chứa các giá trị mà đặc tính ánh
sáng được đặt.
45
3/20/2015
Chú ý:
Vị trí của nguồn sáng bị tác động bởi các phép biến đổi mô hình quan
sát giống như các đối tượng 3D khác.
Phép biến đổi xảy ra khi gọi glLight() để xác định vị trí hay định hướng
nguồn sáng.
46
3/20/2015
Có cung cấp
Không có
véc tơ pháp
véc tơ pháp
47
3/20/2015
Mỗi ma trận chuyển đổi có một ngăn xếp ma trận của chính bản thân
nó.
Để ghi lại ngữ cảnh của ma trận hiện hành, chỉ cần gọi hàm sau:
glPushMatrix();
Sau khi đặt ma trận hiện hành vào trong ngăn xếp, bạn có thể thực
hiện tất cả các phép chuyển đổi bạn muốn mà không phải lo lắng về
sự 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().
Khi đặt OpenGL làm việc với vùng đệm kép, các lệnh vẽ của bạn luôn
luôn đi tới vùng đệm sau hiện hành, do đó người sử dụng sẽ không
thấy trên màn hình những gì bạn đang vẽ. Sau khi chương trình vẽ
ảnh xong, nó hoán đổi vùng đệm trước và sau, khi đó ảnh mới xuất
hiện trên màn hình.
48
3/20/2015
49
3/20/2015
Tệp tin STL chỉ mô tả hình dạng bề mặt của các đối tượng 3D mà
không kèm theo thông tin về mấu sắc, dán ảnh hay các lệnh thuộc
tính của đối tượng, đơn vị, tỉ lệ, ….
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 1 mặt tam giác
Gồm 1 vector pháp và 3 đỉnh
50
3/20/2015
Đóng gói các hàm OpenGL theo các lớp quản lý các tác vụ riêng:
COpenGLCtrl: quản lý môi trường giao diện OpenGL đưới dạng một điều
khiển (Control)
Hỗ trợ đọc tệp tin mô hình 3D với định dạng STL và hiển thị chúng
nhanh chóng.
Chú ý: Đây là thư viện do Vũ Lê Huy xây dựng, do đó không có sẵn trong VC.
51
3/20/2015
CRect rect;
GetClientRect(rect); //lấy kích thước khung View để cài đặt cho OpenGLCtrl
// khởi tạo OpenGLCtrl với kích thước khung View (tham số đầu tiên), cha
của cửa sổ OpenGLCtrl là khung View (tham số thứ 2) và chỉ danh (ID)
của cửa sổ OpenGLCtrl là 100 (tham số thứ 3).
m_openGL.SetMouseStyleDone(CMouseEvent::MOUSE_ROTATE);
// Đặt thao tác chuột trái mặc định ban đầu là quay mô hình.
52
3/20/2015
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à vị trí của khung OpenGLCtrl theo kích thước khung
View hiện thời.
53
3/20/2015
Các cấu trúc này có một số giá trị gán mặc định có thể được gọi
thông qua các phương thức:
54
3/20/2015
Thư viện OpenGLSetting cho phép thiết đặt tham số vật liệu và ánh
sáng thông qua giao diện hộp thoại một cách tường minh.
Đưa file“OpenGLSetting\bin\OpenGLSetting.lib”hoặc“OpenGLSettingd
.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 …”
55
3/20/2015
56
3/20/2015
57
3/20/2015
58
3/20/2015
6.5. Một số điểm cần sửa đổi cho mô hình Rô bốt mới
Cập nhật tệp tin STL cho mô hình Rô bốt mới, mỗi khâu đặt trong
một file với cú pháp:
elementX.STL
Với X là số thứ tự của khâu, khâu 0 là khâu đế
Chú ý khai báo trong file “OpenGLCtrlDemo.cpp”:
SUBDIRECTORY_MODEL_FILE
EXTENT_MODEL_FILE
Element2.STL Element1.STL
Element3.STL Element0.STL
59
3/20/2015
6.5. Một số điểm cần sửa đổi cho mô hình Rô bốt mới
Đặt lại kích thước các khâu trong hàm:
void CModel::SetModelSize()
{
m_listElement[0].m_l=500;
m_listElement[0].m_theta=90;
m_listElement[1].m_l=500;
z
m_listElement[2].m_l=500;
m_listElement[3].m_l=100; P
m_listElement[3].m_theta=-90;
}
0
y
x
6.5. Một số điểm cần sửa đổi cho mô hình Rô bốt mới
Đặt lại các tham số vị trí các khâu trong các hàm:
Đặt lại góc xoay và vị trí các khâu mô hình cho bước chạy thứ
m_idStep trong 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
6.5. Một số điểm cần sửa đổi cho mô hình Rô bốt mới
Đặt lại các tham số vị trí các khâu trong các hàm:
Đặt lại việc gán giá trị các biến khớp trong 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;
}
6.5. Một số điểm cần sửa đổi cho mô hình Rô bốt mới
Đặt lại các tham số vị trí các khâu trong các hàm:
Đặt lại việc gán giá trị các biến khớp trong CModel::Solve()
void CModel::Solve()
{
…
for (i=0;i<m_trajectory[0].GetSize();i++)
//vong lap thuc hien giai cac bai toan tren toan bo quy dao
{
m_idStep=i;
//Giai bai toan vi tri
if (Newton_Raphson(x,Func,eps,maxloop)==0)
{
x(0)=NormalAngleRad(x(0));
x(1)=NormalAngleRad(x(1));
if (x(0)>PI) 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
6.5. Một số điểm cần sửa đổi cho mô hình Rô bốt mới
Đặt lại các tham số vị trí các khâu trong các hàm:
Đặt lại việc gán giá trị các biến khớp trong 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));
}
6.5. Một số điểm cần sửa đổi cho mô hình Rô bốt mới
Sửa lại giá trị các phần tử của các ma trận trong các phương trình
vị trí, vận tốc và gia tốc ở trong cá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