PIC Vietnam

Go Back   PIC Vietnam > Robotics > Thực hành

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Thực hành Bắt đầu làm một robot như thế nào? Mẹo vặt? Kỹ thuật? Công nghệ?... Hãy bắt tay vào việc...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 15-02-2008, 01:26 PM   #1
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Dự án Robotics PICVietnam

Mọi vấn đề về robotics đều xuất phát từ việc giải quyết các bài toán với ma trận. Khi thao tác tốt với các ma trận rồi, thì không còn vấn đề khó khăn nữa đối với việc phát triển các công thức tính toán kinh điển của robotics.

Hôm qua ngồi một buổi để làm riêng ra một cái Project gọi là R&P Robotic Project, trong đó tạo ra một cái lớp CRPMatrix dùng cho việc khởi tạo và sử dụng các ma trận.

Hầu hết các phần source code này đều đã có đầy đủ trên mạng, và vì F làm cũng không được bài bản cho lắm, cho nên giờ đúng thật là không thể nhớ nó nằm ở đâu, có thể là nó trong cuốn Receipt C thì phải.

Ngoài ra, còn một bộ source về Matrix nữa tại đây. Đây là phần core để phát triển nên ROBOOP (dự án rất nổi tiếng về robotics và đã từ đó phát triển cả toolbox robotics cho Matlab - đồng chí này đẹp trai đấy chứ).

Nhưng làm việc với NewMat và Roboop có thể gây choáng cho một số bạn sinh viên mới bắt đầu làm quen với robotics và lập trình robotics, cho nên F chọn một giải pháp "vui vẻ" theo tinh thần của picvietnam, đó là lập ra một cái dự án mới hoàn toàn, bằng VC++ 6.0 bình thường, MFC Application bình thường, mọi thứ đều bình thường.

Việc F làm chỉ là tạo nên một cái CRPMatrix (R&P Matrix Class - tiện thể branding cho R&P kaka), đồng thời đưa vào cái nút nhấn OK một cái đoạn code ngắn, kèm với một hàm ShowMatrix(). F cũng đã để sẵn cái WorkSpace trong đó có hướng dẫn cách viết tạo mới một ma trận, nạp giá trị vào cho ma trận, thực hiện Inverse ma trận và view kết quả bằng ShowMatrix trong quá trình debug.

Như vậy công việc của các bạn là bấm F5 để chạy debug và xem kết quả tính toán. Sau đó, các bạn nên quay lại tìm hiểu file RPMatrix.h bằng View Class CRPMatrix, các bạn có thể đọc và tìm hiểu file RPMatrix.cpp để hiểu các hàm của nó được viết như thế nào.

Vì chưa có nhiều thời gian, nên thực sự F làm rất sơ sài. Tạm thời nó là cái CRPMatrix như vậy, sau này cần thêm cái gì, thì ta lại code thêm vào. Trong đó có hầu hết các công thức toán cần thiết với ma trận mà các bạn có thể sử dụng. Nếu các bạn viết trên Matlab như thế nào (không dùng Robotics Toolbox) thì chỉ cần sử dụng CRPMatrix, các bạn hoàn toàn có thể chuyển nó sang VC++ một cách dễ dàng.

Về việc support dự án này, F đã có một kế hoạch dài hạn, nhưng hiện đang rất thiếu người nghiên cứu và phát triển dự án, vậy nên bạn nào muốn tham gia dự án này thì liên hệ với F qua mail@falleaf.net nhé.

Lưu ý rằng ngành robotics ở Việt Nam hoàn toàn chưa phát triển gì, chưa kiếm tiền được, làm robotics vào thời điểm này có thể nói chỉ là làm chơi thôi. Cho nên F sẽ rất thích các bạn tham gia với tinh thần open 101%.

Ngoài ra, F cũng muốn phát triển nó trên nền Ubuntu, nhưng F thì cũng không có năng khiếu về thiết kế lắm, nên đụng vào mấy của nợ như kiểu QT hay GUI của VC++ F hơi nản lòng.

