PIC Vietnam

Go Back   PIC Vietnam > Robotics > Công nghệ robot

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

Công nghệ robot Tất cả các vấn đề về robot di động, tay máy, haptics....

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 09-07-2008, 03:06 PM   #33
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
Trích:
Nguyên văn bởi tuanphan View Post
Em xem qua chương trình Matlab ở đường link của anh thấy chương trình này sử dụng phương pháp lặp (phương pháp số), còn ở đây em sử dụng phương pháp giải tích. Em cũng thử tìm quyển sách của anh (bản soft) (tác giả là Jean Claude Latombe) nhưng chỉ có bản view giới hạn trên google book thôi, xem qua cũng thấy khó hiểu. Có lẽ em nên đưa chương trình của em lên anh xem thế nào, vì ko có chương trình đó ở đây, nên em type lại thôi (chắc là không có lỗi), anh chịu khó copy, paste đoạn script vào trong matlab thì sẽ xem được kết quả chạy. Nếu cần thì em sẽ copy hình sau.
Đây là đoạn chương trình giải động học ngược robot 2 khâu phẳng. Đầu tiên em cho biến q1, q2 (biến khớp) chạy theo 1 hàm, sau đó tính động học thuận, rồi tính lại động học ngược. Có thể thấy tại giá trị q2=pi (điểm kỳ dị) thì đồ thị của q1, q2 (cuối cùng) bị gãy khúc. Nếu tại thời điểm đó trở đi đến giá trị suy biến tiếp theo em thay lại hàm S2=-sqrt(abs(1-C2.^2)); thì đồ thị lại không bị gãy khúc nữa. Nhưng em không biết cách làm sao để chọn 1 trong 2 hàm đó tại mỗi thời điểm t để đồ thị vẫn luôn ổn.
Code:
clear all;
hold on; grid on;
t=0:0.1:3.5;  % t là thời gian
l1=300*ones(1,length(t));  %Chiều dài khâu 1
l2=300*ones(1,length(t));  %Chiều dài khâu 2
q1=0.4*cos(t);
q2=1*sin(t);
plot(t,q1,'b');
plot(t,q2,'b');
x=l1.*cos(t)+l2.*cos(q1+q2);
y=l1.*sin(t)+l2.*sin(q1+q2);
C2=(x.^2+y.^2-l1.^2-l2.^2)/2./l1./l2;
S2=sqrt(abs(1-C2.^2));%nghiệm còn lại là S2=-sqrt(abs(1-C2.^2));
q2=atan2(S2,C2);
S1=y.*(l1+l2.*C2)-x.*l2.*S2; %Thực tế S1 và C1 còn có mẫu số nữa nhưng nó trùng %với mẫu số của C1 nên lúc dùng atan2 mình bỏ mẫu số đi để tránh trường hợp mẫu số %nó gần về 0
C1=y.*l2.*S2+x.*(l1+l2.*C2);
q1=atan2(S1,C1);
plot(t,q1,'r');
plot(t,q2,'r');
Em có thể gửi mô hình robot của em lên đây, hình vẽ, để anh xem kiểu của em là kiểu nào. Nhìn phương trình em viết anh không có thời gian xem kỹ.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 10:21 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