МАТЛАБ: Как я могу починить другую планку на 4-тактной связи? - PullRequest
0 голосов
/ 27 августа 2018

У меня проблема с этим сценарием MATLAB. Я должен сделать 4-х стержневое соединение с фиксированным стержнем, прикрепленным к соединителю. Планка должна оставаться прикрепленной к механизму, как на картинке 1 для полного вращения Как должен выглядеть механизм

Точка M фиксируется в соответствии с точками A и N в соответствии с M. При некотором угле точка M перемещается на другой стороне точки A и N на другой стороне M, поэтому планка больше не находится на механизме, как показано на изображение 2 [Ошибка] 2 Как я могу их исправить, чтобы механизм выглядел как на первом изображении для всего поворота?

Я также должен сделать семейство прямых линий для стержня, прикрепленного к механизму, и кривую, которую описывают линии. Таким образом, в конце я должен получить картину со всеми положениями стержня для поворота механизма на 360 градусов.

код:

clear all;
close all;


conv=pi/180;  % Fattore di conversione gradi-rad
%%%%%coordinate delle cerniere fisse A0 e B0
x_A0=17;
y_A0=0;
x_B0=39;
y_B0=0;

th2min=0*conv;  % angolo di partenza del membro movente r2
th2max=2*pi;  % angolo di arrivo del membro movente r2
r1=sqrt((x_A0-x_B0)^2+(y_A0-y_B0)^2)   % distanza cerniere fisse
r2=30; % dim  ensione membro movente
r3=40; % dimensione biella
r4=35; % dimensione membro cedente
r8=20;
th1=atan((y_B0-y_A0)/(x_B0-x_A0)); % angolo tra le cerniere fisse
sigma=-1;
i=1;
for th2=th2min:conv:(th2max)
    th(i)=th2; %%%input angle%%%
    th_deg(i)=th(i)/conv;
    %%%%%moving pivot A trajectory%%%%%
    x_A(i)=x_A0+r2*cos(th(i));
    y_A(i)=y_A0+r2*sin(th(i));

    %%%%%closure  equations%%%%%
    A(i)=2*r1*r4*cos(th1)-2*r2*r4*cos(th(i));
    B(i)=2*r1*r4*sin(th1)-2*r2*r4*sin(th(i));
    C(i)=-2*r2*r1*((cos(th(i))*cos(th1))+(sin(th1)*sin(th(i))))+r1.^2+r2.^2+r4.^2-r3.^2;
    delta(i)=B(i).^2-C(i).^2+A(i).^2;
    den_delta(i)=C(i)-A(i);
    num_delta(i)=-B(i)-sigma*sqrt(delta(i));
    num_delta(i)=subs(num_delta(i));
    den_delta(i)=subs(den_delta(i));
    th4(i)=2*atan(num_delta(i)/den_delta(i));%%%%output angle%%%%%
    th4_deg(i)=th4(i)/conv;
    num(i)=r1*sin(th1)+r4*sin(th4(i))-r2*sin(th(i));
    den(i)=r1*cos(th1)+r4*cos(th4(i))-r2*cos(th(i));
    num(i)=subs(num(i));
    den(i)=subs(den(i));
    th3(i)=atan(num(i)/den(i));%%%%coupler angle%%%%%
    %     %%%%%moving pivot B trajectory%%%%%
    x_B(i)=x_B0+r4*cos(th4(i));
    y_B(i)=y_B0+r4*sin(th4(i));

    r6=r3/2;
    rM=r2+r6*(cos(th3(i))*1i+sin(th3(i)*1j));
    if th2<= 248*conv
        x_M(i)=x_B(i)-r6*cos(th3(i));
        y_M(i)=y_B(i)-r6*sin(th3(i));
    else
        x_M(i)=x_B(i)+r6*cos(th3(i));
        y_M(i)=y_B(i)+r6*sin(th3(i));

    end

    r7=tan(pi/6)*(r3/2);
    rN=rM+r7;
    if th2<= 248*conv
        x_N(i)=x_M(i)-r7*cos(th3(i)+(pi/2));
        y_N(i)=y_M(i)-r7*sin(th3(i)+(pi/2));
    else
        x_N(i)=x_M(i)+r7*cos(th3(i)+(pi/2));
        y_N(i)=y_M(i)+r7*sin(th3(i)+(pi/2));
    end
    rc=rN+r8;

    x_C(i)=x_N(i)+r8*cos(th3(i));
    y_C(i)=y_N(i)+r8*sin(th3(i));


    x_D(i)=x_N(i)-r8*cos(th3(i));
    y_D(i)=y_N(i)-r8*sin(th3(i));

    i=i+1;

end

