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

机器人问题

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

该用户从未签到

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

该用户从未签到

5#
发表于 2020-10-14 15:23 | 只看该作者
有可能是超出了工作空间,也有可能是迭代次数不够。
1 J5 A4 `/ t( v. R) x( V如果是迭代次数不够的话,可以试试增加迭代次数(默认是100)或者改变迭代时候的初始关节向量
' j9 R' \" m* w) ^* k+ Drobot.ikine(T,'rlimit',200,'q0',[pi/2,0,0,0,0,0]);%rlimit改变迭代次数,q0改变迭代初始关节向量
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 13:20 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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