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

机器人问题

[复制链接]

该用户从未签到

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

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

该用户从未签到

5#
发表于 2020-10-14 15:23 | 只看该作者
有可能是超出了工作空间,也有可能是迭代次数不够。: k* s; a# ], q6 }8 c( a
如果是迭代次数不够的话,可以试试增加迭代次数(默认是100)或者改变迭代时候的初始关节向量$ S6 e+ v$ Q2 H. L5 @4 s. A3 W
robot.ikine(T,'rlimit',200,'q0',[pi/2,0,0,0,0,0]);%rlimit改变迭代次数,q0改变迭代初始关节向量

该用户从未签到

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

该用户从未签到

3#
发表于 2020-10-14 14:28 | 只看该作者
路径超过机器人工作空间了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 21:50 , Processed in 0.171875 second(s), 25 queries , Gzip On.

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

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

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