|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
下面的代码在2015b可以运行;0 M/ x+ |6 E6 f5 \5 F
clear;* ~$ C# X* T1 b
clc;! N& j/ i2 t# P
startup_rvc;
' Z8 O. {" P2 ~+ A8 Qn = 3;
3 P, h+ z7 O7 T- S1 yswitch n2 p: o9 w) Z$ n7 @7 V* m
case 1
6 j) a% R& ?9 g1 x( ] %建立机器人模型
7 o3 C: [5 b8 }% theta d a alpha offset" J- ~. A/ a! y% l/ a( Z( d* Y; [* K
L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数
4 Q/ e, _! ]: z5 ~& _ uL2=Link([pi/2 0 0.56 0 0 ]);
6 z& t0 A7 d( ^- ~L3=Link([0 0 0.035 pi/2 0 ]);
6 U2 O* b! n( c9 u8 n* A7 t7 PL4=Link([0 0.515 0 pi/2 0 ]);
6 s8 i1 M1 z+ b3 q/ j3 |L5=Link([pi 0 0 pi/2 0 ]);9 o( T% a# t1 Q" U
L6=Link([0 0.08 0 0 0 ]);
) ^$ g3 S) ?% grobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman+ X* ?$ q) B; K* Y$ B) x b
robot.plot([0,pi/2,0,0,pi,0]);%输出机器人模型,后面的六个角为输出时的theta姿态# R& x+ ], }. M( c) _% I/ b: {
robot.display();
* l) u+ E6 `" W/ {* a! rteach(robot);
1 o5 n/ R: M' t5 B/ N) l. p) q& `$ B; {2 B2 j
case 2
! x: q v% f4 r; T3 U1 w+ V+ k%建立机器人模型" P+ l7 C1 k3 |5 A/ [ `
% theta d a alpha offset
/ }0 }3 Z4 Z% H5 N0 n" UL1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数
( u# F' m }$ z/ HL2=Link([pi/2 0 0.56 0 0 ]);% ?& z4 O* N$ ] n9 a+ b5 C
L3=Link([0 0 0.035 pi/2 0 ]);
. D* c O2 ~% U7 H) dL4=Link([0 0.515 0 pi/2 0 ]);" t1 }: M9 B4 F1 f! I
L5=Link([pi 0 0 pi/2 0 ]);
9 X$ O1 m4 \4 W- uL6=Link([0 0.08 0 0 0 ]);
8 l; D4 x" T, w7 w- o; r% Rrobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
/ S1 V* V9 R6 C) q) xtheta=[0,0,0,0,0,0];%指定的关节角
7 A4 ~3 g: A" t( b+ p" Cp=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p
. m; _% ?) p; f) `q=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q
: p, h2 K( \# H- Q9 a- V* A& d, H- o5 C7 Y9 @: V/ a
case 3
- V- t' c5 C5 e6 m%建立机器人模型+ C0 E2 z8 c- G, D |" J7 u2 B: \
% theta d a alpha offset
9 Z% t9 g" V$ L5 d4 H' dL1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数
8 ^- c. ?$ C/ U; t7 [L2=Link([pi/2 0 0.56 0 0 ]);
" |- y/ j |/ U4 K! W y1 K' SL3=Link([0 0 0.035 pi/2 0 ]);
, \; x6 j! w, w' h' ?L4=Link([0 0.515 0 pi/2 0 ]);
v1 ~ s9 D" i, K# {9 lL5=Link([pi 0 0 pi/2 0 ]);7 d: T# R+ |9 c# {
L6=Link([0 0.08 0 0 0 ]);7 t1 i0 R" B8 q# i4 F) Q: G2 [
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
" M: v) _% l" s" `( O. vT1=transl(0.5,0,0);%根据给定起始点,得到起始点位姿
# P9 Q9 h3 S6 C( z |T2=transl(0,0.5,0);%根据给定终止点,得到终止点位姿
4 K' j) f2 W& ^
) R b5 E& k; m! U5 O8 t0 Z' W# gq1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角( N+ Z B" n- n- I5 b
q2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角
' r2 A& r1 Y; Q! g[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数4 y. P- S+ e6 ~4 D; W0 i
grid on- E, ]5 y6 r8 H& e- `# l4 `
T=robot.fkine(q);%根据插值,得到末端执行器位姿
; f9 o/ Y* y7 i3 ynT=T.T; plot3(squeeze(nT(1,4, ),squeeze(nT(2,4, ),squeeze(nT(3,4, ));%输出末端轨迹5 s0 o$ C& [" I/ n5 s/ W
hold on# q% ]" r% b) w. f
robot.plot(q);%动画演示) j+ d: b, m- ~/ l( U% e0 K
end' x1 F$ H# ^0 I+ a' `9 C
7 v/ Q& i( H Z4 o8 a2 B5 |8 ?
然后修改了下连杆的D-H参数,以及起始和终止点的参数。
6 w$ {$ m5 l! `& t, O0 `%按UR5的DH参数修改后,第一个点打孔的轨迹% l" K0 Z# s0 m' Z, `
%建立机器人模型. H) t) z0 }! d- E
% theta d a alpha offset- n; t9 D0 s2 w
L1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数
1 @" \: T' C0 a Q% k/ y# D! x9 jL2=Link([pi/2 0 -425 0 0 ]);/ h( Z0 n: Y2 W( L0 @
L3=Link([0 0 -392 0 0 ]);
4 n8 w; z1 `) A4 O; U/ z2 EL4=Link([0 109.3 0 pi/2 0 ]);5 m( U% z: `" a3 _* e
L5=Link([pi 94.75 0 pi/2 0 ]);
1 d8 n) d" d* hL6=Link([0 82.5 0 0 0 ]);
5 F7 Q( v. L& Erobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman0 `, r0 D4 ]" D1 p+ }* ~0 j+ a
theta=[0,0,0,0,0,0];%指定的关节角
" E+ \! R; E) q2 Q1 g. @) mp=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p* P' u) K5 \( Y' ^6 R$ i
q=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q6 j6 b/ T+ {$ d+ f A1 y
' Z! {5 c4 Z8 h O; F, q! w7 j$ s g4 C9 _
%建立机器人模型
8 U# M1 Q1 ^" u% theta d a alpha offset" v9 T1 d3 {& C$ g: _) X+ e) N
L1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数
; [+ ~$ R( a2 y3 L, N* UL2=Link([pi/2 0 -425 0 0 ]);
/ b/ q' `( R' A: U) dL3=Link([0 0 -392 0 0 ]);
* z' u% C7 S: h$ t4 O) YL4=Link([0 109.3 0 pi/2 0 ]);* C8 M* l* ?$ f1 n v& l5 _
L5=Link([pi 94.75 0 pi/2 0 ]);
5 ~" M U$ V+ nL6=Link([0 82.5 0 0 0 ]);
8 k: H2 I* P; K+ j3 \: orobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
`, q+ c' O6 x" H. x |T1=transl(-33.8962,70.5806,-53.6681);%根据给定起始点,得到起始点位姿' ^+ U5 s- K) h8 F; F
T2=transl(-31.3206,68.8281,-55.4449);%根据给定终止点,得到终止点位姿
8 l% E) t, y8 J0 pq1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角 L6 R, F- p3 A# C( n
q2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角
: b( ^: \3 z3 b2 l! m[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数
# Z+ T% a( m7 U3 z+ Bgrid on# Z5 W5 {$ a$ b6 q
T=robot.fkine(q);%根据插值,得到末端执行器位姿7 \/ `3 \6 S8 d
nT=T.T; plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹
4 D) }) U6 [( Dhold on+ Z: H* m/ O: u! f0 O3 {
robot.plot(q);%动画演示
& P. b9 a# v$ k0 e3 m+ d# F; B8 |+ U/ H3 q2 U: P
9 W( h, n" B+ h( n# G) g
机器人可以显示出来,但自动轨迹规划时出错。
. s7 g" e* i- E* I2 n7 H9 g8 `0 m; B4 e4 [1 P6 N
出现如下错误:“
1 z9 _1 U, \( X% N9 w警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.375755
7 `* v" [+ H* ~4 \, r> In SerialLink/ikine (line 244)' `3 {; O' k# q2 S7 v) ?( f# E/ B( z
In t (line 27)
/ D+ @' W2 m" k警告: failed to converge: try a different initial value of joint coordinates3 u# ~0 d1 n' [1 q, I
> In SerialLink/ikine (line 273)
& n4 [1 [# ~: Q1 R8 Y& w In t (line 27)
7 f q( Y) B3 O- W3 {警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.408223 \4 f) o, ^' Q5 a! W- B; _
> In SerialLink/ikine (line 244)) W5 N- l: u6 R1 v7 F
In t (line 28)# P" X3 T0 l! \
警告: failed to converge: try a different initial value of joint coordinates
7 P/ u( U! ]- E1 v* R0 p8 O+ ?> In SerialLink/ikine (line 273)
" c4 o" t& e. K& @# @) @ In t (line 28)9 z. J" l4 i/ g! u. g
错误使用 SerialLink/fkine (line 84)
+ \6 j* w T8 ]( J, w: Hq must have 6 columns/ C. p: x; E2 }3 i( A3 N c4 A
" B3 Z# o# k$ q s3 N5 x
出错 t (line 31), X$ Z; h6 z; T; x
T=robot.fkine(q);%根据插值,得到末端执行器位姿”
- ^, `( I5 ^+ U0 C
6 k# @3 y& t/ J6 d3 b/ Y调试发现q1和q2都是空矩阵,导致q也是空矩阵。- C. h# ~; \3 b( B) \1 [* Q
为何得不到那2点的关节角?6 h4 w6 P ], _. G5 _1 H
) a, v, c( }+ I; \# c/ a, W
7 B0 K4 q3 w( ~- l5 Y+ M
( r) m& r8 k( Q8 l( d7 h |
|