EDA365电子论坛网

标题: #技术风云榜#matlab机器人 联合ug仿真 关于运动仿真实践 [打印本页]

作者: ededewa    时间: 2020-11-17 15:12
标题: #技术风云榜#matlab机器人 联合ug仿真 关于运动仿真实践
一一一一::确定ug支持的matlab版本
* k4 W; E: M- O2 j      从ug目录下的ug8.5\ug8.50\MECH\cosim\ nx_client.m文件可以看出! b: m: _* |" e5 u- Y) q- _( d) F
! f: d/ B& v. E+ v
: n7 G0 ?2 O) M" ^; ], C3 M  D
二二二二::进行ug设置& x, F2 }8 v/ X+ U3 A5 W3 g3 A& ?
       1111:::添加matlab目录和 ug读取matlab产生的仿真文件时间间隔=  设置为1 (一秒采样一次)4 D: G2 Z6 ]( z) B4 q
                  设置完重启ug& j2 o# F; I. q5 J
- x/ t' k) q1 {  E5 g

- W7 K- }; h/ c' ^2222:ug 运动仿真环境几个设置8 b$ v; g2 i8 P. ]/ H; d+ I
      1---环境
2 J# |+ y. r7 }  \# Z) c( [2 --- 建立12个标记点,共分6对(6个点在运动副,6个在连杆,每对csys方向和一个运动副相同)" ~" F* R  B, o# q' c
         3 -- -建立6个工厂输入和  6个驱动
% |5 O+ s$ ?; A         4---建立 工厂输入函数 和   6个 运动变量【【【 az(标记点2,标记点1)*180/pi*180/pi*】】】函数,
2 {# w! K7 L6 x& @0 [% h  f5 a                  说明::【az函数是返回 标记点1相对标记点2绕着z轴转动的 弧度,再*180/pi 就是转换为返回角度,,本应返回角度却反回弧度只得在乘*180/pi】& B& u: I2 X( U; x' V6 A- k% p
         5—加载函数  建立6个工厂输出【函数分别选为已建立的 AZ( 标记点 , 标记点)函数】4 m* V5 U2 g7 D0 g
                         6个驱动分别选择6个运动副和 6个 工厂输入函数
+ L0 S/ L- Y/ O        6-----解算方案【关于  仿真时间:由matlab决定, 仿真步数::由matlab的simulink中的NXMotion Plant Block 模块决定是NXMotion_step==100】7 c/ ]0 H2 Z, v! Z% Q7 N5 W0 i3 |
                     说明: 仿真步数==仿真时间/仿真步长    ,仿真时间不是现实时间而是虚拟时间,现实时间和电脑cpu的运算速度有关
