|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
下面的代码在2015b可以运行;4 l# v7 {) w( _2 R* w$ F
clear;
: c3 y; I% n' \5 G$ u0 uclc;5 w4 U. E5 N% s
startup_rvc;& o u# S3 E: N! E% t4 r1 W2 r
n = 3;
+ i1 R3 e% U+ tswitch n
! w) M# k. i2 ^# Q6 k case 1
& q5 y5 T5 K2 Q+ l% i: K; c6 \5 X# ~ %建立机器人模型. g" ~/ \: B- V. [
% theta d a alpha offset
; \8 F7 C v/ o7 a& S+ ML1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数, [, c. I. X4 j1 W0 K! H
L2=Link([pi/2 0 0.56 0 0 ]);+ m: j0 J+ m4 M3 ]) B
L3=Link([0 0 0.035 pi/2 0 ]);: ~% o! R& m* d
L4=Link([0 0.515 0 pi/2 0 ]);
. M( q) Y! i5 h6 A! {L5=Link([pi 0 0 pi/2 0 ]);
, z y0 L* D/ ?$ tL6=Link([0 0.08 0 0 0 ]);0 s! ^9 a3 n$ ^% C' ]; p- p9 q8 r4 g
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman+ y6 R0 p; S: { M/ a6 R
robot.plot([0,pi/2,0,0,pi,0]);%输出机器人模型,后面的六个角为输出时的theta姿态4 z3 c# e) W; G, U* v" z# I6 A
robot.display();/ k3 i7 Q2 t1 r' ]) W
teach(robot);/ E# {; b' V7 O, v: A+ y
& P# }* v* K, H/ L; V5 p! A/ zcase 24 z2 b( q- L) m& P: }5 F5 S
%建立机器人模型
1 K7 A9 }: |. N' H% theta d a alpha offset
$ d2 w3 c, s& X/ B3 c, ~; _L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数
5 h: r1 ^ |. V* n/ W8 y T: VL2=Link([pi/2 0 0.56 0 0 ]);) b( D* Y4 E1 I' @% L
L3=Link([0 0 0.035 pi/2 0 ]);
+ j7 H4 N/ w( N: Q! e9 vL4=Link([0 0.515 0 pi/2 0 ]);1 M: r; ^5 w: {9 f4 a& R; |, W
L5=Link([pi 0 0 pi/2 0 ]);
" `# D) `9 f! [9 X. yL6=Link([0 0.08 0 0 0 ]);
8 W: K5 q9 b1 Z- {9 Z8 t) Erobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman" ? q9 E. v( g0 Z
theta=[0,0,0,0,0,0];%指定的关节角
7 S- p* X' {7 M2 r! S8 N B: bp=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p4 [- S& z5 ~$ `* n
q=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q
, g" ^1 w! h$ I |: s0 v* @; x* S- r5 `) d' q& Q; k. z& Z
case 3
9 S) v4 N0 x6 _ w%建立机器人模型4 X5 \) d) U4 ^# q
% theta d a alpha offset
) p8 I$ O* o" s) b: }; WL1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数+ }3 M$ u) b+ \; S3 h: i. h
L2=Link([pi/2 0 0.56 0 0 ]);
+ B, g- e: Z! U! d$ qL3=Link([0 0 0.035 pi/2 0 ]);& t: h+ U: l7 j' W; N5 ^/ ~
L4=Link([0 0.515 0 pi/2 0 ]);0 b3 r: j9 H! i. O4 H
L5=Link([pi 0 0 pi/2 0 ]);9 q& w9 V6 \- ^5 _& i9 ^# Q9 I7 r5 L
L6=Link([0 0.08 0 0 0 ]);9 B/ R& \# t1 `, Z
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
Z/ G' f5 I/ t" j) _T1=transl(0.5,0,0);%根据给定起始点,得到起始点位姿
2 y9 J O2 J- s5 @% g% n* O- p cT2=transl(0,0.5,0);%根据给定终止点,得到终止点位姿
0 v# F& A+ B& Y0 t3 }: A! N- ]; a/ k& z7 m+ Z. T7 ]# D1 U) ]
q1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角
7 _. P% b _8 v$ R4 d6 Jq2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角# g9 r/ Q7 P4 A* @
[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数( `( C' H9 m* u2 N2 e1 ?# D
grid on, }4 L o/ q0 d8 l$ N6 R( ?0 p
T=robot.fkine(q);%根据插值,得到末端执行器位姿
( o- z" ^( N* C: K+ XnT=T.T; plot3(squeeze(nT(1,4, ),squeeze(nT(2,4, ),squeeze(nT(3,4, ));%输出末端轨迹
, Z ^; m: k! y6 dhold on- y+ i' w- O! ~0 G3 o
robot.plot(q);%动画演示( Y1 g) P& f& u: I: ?4 D1 Z4 m
end
; } v4 v2 \& f; T1 K9 ^; P* b, q8 C# ^9 f1 k
然后修改了下连杆的D-H参数,以及起始和终止点的参数。
$ r, L+ p9 `+ F8 w%按UR5的DH参数修改后,第一个点打孔的轨迹 F2 F( R' A1 ^
%建立机器人模型) U2 p; i& i% D. t# D- j
% theta d a alpha offset$ K/ Q. Y$ E* F- A/ t4 }5 y
L1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数
W& q, ?7 X. D1 ~; ]6 PL2=Link([pi/2 0 -425 0 0 ]);! F! g. H; f" e3 S- ?: @- \
L3=Link([0 0 -392 0 0 ]);; d! X& ^0 s4 d2 R: I
L4=Link([0 109.3 0 pi/2 0 ]);9 _/ g8 ~% m: E+ U- _8 s8 W( D
L5=Link([pi 94.75 0 pi/2 0 ]);
2 A' e8 g9 d1 n' ~3 c( D) ?L6=Link([0 82.5 0 0 0 ]);
* g8 J# y4 o& J8 _% x- Frobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman3 q/ q9 M2 ]# v4 v0 ^
theta=[0,0,0,0,0,0];%指定的关节角* k ?6 K& T* P6 H8 j2 ?
p=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p
/ F) n3 Q7 ?; M9 O: w2 P( Sq=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q! |& I% t) p! _# }/ f4 ?
4 w% S/ M7 `: Y: T1 [4 {
0 @6 Y R" W Z7 X2 |1 @( X%建立机器人模型
4 N- n/ t9 Q: Q4 H% theta d a alpha offset1 G+ i, }! p& ~) P. O
L1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数
, c8 s! l) m# Y/ c- CL2=Link([pi/2 0 -425 0 0 ]);" Q* u& `- g1 ~* Q
L3=Link([0 0 -392 0 0 ]);
& K6 M# B) C, z6 sL4=Link([0 109.3 0 pi/2 0 ]);0 ~& o% Y7 c) K3 r
L5=Link([pi 94.75 0 pi/2 0 ]);
! B; M2 a v& lL6=Link([0 82.5 0 0 0 ]);5 ~$ o8 m% \( I$ P
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
& A0 q- |$ n e0 ]T1=transl(-33.8962,70.5806,-53.6681);%根据给定起始点,得到起始点位姿/ z j% ~# ] `: @9 ~
T2=transl(-31.3206,68.8281,-55.4449);%根据给定终止点,得到终止点位姿
2 {# u3 o) n* s" a, h3 P4 x: Y( Mq1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角
' r8 h# } D. {0 N% ^% o U/ Gq2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角
/ I( s3 ^3 X; ]+ P5 W8 w/ ~. T[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数: {3 w! A/ Y% q) v9 a+ Y
grid on* F3 B! d2 N* p# O4 v
T=robot.fkine(q);%根据插值,得到末端执行器位姿
- z1 @* R- ~" QnT=T.T; plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹9 Q+ X* N: B/ v& }: I# e
hold on
6 s7 {3 x3 Q; j# K* w' x) Z. R7 {robot.plot(q);%动画演示( ~; |9 d0 X4 g; z! \
0 e8 U: h5 D# [/ {
8 c3 q5 e4 \2 C9 {9 \# b$ X
机器人可以显示出来,但自动轨迹规划时出错。
- B( e. D1 R6 v! h
% ^0 j2 S2 z( z出现如下错误:“) I5 W" o# H6 c% d% }5 j
警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.375755- G7 O" ?3 ?* n6 `$ I/ |5 c& k
> In SerialLink/ikine (line 244)
9 j; @/ w9 }0 P0 Y l In t (line 27); c; p2 W$ y6 w; M5 z
警告: failed to converge: try a different initial value of joint coordinates) S4 {7 A0 O6 Q* v& R
> In SerialLink/ikine (line 273)4 ~, k5 b+ E+ y9 }
In t (line 27)
* M% I4 m$ l9 l) v1 l' E0 w! y警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.40822
8 t' w1 f! C) F6 X1 |, m1 w: b> In SerialLink/ikine (line 244)
' r7 P4 e K' Y( O, `. T# c In t (line 28)& n7 a/ E1 i, k5 ]6 v T! e
警告: failed to converge: try a different initial value of joint coordinates, x5 d h0 d% G6 j3 `7 N3 |% A
> In SerialLink/ikine (line 273)
7 s+ K3 q* ?4 p; E$ t& ^1 @2 V In t (line 28)
. a% Z0 R& j( a' U错误使用 SerialLink/fkine (line 84)
, j, K/ s8 R: T6 {2 {: A' n$ Z1 ?3 Mq must have 6 columns
7 W& p a `9 J" [, |! K1 R8 P
出错 t (line 31) `: Q* c8 z, p7 Y2 }
T=robot.fkine(q);%根据插值,得到末端执行器位姿”
& m3 N3 b$ l5 O
8 p2 L* ~9 F8 [& q4 n! W7 p调试发现q1和q2都是空矩阵,导致q也是空矩阵。
/ X7 ^7 V: i; A- F- v8 j, _为何得不到那2点的关节角?
7 n- I3 L: b: D) N* f3 C' W
! G5 e$ D8 l8 D2 @' p1 y
8 @5 C# Y9 s, w- d) `( O0 T
, Q _* {. \! x y. p/ s& K; @; M |
|