|
Tài trợ cho PIC Vietnam |
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... |
|
Ðiều Chỉnh | Xếp Bài |
15-02-2008, 01:26 PM | #1 |
PIC Bang chủ
|
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
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
15-02-2008, 01:48 PM | #2 |
PIC Bang chủ
|
Đâ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; };
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
16-02-2008, 01:31 AM | #3 |
Đệ 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) ... 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 |
16-02-2008, 12:00 PM | #4 |
PIC Bang chủ
|
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
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? thay đổi nội dung bởi: falleaf, 16-02-2008 lúc 12:11 PM. |
17-02-2008, 01:44 AM | #5 |
Đệ 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? |
17-02-2008, 03:10 AM | #6 |
PIC Bang chủ
|
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
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
18-02-2008, 09:46 PM | #7 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 15
: |
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!!! |
19-02-2008, 11:48 PM | #8 |
Đệ tử 1 túi
Tham gia ngày: Apr 2007
Bài gửi: 11
: |
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 |
21-02-2008, 09:13 AM | #9 |
PIC Bang chủ
|
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
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
28-02-2008, 10:24 AM | #10 | |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 15
: |
Trích:
Rất mong anh em trong diễn đàn giúp đỡ thêm! |
|
28-02-2008, 10:48 AM | #11 |
PIC Bang chủ
|
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ông ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
19-03-2008, 03:34 PM | #12 | |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 15
: |
Trích:
Chúc các Anh thành công nhé! Tất cả vì sự nghiệp R nước nhà! |
|
05-05-2008, 06:59 PM | #13 |
Đệ 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./ |
23-07-2008, 04:52 PM | #14 |
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?
|
05-01-2009, 11:32 AM | #15 |
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 |
|
|