' |, T; E; ^+ Z, z! B1 Y# w                            一般仿真设置::1 确定仿真   关节所转圈数   ==解算方案仿真时间/驱动中的 圈数 red/S 和 角度 deg/s
, z. H* {3 k0 H                                             2确定仿真   步数(也是变化次数)          ====直接在解算方案 设置即可
$ v  `) w, L% H8 L) {# j' X5 g
0 D5 H3 X8 g3 c( N7 k
8 h. `; `) ]  Q! U# K三三三三进行matlab设置   ' [9 ?( n2 j# [+ P5 Y
        1  设置matlab和ug产生的两个 .M文件目录在同一目录0 x2 K5 X& L# t& u. d
        2 测量ug模型关节长度 填入 matlab程序数据
0 U" S  ]2 ~" ~+ U* H         3 运行这个代码 和 ug产生的.m文件== motion_2_Solution_1_Plant.m文件( U) K# L3 [& _5 \) }
         4 设置simulink仿真时间和 程序t=0:1:150;相同也可大于但是会在末尾自动插值,插值的大小和末尾方向一致
, {0 S- M+ G5 p" q! J) Y=======================================================  g1 W+ x  ]3 g
========================matlab程序======================# Z- `& X) j5 B7 \2 Y/ ~( [" H+ R
%【z轴夹角==扭角   关节长度=z和下一坐标z轴距离   x夹角=和下一坐标三线之距离     】5 X0 r6 O5 ~6 g: {1 D4 j$ Z
%  =0=617.8157     =1= 640.8633   =2= 759.2167    =3=1335.9324  =4= 129.8272  =5= 133.5056   =6= 185.9378
7 l& I+ [6 X6 R/ L%变换顺序 先绕老Z轴确定 x轴 夹角(关节角)——》 在绕老轴X 确定z轴夹角(扭角)--》沿着新z轴移动 (横距)长度---- ---》沿着新x轴 移动(关节长度)
1 q) w# T$ q9 m8 f; g" IL{1} = link([0        0        0 1258.678 0],'mod');. U4 [( @/ Y" t
L{2} = link([-pi/2    0  0   0   0],'mod');
  }, t( R" ?; c5 ]/ Y. X; ]: s. |L{3} = link([0     759.2167    0  0    0],'mod');
6 _! R5 p! L( U1 k; q. c, cL{4} = link([0     1335.9324   0 0     0],'mod');- D8 V+ a% @9 @6 P2 }" K
L{5} = link([-pi/2  129.8272    0  0    0],'mod');
& D9 s5 C' S1 C7 \. x; |L{6} =  link([pi/2    133.5056   0  0    0],'mod');
" ^$ o0 ^8 q, I4 ?  k1 KL{7} = link([pi/2     186       0 0     0],'mod');
8 ^9 a& J6 V: E* k! }. _' R4 D9 z/ bp560m=robot(L);+ P5 r( w( T6 u
u=pi/180*2;%%初始角度全部是2度
- X' a$ L9 ^6 v; z  bc=[ u u u u u u u];%%初始化关节角: u6 w& Q2 \* Z
%drivebot(p560m,c)
( n1 A0 }3 g: U( s  k* P4 m3 @) T* v" z% g1 }

. ?. M4 H7 T2 x7 s' {" Q7 |% u  hT1=fkine(p560m,c);
: Y( t, ]( l# ]* J6 z. ]9 V5 T% U; nT2=[0 0 0 -1000;0 0 0 2000;0 0 0 1000;0 0 0 0];5 K% O# q/ E3 A& L; h
t=0:1:150;
! B% \8 q' l5 h* [' X" B, WT=ctraj(T1,T2,length(t));
& v3 h6 f/ E; C; ]/ B% t( Wp=ikine(p560m,T,c);
& W: m( Q3 A& T, h; x4 X
' b/ L% C; K' ^0 c; C! l2 U. ?, p
) z; z7 z% x8 S  m" {7 i8 n: jfor i=1:2:length(t)% 正常轨迹 i=1:length(t)$ {4 ?, L4 }9 W% i" T3 s/ r& k
x(i)=T(1,4,i);2 U4 x! ?9 L, |% ?' K
y(i)=T(2,4,i);( X% k& x4 v/ B# X
z(i)=T(3,4,i);
: m, p; c! |) G# gend
) `. l* _- H# E2 Y5 ghold on;* D; ?( m7 ~* E
plot3(x,y,z);%画出运动轨迹22222
/ g. V4 {! ?( eplot(p560m,p);
1 w8 G+ m9 a, g4 xhold off;0 @  M5 g$ v4 n7 y( }4 ~$ n' j7 V
' Q5 V4 x% j+ I7 P7 E1 b: U

+ G6 ]  q0 m, Q7 B7 _/ rp2=rem(p,pi*2) ;      %对差角取余数 得到一圈之内的角度
& N( E1 l9 G. k% k$ ~) y/ X+ ~% Tp1=p2/(pi/180);, I/ K0 h# a& @( ~
figure,plot(p1);%%画出角度变化==也是关节角
- j# ^4 h# d& q  G( |5 B1 l+ z
: @/ R7 F. C4 P; Y/ f. ^
3 w0 J2 ^$ p, n" z( a: U! E% ot1=t';4 ^# {; i0 Q! P
a=[t1 -p1];%输出到 simulink的变量 [t1,a1]   【因为matlab 和ug输入的运动方向相反,因此输出角度取反】7 S4 z: d8 t" T" T  N( w
) x) `. U) T' V& D; H
5 \9 m' `# A/ y* h
% plot(p560m,c);%%%%查看每步角度变化
- d0 `) N' E1 J' V) N. }3 k7 ]( }% for i=1:length(t): C+ d9 Q+ z0 I* p& L
%     hold on;
, S( R. M' A. M; D) }2 p' [%     plot(p560m,p(i,: ));
+ N& R) j2 |) y1 k: P, h% end$ G1 o: o6 y# U9 `) x( t
8 X5 [- r  c1 t

4 e% o+ G% E; E, H8 z, }$ d6 S# h' d* L& H
四四四四   ug运行仿真文件/ x1 Y. g5 `- G- N& E# r5 U) ~
       1 建立一个跟踪 ===跟踪对象是在机械手末端那个标记点A011
5 ~6 F+ @  Q6 C( m' R4 \& A& V       2 打开ug播放动画  选中跟踪; B7 w% R2 p/ H4 w
       3  查看返回的角度变化值    打开ug作图添加6个工厂输出
作者: NNNei256    时间: 2020-11-17 16:45
matlab机器人 联合ug仿真 关于运动仿真实践




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2