%
%     %%%%%Plot linkages%%%%%
for     k=1:length(th);
    px_A0_A=[x_A0 x_A(k)];
    py_A0_A=[y_A0 y_A(k)];
    px_A_B=[x_A(k) x_B(k)];
    py_A_B=[y_A(k) y_B(k)];
    px_B_B0=[x_B(k) x_B0];
    py_B_B0=[y_B(k) y_B0];
    px_A0_B0=[x_A0 x_B0];
    py_A0_B0=[y_A0 y_B0];

    px_M_N=[x_M(k) x_N(k)];
    py_M_N=[y_M(k) y_N(k)];
    px_C_N=[x_C(k) x_N(k)];
    py_C_N=[y_C(k) y_N(k)];
    px_D_N=[x_D(k) x_N(k)];
    py_D_N=[y_D(k) y_N(k)];


    h=plot(x_A0,y_A0,'sk',x_B0,y_B0,'sk',x_A0,y_A0,'ok',x_B0,y_B0,'ok',...
        px_A0_A,py_A0_A,'-r',px_B_B0,py_B_B0,'-m',px_A_B,py_A_B,'-g',px_M_N,py_M_N,'-h',px_C_N,py_C_N,'-p',px_D_N,py_D_N,'-p',...
        x_A(k),y_A(k),'ob',x_B(k),y_B(k),'ob',x_M(k), y_M(k), 'ob',x_N(k), y_N(k),'ob',x_C(k),y_C(k), 'ob',x_D(k),y_D(k),'ob');
    text(x_A0-3,y_A0-5,'A0','fontsize',10,'fontname','Cambria');
    text(x_B0-3,y_B0-5,'B0','fontsize',10,'fontname','Cambria');
    text(x_A(k),y_A(k)-5,'A','fontsize',10,'fontname','Cambria');
    text(x_B(k),y_B(k)-5,'B','fontsize',10,'fontname','Cambria');

    text(x_M(k),y_M(k)-5,'M','fontsize',10,'fontname','Cambria');
    text(x_N(k),y_N(k)-5,'N','fontsize',10,'fontname','Cambria');
    text(x_C(k),y_C(k)-5,'C','fontsize',10,'fontname','Cambria');
    text(x_D(k),y_D(k)-5,'D','fontsize',10,'fontname','Cambria')

    xlabel('X') % x-axis label
    ylabel('Y') % y-axis label
    axis ([-50 40 -50 60])
    axis equal
    grid on
    pause(0.001)
end


pos=0;
px_A0_A_p1=[x_A0 x_A(pos)];
py_A0_A_p1=[y_A0 y_A(pos)];
px_A_B_p1=[x_A(pos) x_B(pos)];
py_A_B_p1=[y_A(pos) y_B(pos)];
px_B0_B_p1=[x_B(pos) x_B0];
py_B0_B_p1=[y_B(pos) y_B0];
px_A0_B0_p1=[x_A0 x_B0];
py_A0_B0_p1=[y_A0 y_B0];


px_M_N_p1=[x_M(pos) x_N(pos)];
py_M_N_p1=[y_M(pos) y_N(pos)];

figure(1)
hold on
plot(x_A0,y_A0,'sk','LineWidth',2)
plot(x_B0,y_B0,'sk','LineWidth',2)
plot(x_A(pos),y_A(pos),'bo')
plot(x_B(pos),y_B(pos),'bo')
plot(x_C(pos),y_C(pos),'bo')
plot(x_D(pos),y_D(pos),'bo')


plot(x_C,y_C,'b-')
plot(x_D,y_D,'b-')

plot(px_A0_A_p1,py_A0_A_p1,'r-')
plot(px_B0_B_p1,py_B0_B_p1,'m-')
plot(px_A_B_p1,py_A_B_p1,'g-')
plot(px_A0_B0_p1,py_A0_B0_p1,'k-')
plot(px_M_N_p1,py_M_N_p1,'h-')

text(x_A0-3,y_A0-2,'A0','fontsize',10,'fontname','Cambria');
text(x_B0-3,y_B0+2,'B0','fontsize',10,'fontname','Cambria');
text(x_A(pos)+3,y_A(pos)+1,'A','fontsize',10,'fontname','Cambria');
text(x_B(pos)+2,y_B(pos),'B','fontsize',10,'fontname','Cambria');

xlabel('X') % x-axis label
ylabel('Y') % y-axis label
% axis ([-20 40 -20 30])
axis equal
grid on

1 Ответ

0 голосов
/ 27 августа 2018

Ваша проблема, вероятно, связана с периодичностью косинуса и синусовой функции или связанным с ними углом. Построение обобщенных координат может помочь вам найти, какая из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...