找回密码
 注册
关于网站域名变更的通知
查看: 1418|回复: 4
打印 上一主题 下一主题

机器人问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-10-14 13:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
下面的代码在2015b可以运行;" M0 k, g# g$ g5 L) N8 B
clear;
8 `$ Z. w" E0 @1 R1 fclc;* Y4 ?* j2 H( ?; O4 t9 O
startup_rvc;& M0 J/ H1 i; \$ d: N; a3 U
n = 3;8 A* K4 L0 o' N$ F  R
switch n5 V4 Q  c+ I0 c, [
    case 1
9 I% j) Z1 U! [' ]% L    %建立机器人模型4 d# m1 }& A7 L, I7 b2 J
%       theta    d        a        alpha     offset
- G5 n% x, Z" C9 F; V! k  EL1=Link([0       0.4      0.025    pi/2      0     ]); %定义连杆的D-H参数2 R0 S, n, Y. |) A- q7 }4 a
L2=Link([pi/2    0        0.56     0         0     ]);
: d$ K- Z. W; e0 J8 PL3=Link([0       0        0.035    pi/2      0     ]);
) J) J; r$ \* `3 h! }# D) \  YL4=Link([0       0.515    0        pi/2      0     ]);
$ d/ M, {0 O  Q" [9 T) @, }1 K3 A$ Q* kL5=Link([pi      0        0        pi/2      0     ]);7 |: @+ A" K- r( W/ P; y$ {- ?  B
L6=Link([0       0.08     0        0         0     ]);
7 c& e+ m. e" d  x) Zrobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
0 _3 w4 ]. d% r  R/ c! o( _& x* mrobot.plot([0,pi/2,0,0,pi,0]);%输出机器人模型,后面的六个角为输出时的theta姿态
) R0 w  X; ]& S7 t  Irobot.display();
: G8 r9 b0 _, W% V" O, steach(robot);- ~& O7 P5 ?# H9 m
- \+ v. ~9 |3 n" x- |) b  i
case 2; D4 d1 b. n4 _; P
%建立机器人模型
2 H& H- i0 V" U1 U%       theta    d        a        alpha     offset
  o6 V9 G- j+ o3 n2 m; n/ YL1=Link([0       0.4      0.025    pi/2      0     ]); %定义连杆的D-H参数7 C& i% `" l4 f
L2=Link([pi/2    0        0.56     0         0     ]);
5 ?* a' F0 ~/ yL3=Link([0       0        0.035    pi/2      0     ]);
; U- a  O8 {# j: K/ {; c( y5 Q2 z- r  YL4=Link([0       0.515    0        pi/2      0     ]);
5 A+ Z; {- N: V' }+ BL5=Link([pi      0        0        pi/2      0     ]);6 e' t% s  o! Y! D5 c
L6=Link([0       0.08     0        0         0     ]);' }: m0 O/ Q+ i9 P! q0 J, I) W
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
" p2 a- ?) Z' w* ^- wtheta=[0,0,0,0,0,0];%指定的关节角$ U* D5 ~3 O. g% F
p=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p# Y* v; ~! {/ s7 s
q=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q% n  g0 T, |( ^; S- \% \3 G# k6 N9 \# `
- Q% [) s! l; L. I9 |
case 3
( I8 G0 K' p1 ]3 i3 ~%建立机器人模型$ S4 v- s. X" P6 N! Q/ a+ c. `! D! v
%       theta    d        a        alpha     offset" G: K# |8 ?% E$ V6 L1 l6 E
L1=Link([0       0.4      0.025    pi/2      0     ]); %定义连杆的D-H参数
5 v9 Q$ n: Q# b2 j8 L; k$ wL2=Link([pi/2    0        0.56     0         0     ]);
$ Q5 \% K5 P: p; _+ O1 F0 jL3=Link([0       0        0.035    pi/2      0     ]);
  Y3 m/ R1 L; x! e$ @- _: u! TL4=Link([0       0.515    0        pi/2      0     ]);
: a" @" q' Y) u& J2 zL5=Link([pi      0        0        pi/2      0     ]);# z9 r( o# o5 S  O, V4 N5 t2 x
L6=Link([0       0.08     0        0         0     ]);$ V" ^; w; @0 H2 ^. |$ X
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
& ?2 b6 w3 ^2 h  H9 R$ P/ \2 M$ X5 {T1=transl(0.5,0,0);%根据给定起始点,得到起始点位姿
6 n; ~" o  ]# O- t! BT2=transl(0,0.5,0);%根据给定终止点,得到终止点位姿4 ?, w( `- q5 u
5 V: M, J7 M7 X& Y
q1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角" L7 f) R+ L) ~8 p: k& h" p
q2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角7 l/ c+ z$ c( [9 |
[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数) j# i+ @( F. y
grid on
/ }) w: G3 T8 Q6 LT=robot.fkine(q);%根据插值,得到末端执行器位姿
+ S% V. Q6 }! p" |1 H9 `nT=T.T; plot3(squeeze(nT(1,4,),squeeze(nT(2,4,),squeeze(nT(3,4,));%输出末端轨迹! P& r( w; Y8 A6 u( e
hold on. l1 |- e5 E5 B5 {+ }- R
robot.plot(q);%动画演示: W+ v; x: J  j
end" y" e8 O6 i3 V% O+ }
& h, f0 J5 O  T0 m2 Q* t2 r
然后修改了下连杆的D-H参数,以及起始和终止点的参数。
8 g9 A- w+ L: ~: ]4 g%按UR5的DH参数修改后,第一个点打孔的轨迹
; X8 Z0 A% b2 O, M3 C4 x% L; p8 ^%建立机器人模型
8 C% L, T; u6 |%       theta    d        a        alpha     offset
, D0 a( w" B+ `! KL1=Link([0       89.2     0        pi/2      0     ]); %定义连杆的D-H参数
2 ?( v, D! |2 H4 ~; O; SL2=Link([pi/2    0        -425     0         0     ]);  i( Z( r6 S0 ~: r
L3=Link([0       0        -392     0         0     ]);
/ Y: L: ]' Z+ s, [L4=Link([0       109.3    0        pi/2      0     ]);+ r$ Y" G3 i& ]0 @: ~1 y
L5=Link([pi      94.75    0        pi/2      0     ]);+ c6 r+ |, T' L
L6=Link([0       82.5     0        0         0     ]);
  y! R7 M: z6 Q8 R( P& hrobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
& Q# j. p9 R/ E" y. ?theta=[0,0,0,0,0,0];%指定的关节角$ A# a" U' r; o( q
p=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p
, I3 g4 l/ K' X% Y9 W' ~! R- y1 Aq=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q! H  A+ \, c! O1 W/ x
8 G, f; O* _$ u4 e0 \( v

6 A( U/ l2 r% u4 @9 R%建立机器人模型) p0 j( D; R9 v" V6 {0 B3 \
%       theta    d        a        alpha     offset
* W: A& x8 A; j2 A) M: oL1=Link([0       89.2     0        pi/2      0     ]); %定义连杆的D-H参数- i7 Q* b3 `6 H* R
L2=Link([pi/2    0        -425     0         0     ]);- R, ?6 _0 f3 X! I2 S7 p7 C
L3=Link([0       0        -392     0         0     ]);
# ]- Y8 r- Y0 d$ EL4=Link([0       109.3    0        pi/2      0     ]);
3 T/ T, |# e9 {' \L5=Link([pi      94.75    0        pi/2      0     ]);! r& ~; o" R, i, ?, d3 Y2 ^1 g: |- R
L6=Link([0       82.5     0        0         0     ]);
6 ]" K' e1 {3 I5 f2 s4 X& mrobot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman; [' L' t# n4 N* q
T1=transl(-33.8962,70.5806,-53.6681);%根据给定起始点,得到起始点位姿
$ Q5 O* l9 E5 l- t. C0 B* n- ?! U) N+ @T2=transl(-31.3206,68.8281,-55.4449);%根据给定终止点,得到终止点位姿9 x4 x" Q/ Z4 G. w
q1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角
' ?, e9 Y8 B' l( Q8 @/ {% g" Pq2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角
" s( ?  z: n* L3 b2 W4 Q/ b% I[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数
1 a5 V) V+ G9 w3 C1 Ugrid on
- J6 |  N" y$ }& d' {3 _$ D; h1 yT=robot.fkine(q);%根据插值,得到末端执行器位姿
0 r2 v% X9 H9 Q2 ^+ qnT=T.T; plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹
. g" X- G  O9 N6 Ihold on; i) c6 ?  R8 ^
robot.plot(q);%动画演示5 P6 d3 T7 X+ B8 F
( o: P9 X& g7 x. Q' P) O# U; z

4 M2 J: y  ?2 H) q0 \! w机器人可以显示出来,但自动轨迹规划时出错。% o) J% M; U) T/ t* S! l( l

# ~( X" F+ i' z/ O出现如下错误:“  f! {3 j7 Q! [1 l) Q. V+ t5 ?
警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.375755
% g) Q- j% s5 e) F' J/ @; z7 P> In SerialLink/ikine (line 244)
* I9 u4 N- |4 _: s* t  In t (line 27)
8 f( {! H+ T0 \, U' }* V2 Z. {. t- W警告: failed to converge: try a different initial value of joint coordinates
- X. \: ~# l  H8 ]/ `; w& k> In SerialLink/ikine (line 273)/ C" @! D( E& ?# i  o; h, N
  In t (line 27)% w5 ]/ \9 w. N4 O
警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.40822
. g6 [+ s. b7 \1 j7 y5 p> In SerialLink/ikine (line 244)
/ s* Q0 X- ?+ c8 n' P, \  In t (line 28)
0 _* t2 [1 f3 Y& _1 W/ b. F警告: failed to converge: try a different initial value of joint coordinates
/ t5 t2 K' U8 d( k/ g. d% }> In SerialLink/ikine (line 273)
9 K1 u) s5 d* G+ x" L# r9 A  In t (line 28)
7 j! |6 E% D5 E: u' v) K. g0 X错误使用 SerialLink/fkine (line 84)
( i9 L! |  u/ a8 ]' T; Nq must have 6 columns8 g4 R" C4 x% T- E/ D

* a) \3 f$ Z* ?$ k3 r出错 t (line 31)
* U+ o' z; `/ q! b0 I9 }3 D; W/ AT=robot.fkine(q);%根据插值,得到末端执行器位姿”
  l2 `0 c+ @  W# `' L9 H+ k! M7 g( B4 h# m
调试发现q1和q2都是空矩阵,导致q也是空矩阵。
  ?5 W' k: U9 m( ?- o3 W为何得不到那2点的关节角?
. M2 D8 _' P9 q  w

4 v4 \3 A+ U7 O, B: A* t  F0 `& f" ~8 ^2 ]
: T1 m5 u) x' X) ^' P

该用户从未签到

3#
发表于 2020-10-14 14:28 | 只看该作者
路径超过机器人工作空间了

该用户从未签到

4#
发表于 2020-10-14 14:40 | 只看该作者
请问一下,我是先robot.teach然后手动操作机械臂,再选取的两个坐标(杆件没有干涉,感觉完全可以达到的坐标),再ikine也显示超出工作空间,建模的工作空间到底多大啊

该用户从未签到

5#
发表于 2020-10-14 15:23 | 只看该作者
有可能是超出了工作空间,也有可能是迭代次数不够。
( y$ f6 Z/ S; [8 A8 I如果是迭代次数不够的话,可以试试增加迭代次数(默认是100)或者改变迭代时候的初始关节向量- X. \; q( u8 l7 [+ j! C2 ^
robot.ikine(T,'rlimit',200,'q0',[pi/2,0,0,0,0,0]);%rlimit改变迭代次数,q0改变迭代初始关节向量
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-22 08:33 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表