|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
下面的代码在2015b可以运行;
3 p v# P4 R& y: }6 y& n! N$ }) Zclear;
3 ?; L( E, _1 L+ E" jclc; ^3 P( l9 Z. p2 `: \
startup_rvc;
) I& n2 j9 k- X, D! ?: G+ b% mn = 3;
8 ?, z7 ?1 w% u! S0 L5 B: Y; I3 dswitch n8 G& z& A5 o' F3 A
case 1
: W9 t, S, f! P- W j0 N %建立机器人模型+ E/ J4 H6 m; E
% theta d a alpha offset
2 d9 a* E+ F; P4 f( U9 zL1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数
; l3 ?6 V: ? Q; F# lL2=Link([pi/2 0 0.56 0 0 ]);
& G5 a9 z T: R! A/ C aL3=Link([0 0 0.035 pi/2 0 ]); F0 X% A. ^" v7 l8 z7 Z/ x
L4=Link([0 0.515 0 pi/2 0 ]);
o2 A& @7 w( L* f8 W" Y* AL5=Link([pi 0 0 pi/2 0 ]);
6 E( J& ?7 g5 ML6=Link([0 0.08 0 0 0 ]);! F/ g* Q, D5 Q/ W" A( M# u5 T
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman# {4 i: z8 K* \$ S/ N0 V
robot.plot([0,pi/2,0,0,pi,0]);%输出机器人模型,后面的六个角为输出时的theta姿态. a7 ^1 ^/ @5 V* b
robot.display();
3 n$ D2 J/ j$ I) X. Xteach(robot);
' A" e+ g1 v, I, P, [! z7 F p, Y3 C$ v* R- I% @1 d
case 2
7 \( f8 V* Y: {# m" b%建立机器人模型
/ c5 z: |: t, R7 j% theta d a alpha offset
0 n' a) W. b3 ~! r( l. _L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数/ y; g* K4 i5 N. e5 z: ~
L2=Link([pi/2 0 0.56 0 0 ]);
( b! _9 h3 Q Y8 J; u5 k, QL3=Link([0 0 0.035 pi/2 0 ]);7 d3 {1 _5 r) J. n( W
L4=Link([0 0.515 0 pi/2 0 ]);
3 y1 a; h0 X5 Y3 A& e' b5 VL5=Link([pi 0 0 pi/2 0 ]);3 s2 @0 \) z2 q$ W( p2 W6 p
L6=Link([0 0.08 0 0 0 ]);
2 m/ d4 r8 b! W& orobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman8 X7 e6 J' j) w& t# S
theta=[0,0,0,0,0,0];%指定的关节角
0 o8 M2 ^. P# H' c& y5 Y+ Sp=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p
2 ?: l N) E) W/ v% Rq=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q
7 R' k, z4 M8 W! U- [8 y3 H
2 c7 K; D* o, \# ccase 38 n Z6 P5 i- |6 d3 T
%建立机器人模型
* n E! ^+ ?! k% theta d a alpha offset+ _" i- l, B% v" `! X" z( o2 r
L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数 `( i: d( \$ \" S# b
L2=Link([pi/2 0 0.56 0 0 ]);
0 s8 ^' W- l$ E& T( \L3=Link([0 0 0.035 pi/2 0 ]);
( l! a# p# @: n0 mL4=Link([0 0.515 0 pi/2 0 ]);; n% B5 }6 V6 p1 W
L5=Link([pi 0 0 pi/2 0 ]);2 w, Y4 S1 g% U! r! L8 ~( L, N
L6=Link([0 0.08 0 0 0 ]);: p$ S# G8 k" n3 p
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman( m; {1 \/ N+ e' ~# y
T1=transl(0.5,0,0);%根据给定起始点,得到起始点位姿
; l% g6 o2 e8 g. XT2=transl(0,0.5,0);%根据给定终止点,得到终止点位姿
& C& ]1 U( l- S: @9 R+ f. H, X1 e
) A5 r: Z" s2 \q1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角
+ {7 [% n. C) U4 n# mq2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角 x: N. h2 G4 o) A
[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数
9 T9 m& T+ y7 s) h8 i1 Ggrid on
) V& ]9 I% y; c; OT=robot.fkine(q);%根据插值,得到末端执行器位姿) M) ?$ R+ S) w" V
nT=T.T; plot3(squeeze(nT(1,4, ),squeeze(nT(2,4, ),squeeze(nT(3,4, ));%输出末端轨迹
, }8 Z; i4 _7 s5 lhold on
0 j8 \3 ^/ c, U) d+ |# Lrobot.plot(q);%动画演示
. E' t$ p. }1 l( X3 a3 X8 s' ?end: o( b4 ?* ]- v- s2 G- R) k. J! n' M
3 m: G3 R$ Q* c然后修改了下连杆的D-H参数,以及起始和终止点的参数。
& B1 w& E, ]- }$ r%按UR5的DH参数修改后,第一个点打孔的轨迹+ u# q, [, X3 |/ e
%建立机器人模型
- v2 f. i7 O9 M+ u6 B* F% theta d a alpha offset
8 K- i8 h% ^* q2 ~$ V1 P% mL1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数
- d3 G' s1 O' ^% v8 p: ^$ J3 WL2=Link([pi/2 0 -425 0 0 ]);
0 V6 ]6 g/ H0 C; lL3=Link([0 0 -392 0 0 ]);: _0 ?9 r4 W, T! L
L4=Link([0 109.3 0 pi/2 0 ]);$ |$ O2 c& I3 z; B8 ?
L5=Link([pi 94.75 0 pi/2 0 ]);; ]% |0 u x/ x" l. S8 H
L6=Link([0 82.5 0 0 0 ]);
6 k/ \6 P3 ? q/ R. R3 Vrobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
4 x1 _+ S" g1 G& Ntheta=[0,0,0,0,0,0];%指定的关节角
2 m; _! G% t) O Q3 H' u. ?p=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p' Z0 Q8 {% K9 F+ E0 z' w
q=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q/ ` L {8 a! e' T8 H5 T
v: d# c1 J U; W _- ^0 M+ J- r9 V( v1 n l
%建立机器人模型: m" ~ V; I* e# _) P: V
% theta d a alpha offset0 h- T8 B$ I% w6 K, L( ]* O+ G& |
L1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数
! S# V. D! r9 y- v* k/ NL2=Link([pi/2 0 -425 0 0 ]);
6 i0 `- k; J1 J1 r4 @L3=Link([0 0 -392 0 0 ]);2 \7 K( D1 b# r
L4=Link([0 109.3 0 pi/2 0 ]);6 j1 \& `6 [3 h
L5=Link([pi 94.75 0 pi/2 0 ]);6 S0 z; p7 z. m4 Z9 r- P6 l1 p8 a b
L6=Link([0 82.5 0 0 0 ]);
$ T# z# `" `: Q6 v; ~$ m3 c yrobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
/ E1 s, U9 d4 x3 C/ b* xT1=transl(-33.8962,70.5806,-53.6681);%根据给定起始点,得到起始点位姿2 T6 u$ a+ j9 f* i
T2=transl(-31.3206,68.8281,-55.4449);%根据给定终止点,得到终止点位姿# w# g/ V2 ^! O1 Z$ ~
q1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角0 T1 u' _1 n0 Z( Q/ _- x
q2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角
* L1 u3 }. _1 I- P1 |, m[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数9 ] g5 N- q% f3 n9 H
grid on
3 `5 q5 u/ M% W. c% I) jT=robot.fkine(q);%根据插值,得到末端执行器位姿
1 P- W1 H, \ C+ m; znT=T.T; plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹' M( K) m" ?6 F" j: F
hold on# d, _8 t, E+ q) k# C7 ]3 f
robot.plot(q);%动画演示
0 u% n( ^: H' b( Z9 y/ s& y3 T& b9 ^4 M# Y; a4 s) j! v6 b; n
4 d7 [$ t9 J) {( l( |& c
机器人可以显示出来,但自动轨迹规划时出错。% H+ O7 p u$ m1 C9 R
* L3 j" N- r. e
出现如下错误:“6 M0 o3 U, o8 h* L" _1 w8 P
警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.375755' _$ ]3 s4 A5 s
> In SerialLink/ikine (line 244)
6 b% H* n) p! g' {5 b4 S In t (line 27)( K# n4 z& ^3 b) Q: S
警告: failed to converge: try a different initial value of joint coordinates" F1 M9 f& ]. l* W3 w
> In SerialLink/ikine (line 273)
9 S) C }8 [0 Z( T; q! U In t (line 27)+ s5 \( Z/ r# y' {) o
警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.40822
% ]9 U0 x W. e' r> In SerialLink/ikine (line 244)
% O# }* y" f7 L4 l; F/ ]; M In t (line 28)2 ~7 a# s6 C' U
警告: failed to converge: try a different initial value of joint coordinates
( \& D# l. V$ M+ S> In SerialLink/ikine (line 273)
1 b& Z: D) S, K In t (line 28)
& U4 w5 A# M: ~! a( G/ A6 k6 }错误使用 SerialLink/fkine (line 84)6 s k' R( q. r* D* k/ l: T
q must have 6 columns4 T& P7 _" ]! g3 o t
( W8 b. |. X" ~" `: e出错 t (line 31); j; u' j3 J0 c8 }' t
T=robot.fkine(q);%根据插值,得到末端执行器位姿”, b& J& L! a6 ^" [9 G$ E6 Z' R
: K' v, J" V1 w: N2 i6 d. o) P3 L: h
调试发现q1和q2都是空矩阵,导致q也是空矩阵。
& s& n5 [( o9 X为何得不到那2点的关节角?
" g' o# E. M1 q% y# L
. t5 r9 f' [! l1 K' ?: A9 {" l) V7 c R. t1 a/ @( b, f) m7 A5 h$ b
, f& D: ?, E6 ~% \0 b3 k) L |
|