Why cant i get the links connected, I changed alot of the code from last time, but the links just move away from each other

조회 수: 2 (최근 30일)
This code only relates to 1. Position Analysis
clc; close all; clear; format compact;
% length of links
r1 = 100;
r2 = 50;
r3 = 80;
r4 = 80;
l4 = 125;
eta = deg2rad(30);
% Angle theta 2
th2 = pi/3:2*pi/36:2*pi+pi/3;
n = length(th2)
% Calculations
L = sqrt(r1^2+r2^2-2*r1*r2.*cos(th2));
Sphi = (r2./L).*sin(th2);
Cphi = (r2^2-r1^2-L.^2)./(-2*r1.*L);
phi = atan2(Sphi, Cphi);
th3 = acos((r4^2-r3^2-L.^2)./(-2*r3.*L))-phi;
Cgamma = (r3^2-r4^2-L.^2)./(-2*r4.*L);
Sgamma = (r3/r4).*sin(th3+phi);
gamma = atan2(Sgamma, Cgamma);
th4 = pi-phi-gamma;
% Use this to find the 3rd join on link 4
all = th4-eta;
% Position of joints
xO2 = 0;
yO2 = 0;
yA = r2*cos(th2);
xA = r2*sin(th2);
xB = yA+r3*cos(th3);
yB = xA+r3*sin(th3);
xO4 = r1;
yO4 = 0;
xC5 = xO4+l4*cos(all);
yC5 = yO4+l4*sin(all);
% These are used to plot the length of each link in the Draw-Linkage
Ycrank = [yO2, yA(1)];
Xcrank = [xO2, xA(1)];
Ycoupler = [yA(1), yB(1)];
Xcoupler = [xA(1), xB(1)];
Yrocker = [yB(1), yO4];
Xrocker = [xB(1), xO4];
Yground = [-1.2*r2, r1+10];
Xground = [xO2, yO4];
YC4C5 = [yO4, yC5(1)];
XC4C5 = [xO4, xC5(1)];
YBC5 = [yB(1), yC5(1)];
XBC5 = [xB(1), xC5(1)];
Draw_linkage = plot(xA, yA, '--r',...
Ycrank, Xcrank, 'r', Ycoupler, Xcoupler, 'b',...
Yrocker, Xrocker, 'g', YC4C5, XC4C5, 'g',...
YBC5, XBC5, 'g', Yground, Xground, '--k', 'linewidth', 1.2);
axis([-r2-r3 2*r2+r3 -2*r2 r4]);
axis equal
for i=1:n
delete(Draw_linkage);
Ycrank = [yO2, yA(i)];
Xcrank = [xO2, xA(i)];
Ycoupler = [yA(i), yB(i)];
Xcoupler = [xA(i), xB(i)];
Yrocker = [yB(i), yO4];
Xrocker = [xB(i), xO4];
Yground = [yO2, yO4];
Xground = [-1.2*r2, r1+10];
YC4C5 = [yO4, yC5(i)];
XC4C5 = [xO4, xC5(i)];
YBC4 = [yB(i), yC5(i)];
XBC5 = [xB(i), xC5(i)];
Draw_linkage = plot(yA, xA, '--r',...
Ycrank, Xcrank, 'r', Ycoupler, Xcoupler, 'b',...
Yrocker, Xrocker, 'g', YC4C5, XC4C5, 'g',...
YBC5, XBC5, 'g', Yground, Xground, '--k', 'linewidth', 1.2);
axis([-r2-r3 2*r2+r3 -2*r2 r4]);
axis equal
F(i) = getframe;
pause(1/20);
end
movie(F, 2);

채택된 답변

Ashutosh Singh Baghel
Ashutosh Singh Baghel 2021년 9월 21일
Hi Daniel,
I understand you wish to connect the links which are moving apart. The coordinates of the end points of links connected must be same variable so that they remain connected. Please refer to the following solution.
% YBC4 = [yB(i), yC5(i)]; %% Please interchange the cariables in
% XBC5 = [xB(i), xC5(i)]; %% 'YBC4' and 'XBC5' to get desired output.
YBC5 = [yC5(i), yB(i)];
XBC5 = [xC5(i), xB(i)];

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Financial Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by