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

机器人问题

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

该用户从未签到

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

该用户从未签到

5#
发表于 2020-10-14 15:23 | 只看该作者
有可能是超出了工作空间,也有可能是迭代次数不够。/ Q" `5 |9 k0 {8 s
如果是迭代次数不够的话,可以试试增加迭代次数(默认是100)或者改变迭代时候的初始关节向量  n# T( N: H( I* c( L3 d) O3 Y
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-29 13:15 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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