|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
下面的代码在2015b可以运行;$ Y4 }' l+ v0 _; y2 A- A, `
clear;" L/ x( l2 `# ^; C
clc;
' C! v5 E+ P: u S0 Qstartup_rvc;) \/ C& |9 l s- F5 w3 n' T# h$ F
n = 3;3 n* Y! i; h9 @- O
switch n
$ D6 }3 s' V7 q) c case 18 ?8 G, G3 `" @& Z( M
%建立机器人模型
- t4 q) u. ^8 [6 U4 K, U4 @% theta d a alpha offset& ~# K, C' B- [4 t
L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数
& a& V- r: w9 L$ ^/ VL2=Link([pi/2 0 0.56 0 0 ]);
( y) t& ?- D: p0 C1 G, V/ U! ^. BL3=Link([0 0 0.035 pi/2 0 ]);+ v8 E" B' A' _) R [
L4=Link([0 0.515 0 pi/2 0 ]);
& C8 |0 r A$ z2 _4 kL5=Link([pi 0 0 pi/2 0 ]);+ S3 L) x5 ~$ p7 g" p) Z! t
L6=Link([0 0.08 0 0 0 ]);
- f& M' C( k$ F, {. ~) [2 urobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman' @( P$ s; M4 I0 F. T. t" h
robot.plot([0,pi/2,0,0,pi,0]);%输出机器人模型,后面的六个角为输出时的theta姿态
2 Q" y4 |* e" Q' h' _! H- A9 d! ]robot.display();
* [0 J: U, A2 M; @teach(robot);6 C9 f6 v% N! [* {7 @0 t2 V
, A/ \* ], s6 D6 v e! r/ E9 ~case 25 i0 Q% K3 {' U6 L
%建立机器人模型/ S2 P( N, ^: H6 Y( Q8 r7 g% c
% theta d a alpha offset6 t& B# j# A6 U
L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数. Z0 Q1 s; z- F. Q2 o! J7 e3 D; L; M
L2=Link([pi/2 0 0.56 0 0 ]);
1 x" A) i4 D9 S- hL3=Link([0 0 0.035 pi/2 0 ]);
/ I" [% w% J3 K% C' }L4=Link([0 0.515 0 pi/2 0 ]);
, L7 }" y6 n! J0 N1 b" ?, jL5=Link([pi 0 0 pi/2 0 ]);' c) e/ t8 p- I) N/ g% T( m
L6=Link([0 0.08 0 0 0 ]);
9 i: O# {2 M: ]3 Y& F/ Jrobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
- o3 W }! G9 \) r4 y# itheta=[0,0,0,0,0,0];%指定的关节角) I7 W" e/ K) H
p=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p
( B- f, ?% q# w. eq=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q* J2 q R0 r, J4 @) E
5 M8 j5 \/ ^: O. j' acase 3' N# M4 r- ]" v& {6 d
%建立机器人模型
$ ?( y# _0 I& j; N1 I" {5 i% theta d a alpha offset
0 [, {5 x' H# z1 n9 i3 U! X+ FL1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数7 `% T( Y. R, O4 a0 }4 [
L2=Link([pi/2 0 0.56 0 0 ]);
( O' C& T2 [) n. z$ b6 ]0 l& H3 }$ GL3=Link([0 0 0.035 pi/2 0 ]);
0 ~' I; H j4 F1 |) ?1 yL4=Link([0 0.515 0 pi/2 0 ]);$ U, @4 H5 ~2 d, o
L5=Link([pi 0 0 pi/2 0 ]);* f% X! A y1 F4 _: c# L
L6=Link([0 0.08 0 0 0 ]);
; f, f) f7 ^0 ?" Srobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman. B3 m" b8 ^, f6 h7 @6 D
T1=transl(0.5,0,0);%根据给定起始点,得到起始点位姿
2 o: R; r/ s1 n8 x2 m4 rT2=transl(0,0.5,0);%根据给定终止点,得到终止点位姿
}7 n9 L% l6 I0 I: o q
" Y! H$ f0 u u3 [ e. M5 `' Uq1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角( i1 ~+ p) o) d- i8 L" Q4 w3 d$ {
q2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角
. Z% K5 N- q2 x2 k[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数
# S9 O- v [1 x9 w. ngrid on0 F# i r% ]1 y3 X/ |# W+ ^! g, {
T=robot.fkine(q);%根据插值,得到末端执行器位姿2 J# n5 u9 S9 S& p: w
nT=T.T; plot3(squeeze(nT(1,4, ),squeeze(nT(2,4, ),squeeze(nT(3,4, ));%输出末端轨迹
/ u) Q5 U- @' x8 _; N! Khold on( q% a* @# }- G# a
robot.plot(q);%动画演示% R. w* X4 N! b) s& E
end
% v5 O. I$ ?/ T7 D8 V2 J2 L& M5 m" a% c
然后修改了下连杆的D-H参数,以及起始和终止点的参数。5 m$ E+ p0 Y! ~
%按UR5的DH参数修改后,第一个点打孔的轨迹
/ Y) T/ n8 x7 L; c%建立机器人模型
' f6 L8 M9 `- V: h( d% theta d a alpha offset
+ y: o4 d6 O; n' hL1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数
; t! w- Q5 t; n k7 gL2=Link([pi/2 0 -425 0 0 ]);
% m' m2 k D- ^4 c6 \L3=Link([0 0 -392 0 0 ]);
3 R% i# g2 B* _: g* A( W8 CL4=Link([0 109.3 0 pi/2 0 ]);6 Q" G- m4 S/ P2 |. L `* T7 A
L5=Link([pi 94.75 0 pi/2 0 ]);
$ r8 A: \" T: @( t3 s' kL6=Link([0 82.5 0 0 0 ]);
2 O7 `+ R: J9 r" ` xrobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
% G/ `1 k3 m3 atheta=[0,0,0,0,0,0];%指定的关节角
, c9 y: Z' F& ]+ q4 Vp=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p% b" G2 T+ |+ C4 R. j
q=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q# y$ L: l$ ~- l9 ?" q; z9 {) [
6 }4 Q. y+ Z, _5 ]3 o
: g+ ?4 C9 e4 K/ I' ~8 ~9 ~
%建立机器人模型9 U6 e% h. G, d1 F' X I: g2 V! v
% theta d a alpha offset
8 {7 T6 E, R1 L( z4 @$ WL1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数
3 g j! @$ N; O. e% j7 U. C* dL2=Link([pi/2 0 -425 0 0 ]);# h. |4 I# K7 k" D$ Y
L3=Link([0 0 -392 0 0 ]);* U- Z1 R/ N! |
L4=Link([0 109.3 0 pi/2 0 ]);% q& G% l5 ]$ N( V0 ]6 i& U
L5=Link([pi 94.75 0 pi/2 0 ]);
1 f' }# l& _' T2 d# nL6=Link([0 82.5 0 0 0 ]);8 C: g* G: L4 S2 l
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
. T( y) W) T. _T1=transl(-33.8962,70.5806,-53.6681);%根据给定起始点,得到起始点位姿
* t7 p/ D, {' Y) c. N4 JT2=transl(-31.3206,68.8281,-55.4449);%根据给定终止点,得到终止点位姿6 x5 |: {& ?, ^. M- j/ R ~7 }
q1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角
2 m5 F f3 n3 n; } l; G& xq2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角
2 @) R+ l1 a& z2 j4 Y[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数
$ e! n) \# B/ ~# ygrid on
3 j3 g; y* |3 ^$ ^+ O1 ~T=robot.fkine(q);%根据插值,得到末端执行器位姿
' ]& n) V) M/ anT=T.T; plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹
1 R4 E" p) m4 D( q3 Ohold on6 S4 F, R- \* ]. `: r1 ] C
robot.plot(q);%动画演示
; H' ?; _: G! I* N+ V" g6 o) D% u% f7 `
: F1 o2 \" u( E) p; y) F
机器人可以显示出来,但自动轨迹规划时出错。" y$ U q& o% }+ Q$ O) U+ u, [, l
! k/ p0 S I) z出现如下错误:“
, |6 z' T8 Z6 R% q0 f警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.375755
: r& o" f; r2 @0 a" D; \; O. _' O> In SerialLink/ikine (line 244)2 t' _# {6 v- L- C( ?5 Q
In t (line 27)$ |7 i* U. K" G3 y1 G2 {2 E9 G
警告: failed to converge: try a different initial value of joint coordinates
- X$ E% o9 p: k% q, A1 U: S> In SerialLink/ikine (line 273)
; K' \0 G/ {* Z( s. w In t (line 27)
K" U0 _& l& R/ G' o5 K; \5 }警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.40822( k. b7 y$ M; c% {( v! e! O
> In SerialLink/ikine (line 244)3 x$ d- J& C) r+ n
In t (line 28)
# [1 a- q$ W3 X6 J# F/ k0 B: K3 |警告: failed to converge: try a different initial value of joint coordinates
0 y' u9 [! g6 r3 C> In SerialLink/ikine (line 273). q& c$ t" V# A. J
In t (line 28)
: P9 r) x1 u5 Q错误使用 SerialLink/fkine (line 84)# x4 j, R K/ K/ ^
q must have 6 columns% |% \ i, o3 E6 ]0 u/ C
* Y. X, w v4 ^出错 t (line 31). X; _+ K0 }8 c4 T
T=robot.fkine(q);%根据插值,得到末端执行器位姿”2 W3 f" y; f" F; ^2 _: `: v
$ {+ P$ k/ t( J q; T5 u调试发现q1和q2都是空矩阵,导致q也是空矩阵。
5 @: Y3 p8 f$ |% S: f为何得不到那2点的关节角?
9 j. f# Z- H: G) a5 S- Y4 b
/ j" O' j& @' B: g# F" M
- h- }5 Y9 D6 Q3 Y' \; P' S6 f. r# C/ E' A0 D0 m% D0 N
|
|