四连杆机构运动学分析张海涛.docx
《四连杆机构运动学分析张海涛.docx》由会员分享,可在线阅读,更多相关《四连杆机构运动学分析张海涛.docx(25页珍藏版)》请在冰豆网上搜索。
四连杆机构运动学分析张海涛
四连杆机构运动学分析
使用ADAMS建立如图1所示的四连杆机构,二杆长150mm,三杆长500mm,四杆长450mm,二杆的转动速度为πrad/s,二杆初始角度为90度。
用Matlab建立该系统的运动约束方程,计算结果,并与ADAMS仿真结果进行对比。
C点
A点
B点
三杆
图1四杆机构
一、位置分析
1、由地面约束得到:
2、由O点约束得:
3、由A点约束得:
4、由B点约束得:
5、由C点约束得:
6、由二杆驱动约束得:
积分得:
由上面九个方程组成此机构的运动约束方程,用Matlab表示为:
fx=@(x)([x
(1);
x
(2);
x(3);
x(4)-l2/2*cos(x(6));
x(5)-l2/2*sin(x(6));
x(4)+l2/2*cos(x(6))-x(7)+l3/2*cos(x(9));
x(5)+l2/2*sin(x(6))-x(8)+l3/2*sin(x(9));
x(7)+l3/2*cos(x(9))-x(10)+l4/2*cos(x(12));
x(8)+l3/2*sin(x(9))-x(11)+l4/2*sin(x(12));
x(10)+l4/2*cos(x(12))-x
(1)-l5;
x(11)+l4/2*sin(x(12))-x
(2);
x(6)-w*i-zhj0;]);
x
(1)x
(2)x(3)x(4)x(5)x(6)x(7)x(8)x(9)x(10)x(11)x(12)分别表示
、
、
、
、
、
、
、
、
、
、
、
。
二、速度分析
由Matlab求该系统的雅克比矩阵如图2所示。
图2系统雅克比矩阵
速度约束方程组为:
用Matlab求解关于
的微分方程组,程序为:
fy=@(y)([y
(1);
y
(2);
y(3);
y(4)+y(6)*l2/2*sin(x(6));
y(5)-y(6)*l2/2*cos(x(6));
y(4)-y(6)*l2/2*sin(x(6))-y(7)-y(9)*l3/2*sin(x(9));
y(5)+y(6)*l2/2*cos(x(6))-y(8)+y(9)*l3/2*cos(x(9));
y(7)-y(9)*l3/2*sin(x(9))-y(10)-y(12)*l4/2*sin(x(12));
y(8)+y(9)*l3/2*cos(x(9))-y(11)+y(12)*l4/2*cos(x(12));
-y
(1)+y(10)-y(12)*l4/2*sin(x(12));
-y
(2)+y(11)+y(12)*l4/2*cos(x(12));
y(6)-w;]);
y=fsolve(fy,x0,opt);
q_v(:
n)=y;
三、加速度分析
进一步对
的微分方程组关于q求偏导,进行加速度分析,约束方程为:
用Matlab求解关于
的微分方程组,程序为
fz=@(z)([z
(1);
z
(2);
z(3);
z(4)+z(6)*l2/2*sin(x(6))+y(6)^2*l2/2*cos(x(6));
z(5)-z(6)*l2/2*cos(x(6))+y(6)^2*l2/2*sin(x(6));
z(4)-z(6)*l2/2*sin(x(6))-y(6)^2*l2/2*cos(x(6))-z(7)-z(9)*l3/2*sin(x(9))-y(9)^2*l3/2*cos(x(9));
z(5)-z(6)*l2/2*cos(x(6))-y(6)^2*l2/2*sin(x(6))-z(8)+z(9)*l3/2*cos(x(9))-y(9)^2*l3/2*sin(x(9));
z(7)-z(9)*l3/2*sin(x(9))-y(9)^2*l3/2*cos(x(9))-z(10)-z(12)*l4/2*sin(x(12))-y(12)^2*l4/2*cos(x(12));
z(8)+z(9)*l3/2*cos(x(9))-y(9)^2*l3/2*sin(x(9))-z(11)+z(12)*l4/2*cos(x(12))-y(12)^2*l4/2*sin(x(12));
-z
(1)+z(10)-z(12)*l4/2*sin(x(12))-y(12)^2*l4/2*cos(x(12));
-z
(2)+z(11)+z(12)*l4/2*cos(x(12))-y(12)^2*l4/2*sin(x(12));
z(6);]);
z=fsolve(fz,x0,opt);
q_ac(:
n)=z;
由Matlab建立四杆机构的模型,进行仿真,仿真时间为6秒,步数为600步。
并输出各杆的位置、速度和加速度曲线,将ADAMS仿真结果导出为tab格式,再导入Matlab中。
与Matlab的曲线进行对比,得到如图4-12的曲线。
四、说明
1、由于ADAMS测量的初始角小于180度,为90度,而四杆的初始角度为270度。
为了比较结果,将Matlab计算得到的四杆角度减去180度,再与ADAMS结果对比。
程序为:
plot(t,q(12,:
)-pi,'-*')。
2、下面图10得到的二杆的角加速度曲线,波动非常大。
但是波动振幅非常小,小于
,是由ADAMS仿真的精确度造成的,误差在允许的范围内。
3、由于在ADAMS中只能由三个点测角度,三杆的角度无法测量。
所以再建立两个辅助杆,用于测量三杆的角度,如下图3辅助杆1和辅助杆2。
再就可以测量由E、F、G点组成的角度作为三杆的角度。
4、Matlab解非线性方程组的初始值非常重要,如果设定不正确,可能造成四连杆机构开始的各杆位置不正确。
5、由ADAMS仿真结果导出为tab文件必须去掉前几行的英文说明,否则Matlab无法读取。
辅助杆2
点F
点E
点G
辅助杆1
图3辅助测量杆
五、Matlab程序
求雅克比矩阵的Matlab程序在附录一中,运动学分析程序在的附录二中。
六、Matlab与ADAMS曲线对比
图4二杆位置曲线
图5三杆位置曲线
图6四杆位置曲线
图7二杆速度曲线
图8三杆速度曲线
图9四杆速度曲线
图10二杆加速度曲线
图11三杆加速度曲线
图12四杆加速度曲线
附录一:
求雅克比矩阵的Matlab程序
clc
clear
l2=150;
l3=500;
l4=450;
l5=400;
w=pi;
zhj0=pi/2;
y=[000000000000]
symsx1x2x3x4x5x6x7x8x9x10x11x12
g=[x1;x2;x3;x4-l2/2*cos(x6);
x5-l2/2*sin(x6);
x4+l2/2*cos(x6)-x7+l3/2*cos(x9);
x5+l2/2*sin(x6)-x8+l3/2*sin(x9);
x7+l3/2*cos(x9)-x10+l4/2*cos(x12);
x8+l3/2*sin(x9)-x11+l4/2*sin(x12);
x10+l4/2*cos(x12)-x1-l5;
x11+l4/2*sin(x12)-x2;
x6-w*i-zhj0]
jacobian(g,[x1x2x3x4x5x6x7x8x9x10x11x12])
附录二:
运动学分析的Matlab程序
%对四杆杆机构的进行运动学分析
clear
clc
q=[];%q是广义坐标
q_v=[];%q_v是与q对应的速度
q_ac=[];%q_ac是与q对应的加速度
t=0:
0.1:
6;
l2=150;%二杆长度
l3=500;%三杆长度
l4=450;%四杆长度
l5=400;%两个底座之间的距离
w=pi;%二杆的转速
zhj0=pi/2;%二杆的初始角度
x0=[000075pi/2200300pi/44002251.5*pi]';%X0是求根过程的初值
n=1;%记录每一时刻的计数器
%%对二杆,三杆,四杆进行位置分析,解其约束方程
fori=0:
0.1:
6%时间从0到6秒,二杆转三个周期
%x
(1),x
(2),x(3)分别为地面铰接点的x坐标、y坐标、转角,x(4),x(5),x(6)分别为二杆的x坐标、y坐标、转角。
%x(7),x(8),x(9)分别为三杆的x坐标、y坐标、转角x(10),x(11),x(12)分别为四杆的x坐标、y坐标、转角。
fx=@(x)([x
(1);%函数句柄@(x)表示未知数是x数组,类似C(q,t)=0;q=[x
(1)x
(2)x(3)x(4)x(5)x(6)x(7)x(8)x(9)x(10)x(11)x(12)]'
x
(2);
x(3);
x(4)-l2/2*cos(x(6));
x(5)-l2/2*sin(x(6));
x(4)+l2/2*cos(x(6))-x(7)+l3/2*cos(x(9));
x(5)+l2/2*sin(x(6))-x(8)+l3/2*sin(x(9));
x(7)+l3/2*cos(x(9))-x(10)+l4/2*cos(x(12));
x(8)+l3/2*sin(x(9))-x(11)+l4/2*sin(x(12));
x(10)+l4/2*cos(x(12))-x
(1)-l5;
x(11)+l4/2*sin(x(12))-x
(2);
x(6)-w*i-zhj0;]);
opt=optimset('display','off');
x=fsolve(fx,x0,opt);%解非线性方程组
q(:
n)=x;%把第一个间隔时间处的9个未知量数组x存入q第一列。
%对二杆,三杆,四杆进行速度分析
%y
(1),y
(2),y(3)为地面铰接点的速度分量,y(4),y(5),y(6)为二杆的速度分量,y(7),y(8),y(9)为三杆的速度分量,y(10),y(11),y(12)为四杆的速度分量。
fy=@(y)([y
(1);
y
(2);
y(3);
y(4)+y(6)*l2/2*sin(x(6));
y(5)-y(6)*l2/2*cos(x(6));
y(4)-y(6)*l2/2*sin(x(6))-y(7)-y(9)*l3/2*sin(x(9));
y(5)+y(6)*l2/2*cos(x(6))-y(8)+y(9)*l3/2*cos(x(9));
y(7)-y(9)*l3/2*sin(x(9))-y(10)-y(12)*l4/2*sin(x(12));
y(8)+y(9)*l3/2*cos(x(9))-y(11)+y(12)*l4/2*cos(x(12));
-y
(1)+y(10)-y(12)*l4/2*sin(x(12));
-y
(2)+y(11)+y(12)*l4/2*cos(x(12));
y(6)-w;]);
y=fsolve(fy,x0,opt);
q_v(:
n)=y;
%对二杆,三杆,四杆进行加速度分析
%z
(1),z
(2),z(3)为地面铰接点的加速度分量,z(4),z(5),z(6)为二杆的加速度分量,z(7),z(8),z(9)为三杆的加速度分量,z(10),z(11),z(12)为四杆的加速度分量。
fz=@(z)([z
(1);
z
(2);
z(3);
z(4)+z(6)*l2/2*sin(x(6))+y(6)^2*l2/2*cos(x(6));
z(5)-z(6)*l2/2*cos(x(6))+y(6)^2*l2/2*sin(x(6));
z(4)-z(6)*l2/2*sin(x(6))-y(6)^2*l2/2*cos(x(6))-z(7)-z(9)*l3/2*sin(x(9))-y(9)^2*l3/2*cos(x(9));
z(5)-z(6)*l2/2*cos(x(6))-y(6)^2*l2/2*sin(x(6))-z(8)+z(9)*l3/2*cos(x(9))-y(9)^2*l3/2*sin(x(9));
z(7)-z(9)*l3/2*sin(x(9))-y(9)^2*l3/2*cos(x(9))-z(10)-z(12)*l4/2*sin(x(12))-y(12)^2*l4/2*cos(x(12));
z(8)+z(9)*l3/2*cos(x(9))-y(9)^2*l3/2*sin(x(9))-z(11)+z(12)*l4/2*cos(x(12))-y(12)^2*l4/2*sin(x(12));
-z
(1)+z(10)-z(12)*l4/2*sin(x(12))-y(12)^2*l4/2*cos(x(12));
-z
(2)+z(11)+z(12)*l4/2*cos(x(12))-y(12)^2*l4/2*sin(x(12));
z(6);]);
z=fsolve(fz,x0,opt);
q_ac(:
n)=z;
n=n+1;%列数加1
x0=x;%换解方程组的初始值
end
%作图各杆位置分析
figure
(1)
subplot(311)
plot(t,q(4,:
),'-*')%画出q数组的第四行所有的数
holdon
data1=load('2xy.tab');%导入ADAMS的输出tab文件
plot(data1(:
1),data1(:
2),'r')%画出tab文件的第一列和第二列
title('二杆x方向坐标曲线')
legend('matlab曲线','adams曲线')
subplot(312)
plot(t,q(5,:
),'-*')
holdon
plot(data1(:
1),data1(:
3),'r')
legend('matlab曲线','adams曲线')
title('二杆y方向坐标曲线')
subplot(313)
plot(t,q(6,:
),'-*')
holdon
data2=load('2a.tab');
plot(data2(:
1),data2(:
2),'r')
title('二杆转角曲线')
legend('matlab曲线','adams曲线')
'adamsÇúÏß
figure
(2)
subplot(311)
plot(t,q(7,:
),'-*')
holdon
data3=load('3xy.tab');
plot(data3(:
1),data3(:
2),'r')
title('三杆x方向坐标曲线')
legend('matlab曲线','adams曲线')
subplot(312)
plot(t,q(8,:
),'-*')
holdon
plot(data3(:
1),data3(:
3),'r')
title('三杆y方向坐标曲线')
legend('matlab曲线','adams曲线')
subplot(313)
plot(t,q(9,:
),'-*')
holdon
data4=load('3a.tab');
plot(data4(:
1),data4(:
2),'r')
title('三杆转角曲线')
legend('matlab曲线','adams曲线')
figure(3)
subplot(311)
plot(t,q(10,:
),'-*')
holdon
data4axy=load('4axy.tab');
plot(data4axy(:
1),data4axy(:
3),'r')
title('四杆x方向坐标曲线')
legend('matlab曲线','adams曲线')
subplot(312)
plot(t,q(11,:
),'-*')
holdon
plot(data4axy(:
1),data4axy(:
4),'r')
title('四杆y方向坐标曲线')
legend('matlab曲线','adams曲线')
subplot(313)
plot(t,q(12,:
)-pi,'-*')%由于在ADAMS中测出的四杆初始角为pi/2,而实际四杆的为1.5*pi。
holdon%所以把matlab算出的初始角减pi,再与ADAMS计算结果比较。
plot(data4axy(:
1),data4axy(:
2),'r')
title('四杆转角曲线')
legend('matlab曲线','adams曲线')
%作图各杆速度分析
figure(4)
subplot(311)
plot(t,q_v(4,:
),'-*')
holdon
data2vaxy=load('gan2vaxy.tab');
plot(data2vaxy(:
1),data2vaxy(:
3),'r')
title('二杆x方向速度曲线')
legend('matlab曲线','adams曲线')
subplot(312)
plot(t,q_v(5,:
),'-*')
holdon
plot(data2vaxy(:
1),data2vaxy(:
4),'r')
title('二杆y方向速度曲线')
legend('matlab曲线','adams曲线')
subplot(313)
plot(t,q_v(6,:
),'-*')
holdon
gan2aa=load('gan2aa.tab');
plot(gan2aa(:
1),gan2aa(:
2),'r')
axis([0633.5])
title('二杆角速度曲线')
legend('matlab曲线','adams曲线')
figure(5)
subplot(311)
plot(t,q_v(7,:
),'-*')
holdon
data3vaxy=load('gan3vaxy.tab');
plot(data3vaxy(:
1),data3vaxy(:
3),'r')
title('三杆x方向速度曲线')
legend('matlab曲线','adams曲线')
subplot(312)
plot(t,q_v(8,:
),'-*')
holdon
plot(data3vaxy(:
1),data3vaxy(:
4),'r')
title('三杆y方向速度曲线')
legend('matlab曲线','adams曲线')
subplot(313)
plot(t,q_v(9,:
),'-*')
holdon
plot(data3vaxy(:
1),data3vaxy(:
2),'r')
title('三杆角速度曲线')
legend('matlab曲线','adams曲线')
figure(6)
subplot(311)
plot(t,q_v(10,:
),'-*')
holdon
data4vaxy=load('gan4vaxy.tab');
plot(data4vaxy(:
1),data4vaxy(:
3),'r')
title('四杆x方向速度曲线')
legend('matlab曲线','adams曲线')
subplot(312)
plot(t,q_v(11,:
),'-*')
holdon
plot(data4vaxy(:
1),data4vaxy(:
4),'r')
title('四杆y方向速度曲线')
legend('matlab曲线','adams曲线')
subplot(313)
plot(t,q_v(12,:
),'-*')
holdon
plot(data4vaxy(:
1),data4vaxy(:
2),'r')
title('四杆角速度曲线')
legend('matlab曲线','adams曲线')
%作图各杆加速度分析
figure(7)
gan2ac=load('gan2ac_axy.tab');
subplot(311)
plot(t,q_ac(4,:
),'-*')
holdon
plot(gan2ac(:
1),gan2ac(:
3),'r')
title('二杆x方向加速度分析')
legend('matlab曲线','adams曲线')
subplot(312)
plot(t,q_ac(5,:
),'-*')
holdon
plot(gan2ac(:
1),gan2ac(:
4),'r')
title('二杆y方向加速度分析')
legend('matlab曲线','adams曲线')
subplot(313)
plot(t,q_ac(6,:
),'-*')
holdon
plot(gan2ac(:
1),gan2ac(:
2),'r')
title('二杆角加速度分析')
legend('matlab曲线','adams曲线')
figure(8)
gan3ac=load('gan3ac_axy.tab');
subplot(311)
plot(t,q_ac(7,:
),'-*')
holdon
plot(gan3ac(:
1),gan3ac(:
3),'r')
title('三杆x方向加速度分析')
legend('matlab曲线','adams曲线')
subplot(312)
plot(t,q_ac(8,:
),'-*')
holdon
plot(gan3ac(:
1),gan3ac(:
4),'r')
title('三杆y方向加速度分析')
legend('matlab曲线','adams曲线')
subplot(313)
plot(t,q_ac(9,:
),'-*')
holdon
plot(gan3ac(:
1),gan3ac(:
2),'r')
title('三杆角加速度分析')
legend('matlab曲线','adams曲线')
figure(9)
gan4ac=load('gan4ac_axy.tab');
subplot(311)
plot(t,q_ac(10,:
),'-*')
holdon
plot(gan4ac(:
1),gan4ac(:
3),'r')
title('四杆x方向加速度分析')
legend('matlab曲线','adams曲线')
subplot(312)
plot(t,q_ac(11,:
),'-*')
holdon
plot(gan4ac(:
1),gan4ac(:
4),'r')
title('四杆y方向加速度分析')
legend('matlab曲线','adams曲线')
subplot(313)
plot(t,q_ac(12,:
),'-*')
holdon
plot(gan4ac(:
1),gan4ac(:
2),'r')
title('四杆角加速度分析')
legend('matlab曲线','adams曲线')