Rất mong được sự ủng hộ và hỗ trợ của các bạn. Hy vọng từ đây sẽ có một sự mở mang thoải mái hơn, đặc biệt F hướng tới những đối tượng mới học, mới tiếp cận. Những ai đã là "chuyên gia" xin miễn bình luận về những hoạt động "cò con" này, bởi có thể các bạn khi nhìn vào cái CRPMatrix sẽ thấy nó chỉ đúng như hạt cát so với cái ROBOOP vậy, nhưng tư tưởng của F luôn hướng tới cái gì đơn giản và dễ dàng, tutorial chứ không ebook, đọc thì được ít mà suy nghĩ phải nhiều. Tốt hơn là nên đọc tutorial đọc thì được nhiều (sướng, nhiều chữ), mà lại đỡ phải suy nghĩ .

Chúc vui
File Kèm Theo
File Type: zip RP Robotic Project v0.0.1.zip (55.4 KB, 1047 lần tải)
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-02-2008, 01:48 PM   #2
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Đây là file RPMatrix.h, ngoài ra còn có các hình ảnh mà F đính kèm để cho các bạn chưa quen thuộc với VC++ xem. Các bạn bấm F5 để bắt đầu debug. Nhấn OK. Sau đó nhấn F5 để nhảy từng bước. Sau khi nhảy đến dòng int a =1 (dòng này vô nghĩa, chỉ viết đại đó để debug thôi), các bạn quan sát ở ô bên tay trái như trong hình. sau đó các bạn thay ShowMatrix(M1) bằng ShowMatrix(M2) thì các bạn sẽ nhìn thấy rõ kết quả của biến showMatrix.

Biến showMatrix là một mảng [100][100], vì vậy ma trận Mi sẽ được lưu vào 3 cột 0, 1, 2 của showMatrix.

Các bạn theo dõi loạt hình bên dưới đây.

Còn dưới đây là file RPMatrix.h để các bạn biết có các hàm nào trong đó.

Code:
class CRPMatrix  
{
public:
	// Cac phep toan ma tran
	bool SVD(CRPMatrix& U, CRPMatrix& D, CRPMatrix& V);
	double NormF(const CRPMatrix& A);
	double Trace(const CRPMatrix& A);
	double Cross(const CRPMatrix& A, const CRPMatrix& B);
	double Dot(const CRPMatrix& A, const CRPMatrix& B) const;
	CRPMatrix& Zero(void);
	CRPMatrix& Inv(void);
	friend CRPMatrix Inv(const CRPMatrix& A);
	CRPMatrix& Tr(void);
	friend CRPMatrix Tr(const CRPMatrix& A);
	bool Eigen(CRPMatrix& EigenValue, CRPMatrix& EigenVector) const;
	CRPMatrix& Copy(const CRPMatrix& A);

	// Dinh nghia lai cac phep toan giua so thuc va ma tran
	CRPMatrix operator/ (const double a);
	CRPMatrix operator* (const CRPMatrix& A);
	CRPMatrix operator* (const double a);
	friend CRPMatrix operator* (double a, const CRPMatrix& A);
	CRPMatrix operator- (const CRPMatrix& A);
	CRPMatrix operator+ (const CRPMatrix& A);
	CRPMatrix& operator= (const CRPMatrix& A);
	
	// Cac thong tin ve kich thuoc ma tran
	double GetLength(void);
	int GetSize(void) const;
	void GetSize(int* row, int* col);
	int GetColSize(void) const;
	int GetRowSize(void) const;
	CRPMatrix GetColumn(const int col);
	friend CRPMatrix GetColumn(const CRPMatrix& A, const int col);
	CRPMatrix GetRow(const int row);
	friend CRPMatrix GetRow(const CRPMatrix& A, const int row);
	CRPMatrix GetMatrix(int row, int col);
	bool SetRow(const int row, const CRPMatrix& A, const int Arow);
	bool SetColumn(const int col, const CRPMatrix& A, const int Acol);

