|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
下面的代码在2015b可以运行;$ L/ [4 s/ ?0 f5 i
clear;
% D; l! [' O7 X. ?! m/ [8 S( fclc;
! p( J4 U. `" a7 M& n$ @startup_rvc;
) y+ n0 n( s8 }5 {2 Jn = 3;4 g* o! D* [) M2 J' A2 @
switch n
9 d% g F- M" y0 W( G, q1 \/ f case 1
( H0 o# `# b+ F& J% S P %建立机器人模型
- y6 z" a# j6 J0 q$ }% theta d a alpha offset
5 G8 Q9 a* D uL1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数: Z2 R2 D. o, A& W3 R8 r C: B. ]
L2=Link([pi/2 0 0.56 0 0 ]);. h& }+ V$ c4 s+ |
L3=Link([0 0 0.035 pi/2 0 ]);
' a4 x0 O4 L5 b, X0 eL4=Link([0 0.515 0 pi/2 0 ]);; v. z4 o& E( ~5 P9 A
L5=Link([pi 0 0 pi/2 0 ]);: c2 X9 j8 J: t9 Q7 y$ A% {
L6=Link([0 0.08 0 0 0 ]);( u2 B8 Q: s4 n% p: j# B2 r S( n
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
/ ~: }; f0 k! X+ D& B: [5 U5 }! y/ Mrobot.plot([0,pi/2,0,0,pi,0]);%输出机器人模型,后面的六个角为输出时的theta姿态) c: O; G6 q" @( A" o4 m0 t
robot.display();
# ], f0 ]+ p; K. x. H3 ~ Oteach(robot);
7 P1 b# `& b/ U6 c. @. ]1 C# J; X. |5 `3 b3 |
case 2
. t3 N& Y( X! R& A: |2 S9 s%建立机器人模型% i9 y* N. u' B5 K
% theta d a alpha offset
; G, Y# @$ K. _, C# v8 y9 NL1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数
1 }& C# d6 z: Q! F+ s0 S( o2 f4 eL2=Link([pi/2 0 0.56 0 0 ]);
- U, Y+ D$ a. K) H% b, C3 {L3=Link([0 0 0.035 pi/2 0 ]);
% q: K- q! U9 T* p) y1 \& Y6 L cL4=Link([0 0.515 0 pi/2 0 ]);
7 T$ @9 n- z7 }9 C% fL5=Link([pi 0 0 pi/2 0 ]);0 F) P3 o# f/ H b! Y
L6=Link([0 0.08 0 0 0 ]);, P; Z$ ]5 k: {" S, a
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman% C# G3 C; O/ O8 U6 d
theta=[0,0,0,0,0,0];%指定的关节角
* M: F9 e2 g8 }* H" ]5 _p=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p$ w8 o& _# s4 I- ~0 ~" M; b2 y
q=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q
1 C" P1 l* | b! K* W& _
9 m, Q6 n: Z; E6 c* o$ Vcase 3
$ `3 ?; S% O$ r%建立机器人模型/ a: _2 j" C& k1 w# {9 Y, k
% theta d a alpha offset0 t$ w" K9 O' z' j- B
L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数6 I# L$ f1 J0 z, Q; k
L2=Link([pi/2 0 0.56 0 0 ]);
+ \1 V1 `% ^8 _( [L3=Link([0 0 0.035 pi/2 0 ]);
' K+ ~" d0 p1 w2 x# L, K' CL4=Link([0 0.515 0 pi/2 0 ]);! q9 J6 b$ q& W/ ^$ e% ~
L5=Link([pi 0 0 pi/2 0 ]);
9 e I0 @- ]- Z4 J: aL6=Link([0 0.08 0 0 0 ]);# Y" i+ r- y8 w: N/ t: j
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
5 ]) s4 T( e2 [* aT1=transl(0.5,0,0);%根据给定起始点,得到起始点位姿% c8 M8 D6 H U4 Y5 z3 I3 `
T2=transl(0,0.5,0);%根据给定终止点,得到终止点位姿$ n8 Y1 u1 P: m5 w! _
) T9 z8 U% _/ T' Z$ n" O. ]5 D6 _$ pq1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角
1 p; B7 G4 ?; l) R$ K+ X( V2 I6 eq2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角
9 M3 b6 m+ F. t- m$ Y k' q+ s[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数( C2 I" i. l5 A. V0 n! r8 f; h
grid on
; ]) W) P8 V2 c( c; o- KT=robot.fkine(q);%根据插值,得到末端执行器位姿
- K5 ~3 j* W' |5 GnT=T.T; plot3(squeeze(nT(1,4, ),squeeze(nT(2,4, ),squeeze(nT(3,4, ));%输出末端轨迹4 u, H T* Z+ Z5 ^% @" R
hold on& q0 _7 ~8 a3 k5 M2 {- h& I
robot.plot(q);%动画演示
) T' r5 P- T- u7 Dend# J$ p: t4 ^7 Z* E( O4 [( P
& z" ]! d9 D* p2 l
然后修改了下连杆的D-H参数,以及起始和终止点的参数。
9 Y" B+ ?0 l1 m1 z%按UR5的DH参数修改后,第一个点打孔的轨迹 D! p# Q5 J! o- _% v9 B
%建立机器人模型
8 f; S9 w4 F8 a0 b# M' B/ t. R% theta d a alpha offset& b5 h4 h6 ^0 |% v9 h
L1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数
0 t4 D ~5 T1 Z9 bL2=Link([pi/2 0 -425 0 0 ]);
% d0 m- ]) n3 |' e8 PL3=Link([0 0 -392 0 0 ]);
& J* j: u- b6 I( S1 N6 d3 E* J' L9 `L4=Link([0 109.3 0 pi/2 0 ]);2 i, L. v, e# @" H
L5=Link([pi 94.75 0 pi/2 0 ]);. w$ n& ?- S0 c; O1 S E
L6=Link([0 82.5 0 0 0 ]);8 Z6 }. @ G' |
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
$ `$ L( u. S. W6 b7 @" f/ |theta=[0,0,0,0,0,0];%指定的关节角
/ d, U$ }" K5 S- [4 S. P/ Dp=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p
( w! N+ K" r, qq=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q
6 t) b% X# Z- m
5 p( |$ }3 J$ A+ R% V7 }3 ]
7 b7 G9 J1 s( u9 }! @7 p! D d+ p%建立机器人模型$ K4 a. e! A4 U5 L+ D
% theta d a alpha offset1 A6 |; G( v( E P1 x. I
L1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数1 g! q; M1 O3 N7 G6 n
L2=Link([pi/2 0 -425 0 0 ]);
# ]' ?! `) Q0 b! mL3=Link([0 0 -392 0 0 ]);
: @* W0 m$ W- \8 OL4=Link([0 109.3 0 pi/2 0 ]);
d* L( ~$ d3 Z1 E$ rL5=Link([pi 94.75 0 pi/2 0 ]);
( G2 g9 _) r B0 {9 mL6=Link([0 82.5 0 0 0 ]);9 k# e% T s" i2 r9 ]
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
) S8 a* K' \ D7 k# \T1=transl(-33.8962,70.5806,-53.6681);%根据给定起始点,得到起始点位姿' y2 K8 e m$ M4 `4 S0 U
T2=transl(-31.3206,68.8281,-55.4449);%根据给定终止点,得到终止点位姿
8 q# @& X$ F# qq1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角
: F; D+ ~. C/ @4 \" ^& W9 _ e9 Y- M ~q2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角
+ |: h' }4 R; `8 z% @& y: H! I[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数4 U2 E( c# Z& A9 H
grid on
7 t$ i; e4 Q: BT=robot.fkine(q);%根据插值,得到末端执行器位姿+ E8 s1 A7 |& Z. u' ?0 }8 q" x
nT=T.T; plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹/ U" n7 u* B' _& h! H$ ~6 A
hold on. B2 U+ A9 |5 A) m! R6 \& z
robot.plot(q);%动画演示
( M5 M: U& E$ w3 Z" W) W3 N2 {9 K8 N! b+ \! k
6 C- {4 @; i6 j, y; z6 R1 x机器人可以显示出来,但自动轨迹规划时出错。9 W4 v s- [6 @+ T0 Z) W& o: l
! i+ v4 }. M0 d9 G% l4 x5 i( E
出现如下错误:“
! f- m T' g+ y0 c警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.375755+ v0 t1 s: \: p+ |+ [
> In SerialLink/ikine (line 244)- ^/ }% @7 A" u. m, n7 | r$ K
In t (line 27)
! v2 e/ K+ d- K: g5 k警告: failed to converge: try a different initial value of joint coordinates* k- w" N) v: p! j9 ^4 T: p4 R
> In SerialLink/ikine (line 273)
1 s9 h! d {1 | In t (line 27)
, g+ k( s: F: X9 E2 b3 k A* G警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.40822& x# d5 T2 Z7 [1 X& L4 {! U
> In SerialLink/ikine (line 244)
0 f+ _/ |+ E- F* B3 u In t (line 28)
6 C8 W: B& ^# H. K8 c警告: failed to converge: try a different initial value of joint coordinates9 H, `" Y- L) d3 N
> In SerialLink/ikine (line 273)
% |( C% @' R& \ In t (line 28)/ `1 }2 D& T4 q4 P
错误使用 SerialLink/fkine (line 84)9 N- B* z/ g2 b% y1 a$ x
q must have 6 columns
}" |) G ~. ]6 C
$ G- B2 N( V L$ Z出错 t (line 31): j |, L) e. Y$ L' n. g
T=robot.fkine(q);%根据插值,得到末端执行器位姿”- `3 J/ u* P# [" r3 p2 a% A
; |& X4 w. g' P, q调试发现q1和q2都是空矩阵,导致q也是空矩阵。
) k8 l& O0 D2 {4 t$ P7 C' R1 q$ e, e- R为何得不到那2点的关节角?
. g6 w3 r0 {# f8 |" \+ c% {1 G5 W8 O2 ^% ]. w, r' G
a; Y/ U6 m$ l" S& e" P |9 \" g
* o6 s$ S8 l9 S# T3 z8 r* V |
|