EDA365电子论坛网
标题:
机器人问题
[打印本页]
作者:
uaidenp
时间:
2020-10-14 13:28
标题:
机器人问题
下面的代码在2015b可以运行;
& v: W/ A+ K6 X
clear;
, J, t/ M, Y; Q& H. S7 z
clc;
2 s x: G4 m2 O* }# |# r- M
startup_rvc;
: d' p$ Z+ F/ h. w7 A1 G' }
n = 3;
: ^0 @0 H. d: h$ f* \& J
switch n
( J( \1 G4 G4 ]7 p
case 1
3 p/ z7 [, w3 f4 l4 o& Z
%建立机器人模型
2 V$ G) @9 y; ^" H8 v1 h, u
% theta d a alpha offset
- l6 o0 Q3 F) ^" p0 W
L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数
6 r) N Q8 ]5 V! F" _
L2=Link([pi/2 0 0.56 0 0 ]);
0 y5 j, K5 Z% Y% r& m; {* ~& W
L3=Link([0 0 0.035 pi/2 0 ]);
* ~" Z* L, i9 T+ {/ d
L4=Link([0 0.515 0 pi/2 0 ]);
0 o) e# {+ ~6 A" F: l
L5=Link([pi 0 0 pi/2 0 ]);
# x9 @2 v! I3 k1 T. v% W3 J4 Q# X
L6=Link([0 0.08 0 0 0 ]);
& V5 h- c1 F5 @# V8 v2 _, o
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
/ h+ t& b* | L3 p% r1 R$ a
robot.plot([0,pi/2,0,0,pi,0]);%输出机器人模型,后面的六个角为输出时的theta姿态
, ?* S1 v$ J* p
robot.display();
; S$ `+ M* ^$ ~1 r3 {
teach(robot);
! c2 g' t; o5 p( h+ r( g9 r
9 j' t9 y. n. h! X3 p
case 2
. ?# I# a, P. k8 D
%建立机器人模型
6 k* J+ r% ^" r# M& C
% theta d a alpha offset
% ~& ~6 ?1 h4 T0 P n
L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数
0 P' S3 n I) ^: [7 w9 |3 Q
L2=Link([pi/2 0 0.56 0 0 ]);
# P; R: k+ m- A; H. U
L3=Link([0 0 0.035 pi/2 0 ]);
" [& o# s9 o9 j0 f
L4=Link([0 0.515 0 pi/2 0 ]);
7 O3 H, j9 H+ ]. x4 I
L5=Link([pi 0 0 pi/2 0 ]);
, d1 W2 O6 F: L6 Y+ z
L6=Link([0 0.08 0 0 0 ]);
4 ]0 s p) D: s p% a6 q
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
3 M8 l' {- [, v, y# r1 W
theta=[0,0,0,0,0,0];%指定的关节角
8 Q. T# [: x Y9 G+ w9 X5 n
p=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p
7 e ?) {5 B+ `& f
q=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q
- S( ~7 D d/ z& }( Y
! B7 }" @% B, O
case 3
- W$ H8 N9 ~- ~4 w' i8 i! _3 ?
%建立机器人模型
: x6 B$ h& w% n* u/ y
% theta d a alpha offset
& t0 G: }2 ?0 o
L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数
+ b. @5 o- A D ]! N
L2=Link([pi/2 0 0.56 0 0 ]);
5 J4 r! d! @6 p
L3=Link([0 0 0.035 pi/2 0 ]);
8 w, L, b8 i" D5 \1 e
L4=Link([0 0.515 0 pi/2 0 ]);
# L! y/ W/ o$ }5 i; q4 [$ R1 @- H
L5=Link([pi 0 0 pi/2 0 ]);
" X3 l2 J6 t+ @8 J0 O8 h
L6=Link([0 0.08 0 0 0 ]);
& B6 Z- C* R& v7 f% Z6 m
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
$ G, V f$ W; V V# W) i" L0 g
T1=transl(0.5,0,0);%根据给定起始点,得到起始点位姿
3 M7 k6 b# _3 |6 e
T2=transl(0,0.5,0);%根据给定终止点,得到终止点位姿
[) \$ c( s w6 l, _5 `
; o# c3 u6 \: q. Y9 h
q1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角
0 G0 B/ ?2 R' J% e0 o5 p
q2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角
. H3 f: N) X& y( D" t4 ]
[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数
7 O8 j2 y2 ~6 C% r; a
grid on
2 B4 t& ?$ | a" n9 |
T=robot.fkine(q);%根据插值,得到末端执行器位姿
) S9 B1 _# ` u4 |
nT=T.T; plot3(squeeze(nT(1,4,
),squeeze(nT(2,4,
),squeeze(nT(3,4,
));%输出末端轨迹
: h. z$ O1 D: H# A& T0 h4 P, G0 M
hold on
$ e4 o2 |1 [) }2 @
robot.plot(q);%动画演示
0 E, e. I; u! Z
end
' G4 \. V$ H x* K
; q( q: m/ J' N7 `8 p& P
然后修改了下连杆的D-H参数,以及起始和终止点的参数。
( c1 r* Z8 d/ f4 |# Y9 f
%按UR5的DH参数修改后,第一个点打孔的轨迹
0 I" U8 q4 f( e' }5 |1 P ?
%建立机器人模型
# x3 g" ~2 `7 j1 y0 s
% theta d a alpha offset
' J/ Y: g9 C9 w% e
L1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数
& B% s. ?5 X+ ~! o8 c
L2=Link([pi/2 0 -425 0 0 ]);
5 u( [! C) y7 m, {5 _! ]
L3=Link([0 0 -392 0 0 ]);
( Z9 N' T+ D1 g9 I6 e" v
L4=Link([0 109.3 0 pi/2 0 ]);
. I' _4 b) a* }& F" H
L5=Link([pi 94.75 0 pi/2 0 ]);
5 [( x3 N. w) { O
L6=Link([0 82.5 0 0 0 ]);
% M: P+ g* R' S, {) F2 m
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
8 m9 q* R# m: e- n& M5 z% A
theta=[0,0,0,0,0,0];%指定的关节角
! J7 y) s" Z& I: V2 W3 w( i) }5 c4 L
p=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p
4 d4 e/ x) j2 Z, `8 e& u
q=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q
" {( w. [' W6 c
+ Q" i& c" `4 M1 ]2 W
% _. o7 w0 J, A* U
%建立机器人模型
6 r9 a) S2 @: V" ~" `3 Q
% theta d a alpha offset
5 J* j# M! U( e. k
L1=Link([0 89.2 0 pi/2 0 ]); %定义连杆的D-H参数
) w- P5 A, L/ x9 M0 I
L2=Link([pi/2 0 -425 0 0 ]);
9 K, D$ M" e# X/ s( A" g K |
L3=Link([0 0 -392 0 0 ]);
0 E% `* t2 N! d _1 Z( c
L4=Link([0 109.3 0 pi/2 0 ]);
3 F! T3 g2 y; [' ~0 u* F
L5=Link([pi 94.75 0 pi/2 0 ]);
: B5 k9 R) _6 D" ^8 \: p% I$ e/ w
L6=Link([0 82.5 0 0 0 ]);
9 l ~# _8 \6 l0 j5 h& i
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
& ]" ~, I" s$ f/ O+ d' _* \
T1=transl(-33.8962,70.5806,-53.6681);%根据给定起始点,得到起始点位姿
8 r T: H# {1 J& g/ y6 {* R
T2=transl(-31.3206,68.8281,-55.4449);%根据给定终止点,得到终止点位姿
% u& G- j2 O/ Q0 C# ~
q1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角
) C1 E p0 R; i0 Y
q2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角
, Q+ a! M1 v& t' a0 Z0 O
[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数
. y" R7 Q! q- h% U9 ^
grid on
! W: P6 B6 [) b6 A5 M5 N
T=robot.fkine(q);%根据插值,得到末端执行器位姿
1 B1 r6 J m1 _4 f: l
nT=T.T; plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹
: z! U% x% M& d6 s/ h' r
hold on
* i0 v7 Z' F5 ~; |2 K T* Q- p
robot.plot(q);%动画演示
6 P/ H; j" r* \. d- }% X
; F: [& _9 p1 j- ~9 n& F. ~
# t$ }$ l2 ~1 [- a7 G1 \, a
机器人可以显示出来,但自动轨迹规划时出错。
. X3 F* T$ y0 x
$ J8 q/ y! j# ~1 D
出现如下错误:“
7 z# _- w5 z( b( @6 v
警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.375755
4 y* L0 H5 t' C3 d5 n/ W
> In SerialLink/ikine (line 244)
' q, g, X& H2 |' M4 D3 x3 P
In t (line 27)
4 K% C/ k, v' T! L
警告: failed to converge: try a different initial value of joint coordinates
$ W' D1 ~, m, }) O& a
> In SerialLink/ikine (line 273)
) }$ m5 j; Z+ P6 p* Q0 y$ D
In t (line 27)
+ }# n* t. c4 j
警告: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.40822
: Z. @3 Z: ]' G- A5 v" _' I+ o4 }
> In SerialLink/ikine (line 244)
0 w# X' n* y& t1 E, o/ N
In t (line 28)
n( z' i# u+ Q, V8 k7 Z
警告: failed to converge: try a different initial value of joint coordinates
3 {( K( E& t& d$ W5 P
> In SerialLink/ikine (line 273)
& Z q: W4 t, X8 `4 {- Z- d
In t (line 28)
5 f& Z! \$ V: C& C( e) b: i7 `' H
错误使用 SerialLink/fkine (line 84)
' H( K; c) e4 s) e- E1 K
q must have 6 columns
. O r9 R9 w/ t1 \: B
: ?# r3 I# U1 M- X& ]7 f6 z( ]/ B4 \& Z
出错 t (line 31)
1 \9 j& M9 N8 t5 c
T=robot.fkine(q);%根据插值,得到末端执行器位姿”
- i9 E+ p8 }2 F; s) ^2 ]( i
7 r6 ?& d9 Y0 Q! ?
调试发现q1和q2都是空矩阵,导致q也是空矩阵。
: k* J5 t6 z/ j. t8 S" Y
为何得不到那2点的关节角?
3 D7 A, c, z6 X; k7 ?3 l
! w/ k3 N% k) Z
& D L: s5 A5 Y1 b; x# f
0 H# C5 ^/ t \0 |/ T3 y
作者:
nkkopd
时间:
2020-10-14 13:58
帮顶!!!!!!!
作者:
大小的小
时间:
2020-10-14 14:28
路径超过机器人工作空间了
作者:
kekek
时间:
2020-10-14 14:40
请问一下,我是先robot.teach然后手动操作机械臂,再选取的两个坐标(杆件没有干涉,感觉完全可以达到的坐标),再ikine也显示超出工作空间
,建模的工作空间到底多大啊
作者:
llbnmo
时间:
2020-10-14 15:23
有可能是超出了工作空间,也有可能是迭代次数不够。
, }3 a8 [- a! K i# R* `0 B/ T
如果是迭代次数不够的话,可以试试增加迭代次数(默认是100)或者改变迭代时候的初始关节向量
4 _! e! j5 }. i6 D/ F* _
robot.ikine(T,'rlimit',200,'q0',[pi/2,0,0,0,0,0]);%rlimit改变迭代次数,q0改变迭代初始关节向量
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2