	// Khoi tao va gan/dat cac gia tri ma tran
	double GetAt(const int row, const int col) const;
	double GetAt(const int i) const;
	bool SetAt(const int i, const double value);
	bool SetAt(const int row, const int col, const double value);
	void New(const int rowsize, const int colsize);
	void New(const int rowsize);
	CRPMatrix& Eye(void);
	CRPMatrix(const int rowsize, const int colsize);
	CRPMatrix(const int rowsize);
	CRPMatrix(CRPMatrix& A);
	CRPMatrix(void);
	virtual ~CRPMatrix();

protected:
	// dung cho SVD
	double pythag(const double a, const double b);

	// cac bien toan cuc cua CRPMatrix
	int m_iError;
	int m_iCSize;
	int m_iRSize;
	bool m_bAlloc;
	double **m_pElement;
};
Hình Kèm Theo
File Type: png RP Robotic Project.PNG (40.6 KB, 30 lần tải)
File Type: png Run RP.PNG (9.3 KB, 583 lần tải)
File Type: png RP Debug.PNG (45.7 KB, 11 lần tải)
File Type: png RP In Debug.PNG (44.2 KB, 11 lần tải)
File Type: png RP In Debug 2.PNG (42.8 KB, 9 lần tải)
File Type: png RP In Debug 3.PNG (45.4 KB, 11 lần tải)
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-02-2008, 01:31 AM   #3
svn
Đệ tử 1 túi
 
Tham gia ngày: Sep 2006
Bài gửi: 24
:
Em làm 1 cái, nhưng mà bằng C# dc ko (nhìn code của VC ko thích tí nào, chỉ riêng VC mới ko thích thôi )
Hiện giờ thì mới chỉ có các phép tính cơ bản cho ma trận, phép xoay ma trận và giải hệ phi tuyến bằng Newton Raphson, giải hệ tuyến tính bằng nhân tử LU.
Đây là toàn bộ source và file dll đã biên dịch sẵn http://haminhtranhanh.googlepages.co...aMathTools.zip
Em làm cái này cùng với lv, nhưng cảm thấy lv chưa hoàn chỉnh nên đưa cái này lên thôi vậy
Đoạn code ví dụ sử dụng:
Code:
using HaMTHaMathTools;
Matrix R, PB1, y;

...
PB1 = Matrix.Normalize(ParallelRobot.B1 - ParallelRobot.P); //B1 và P của lớp ParallelRobot //cũng là các ma trận
PB1[2, 0] = 0; //truy xuất từng phần tử của ma trận
y = Matrix.Normalize(PB1 & ParallelRobot.N); //& là phép tính hữu hướng 2 vectơ (xem vectơ //là ma trận có số hàng hoặc số cột = 1
R = Transform.Rotation(u,PB1) * Transform.Rotation(v,y); //Tìm ma trận quay quanh vectơ //PB1 một góc u và quanh vectơ y 1 góc v
...
X = new Matrix(6, 1); //tạo mới một ma trận có 6 hàng và 1 cột
X[0, 0] = ParallelRobot.B1[0, 0]; X[1, 0] = ParallelRobot.B1[1, 0];
X[2, 0] = ParallelRobot.B2[0, 0]; X[3, 0] = ParallelRobot.B2[1, 0];
X[4, 0] = ParallelRobot.B3[0, 0]; X[5, 0] = ParallelRobot.B3[1, 0];
X = Numerics.NewtonRaphson(HeFtinhDonghocnghich, JacobiDonghocnghich, X, 5000, Math.Pow(10, -12)); //giải hệ phi tuyến với nghiệm ban đầu là X, số lần lặp tối đa là 5000, //sai số là 10^(-12)
...
Thư viện trên của em chưa hoàn chỉnh lắm, phần ma trận vẫn còn thiếu nhiều phép tính
Các lớp Matrix, Transform, Numerics nằm trong HaMTHaMathTools
Các bác xem qua, nếu có thể phát triển dc cho hoàn chỉnh thì ta làm luôn dc ko
svn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-02-2008, 12:00 PM   #4
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Rất là hay, khi mà bắt đầu đưa tài liệu lên và cùng nghiên cứu thì sẽ có nhiều người cùng chia sẻ. Rất mong được sự hỗ trợ của các bạn.

Chúng ta sẽ tiếp tục thảo luận về các vấn đề này, bởi PIC Vietnam nhất định sẽ phải triển khai một hệ thống hoàn thiện để phát triển robotics.

Chúc vui
File Kèm Theo
File Type: zip HaMTHaMathTools.zip (31.9 KB, 130 lần tải)

thay đổi nội dung bởi: falleaf, 16-02-2008 lúc 12:11 PM.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-02-2008, 01:44 AM   #5
minhpupil
Đệ tử 1 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 11
:
Cho em hỏi là thư viện " Spacelib in C" , có cách nào add nó để dùng cho MFC không ạ?
Nếu add được thì khỏi lo về vấn đề ma trận nữa và ta chỉ lấy ra xài thôi?
minhpupil vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-02-2008, 03:10 AM   #6
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Cái SpaceLib sẽ phục vụ được việc phát triển phần embedded mạnh, vì hầu hết các con dsp bây giờ chỉ mới hỗ trợ C mạnh, chưa phát triển được C++, có mỗi thằng Booster C++ viết cho PIC mà F có từ rất lâu, có cả bản quyền, nhưng cũng quá cũ rồi, F cũng chưa có điều kiện phát triển nó và cũng không muốn làm rối loạn xu hướng phát triển nên vẫn chưa tung ra nghiên cứu. Cũng có thể có nhiều người có, nhưng thực sự nó chưa cần vào lúc này.

Do vậy, nếu bạn đã nắm thằng nào về C mạnh, thì bạn có thể nghiên cứu thêm xem bộ thư viện nào là mạnh nhất trên C. Cũng giống như có rất nhiều thằng có thư viện ma trận mạnh, nhưng mà thằng newmat vẫn nên dùng bởi vì nó được ROBOOP dùng, mà ROBOOP thì lại quá mạnh thế nên ta lại dùng...

Mục tiêu ban đầu của F, đó là giúp các bạn làm quen đã, và có thể chúng ta sẽ phải đi làm lại khá nhiều việc mà những người đi trước đã làm, nhưng nó cần thiết để phát triển một hệ thống hoàn chỉnh và có cơ sở.

F đã nhận được email của Minh, rất vui nếu bạn cùng tham gia dự án này.

Công việc trước mắt của chúng ta, có lẽ sẽ là nghiên cứu và làm lại toàn bộ cái CRPMatrix, và thậm chí chúng ta sẽ phải nghiên cứu để code trên C/C++ Linux mà F chủ trương phát triển trên nền Ubuntu.

Bạn xem bài viết tại đây:
http://dientuvietnam.net/forums/showthread.php?t=10797

Lưu ý một điều rằng Eclipse chạy trên Ubuntu vẫn hơi chậm, máy F chạy core 2 duo 2G và 1G RAM nên thấy chạy ổn, chưa bị gì, nhưng một số bạn ở VN thì đúng là có gặp vấn đề với Eclipse trên Ubuntu khi chạy các máy cũ (hơi nặng nề một chút). Nhưng dù sao thì ta vẫn chọn công cụ này, bởi tương lai nó sẽ khá mạnh. Các đồng chí phát triển Eclipse CDT hầu hết đều khoái xài Windows, chắc sắp tới sẽ hay ho hơn.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-02-2008, 09:46 PM   #7
conso0
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 15
:
Thumbs up

các anh ơi!em nghe các anh nói về chủ đề này thú vị quá,em cũng muốn tham gia nhưng chỉ mỗi tội là biết ít quá.Mong các anh hướng dẫn em học theo với.Em phải bắt đầu từ đâu ạ?
Chúc các anh thành công!!!
conso0 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-02-2008, 11:48 PM   #8
minhpupil
Đệ tử 1 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 11
:
Talking

Bạn đã biết gì về Robot chưa>? Ma trận DH, động học thuận, động học nghịch, động học vận tốc, động lực học?

Nếu chưa, bạn down file này về thử xem.

http://www.esnips.com/doc/164d4d8d-0...ot-Cong-Nghiep
minhpupil vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-02-2008, 09:13 AM   #9
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Các bạn chú ý tới phần lập trình trên Ubuntu luôn nhé, vì khi phát triển dự án này, chúng ta sẽ triển khai dạng Cross Platform. Bước đầu sẽ triển khai trên MFC bình thường, sau này sẽ chuyển dần sang Ubuntu.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-02-2008, 10:24 AM   #10
conso0
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 15
:
Red face

Trích:
Nguyên văn bởi minhpupil View Post
Bạn đã biết gì về Robot chưa>? Ma trận DH, động học thuận, động học nghịch, động học vận tốc, động lực học?

Nếu chưa, bạn down file này về thử xem.

http://www.esnips.com/doc/164d4d8d-0...ot-Cong-Nghiep
Cảm ơn minhpupil nhé! thực ra mình đã về bài toán xây dựng ma trận DH,động học thuận ,ngược rồi nhưng chưa từng làm về động học vận tốc và động lực học.Trước mình mới chỉ giải quyết tính toán mấy bài toán đó trên Matlab chứ ko làm như mấy anh là viết trong VC++,mình download cả công cụ toolbox robotics cho matlab của anh F nhưng chẳng biết sử dụng như thế nào nên ko rõ hướng đi lắm
Rất mong anh em trong diễn đàn giúp đỡ thêm!
conso0 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-02-2008, 10:48 AM   #11
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Bản chất khi giải các bài toán động học thuận, động học ngược cho robot, thì em phải giải quyết các phép toán với ma trận. Thế thì để lập trình tính toán một mà trận nào đó, bình thường em dùng matlab, em sẽ có:

A = [...; ...; ...; ...]
B = [...; ...; ...; ...]

Rồi em lấy A + B, A*B, inv(A)... để em giải bài toán Kinematics.

Vậy thì trong C++ nó chưa có cái việc khai báo thế nào là một ma trận, chưa có phép tính giữa các ma trận, cái Class CRPMatrix dùng để làm việc đó.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2008, 03:34 PM   #12
conso0
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 15
:
Thumbs up

Trích:
Nguyên văn bởi falleaf View Post
Bản chất khi giải các bài toán động học thuận, động học ngược cho robot, thì em phải giải quyết các phép toán với ma trận. Thế thì để lập trình tính toán một mà trận nào đó, bình thường em dùng matlab, em sẽ có:

A = [...; ...; ...; ...]
B = [...; ...; ...; ...]

Rồi em lấy A + B, A*B, inv(A)... để em giải bài toán Kinematics.

Vậy thì trong C++ nó chưa có cái việc khai báo thế nào là một ma trận, chưa có phép tính giữa các ma trận, cái Class CRPMatrix dùng để làm việc đó.

Chúc vui
Cảm ơn Anh!
Chúc các Anh thành công nhé!
Tất cả vì sự nghiệp R nước nhà!
conso0 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-05-2008, 06:59 PM   #13
vmt.dttt
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 11
:
Nhưng anh làm trên phần mềm nào thế ?
Cho em xin link dowload và cả crack luôn nhé ./
Cám ơn anh./
vmt.dttt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-07-2008, 04:52 PM   #14
towardthesea
Nhập môn đệ tử
 
Tham gia ngày: Jun 2007
Bài gửi: 1
:
Anh Falleaf ơi anh có thể nói rõ hơn về hướng mà anh định phát triển cái robotics đó được không? Em rất khoái món đó nhưng không biết anh định làm theo hướng thế nào để có thể tham gia với nhóm được không?
towardthesea vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-01-2009, 11:32 AM   #15
duyanh007
Nhập môn đệ tử
 
Tham gia ngày: Jan 2009
Bài gửi: 1
:
cho em hoi bai toan sau cac anh giai ra rui huong dan cho em voi

Khai bao mang 1 chieu toi da 20 phan tu
Tao cac gia tri tu dong cho mang (-20 -> 20)
Sap xep mang tang dan
Tim gia tri K co trong mang
duyanh007 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 08:56 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam