4연杆 메커니즘의 운동학적 파라미터 계산

  1. 문제 정의

4개의 링크로 구성된 평면 메커니즘에서 각 링크의 회전각과 각속도를 수학적으로 도출하는 문제입니다. 링크 길이와 드라이브 링크의 각속도가 주어진 상태에서 나머지 링크의 운동학적 특성을 분석합니다.

  1. 수학적 도출

기하학적 관계식을 이용한 해석적 접근과 미분을 통한 수치적 접근 두 가지 방법을 비교합니다. 해석적 방법은 행렬 연산을 사용해 연립방정식을 푸는 방식이며, 수치적 방법은 기하학적 관계식의 미분을 통해 각속도를 계산합니다.

  1. MATLAB 구현

최신 버전 코드

기하학적 관계식의 미분을 직접 계산하여 각속도를 산출하는 방식입니다. 코드량은 적지만 계산 효율성이 낮습니다.

% *** 4연杆 메커니즘 운동학 계산 ***
% 1. 고정 파라미터
len1 = 100; % 단위:mm
len2 = 300;
len3 = 250;
len4 = 200;
ang_vel1 = 10.17; % rad/s

% 각도 변환 계수
rad_to_deg = pi/180;
deg_to_rad = 180/pi;

% 기호 변수 정의
syms beta gamma1

beta(gamma1) = sqrt(len4^2 + len1^2 - 2*len4*len1*cos(pi-gamma1));
syms thetaA thetaB

thetaA(gamma1) = acos((len3^2 + beta(gamma1)^2 - len2^2)/(2*len3*beta(gamma1)));
thetaB(gamma1) = asin((len1*sin(pi-gamma1))/beta(gamma1));

% 각속도 계산
ang_vel3(gamma1) = (diff(thetaA,gamma1) + diff(thetaB,gamma1)) * ang_vel1;

% 결과 저장 배열 초기화
idx = 1;
gamma_values = zeros(1,73);
theta3_values = zeros(1,73);
vel3_values = zeros(1,73);

% 계산 반복
for deg=0:5:360
    gamma = deg * rad_to_deg;
    gamma_values(idx) = deg;
    
    theta3_values(idx) = thetaA(gamma) + thetaB(gamma);
    vel3_values(idx) = ang_vel3(gamma);
    
    theta3_values(idx) = theta3_values(idx) * deg_to_rad;
    idx = idx + 1;
end

% 시각화
subplot(2,2,1);
plot(gamma_values, theta3_values, '-b');
title('링크3의 회전각 변화')
xlabel('\gamma_1 (\circ)')
ylabel('\gamma_3 (\circ)')
grid on;

subplot(2,2,2);
plot(gamma_values, vel3_values, '-r');
title('링크3의 각속도')
xlabel('입력각도')
ylabel('rad\cdots^{-1}')
grid on;

subplot(2,2,[3 4]);
[ax,h1,h2] = plotyy(gamma_values, theta3_values, gamma_values, vel3_values);
set(get(ax(1),'ylabel'),'string','각도값');
set(get(ax(2),'ylabel'),'string','속도값');
legend([h1,h2],'각도','속도');
set(ax,'Xlim',[0 360],'xtick',[0:10:360])

이전 버전 코드

선형 방정식 계산을 기반으로 한 고속 처리 방식입니다. 보다 많은 코드량을 필요로하지만 계산 속도가 빠릅니다.

% *** 4연杆 메커니즘 운동학 계산 ***
% 1. 고정 파라미터
len1 = 100; % mm
len2 = 300;
len3 = 250;
len4 = 200;
ang_vel1 = 10.17; % rad/s

% 단위 변환 계수
rad_to_deg = pi/180;
deg_to_rad = 180/pi;

% 기호 변수 정의
syms beta gamma1

beta(gamma1) = sqrt(len4^2 + len1^2 - 2*len4*len1*cos(pi-gamma1));
syms thetaA thetaB

thetaA(gamma1) = acos((len3^2 + beta(gamma1)^2 - len2^2)/(2*len3*beta(gamma1)));
thetaB(gamma1) = asin((len1*sin(pi-gamma1))/beta(gamma1));

% 결과 저장 배열 초기화
idx = 1;
gamma_values = zeros(1,74);
theta3_values = zeros(1,74);
theta2_values = zeros(1,74);

% 계산 반복
for deg=0:5:360
    gamma = deg * rad_to_deg;
    gamma_values(idx) = deg;
    
    theta3_values(idx) = thetaA(gamma) + thetaB(gamma);
    theta2_values(idx) = asin((len3*sin(theta3_values(idx)) - len1*sin(gamma))/len2);
    
    theta2_values(idx) = theta2_values(idx) * deg_to_rad;
    theta3_values(idx) = theta3_values(idx) * deg_to_rad;
    idx = idx + 1;
end

plot(gamma_values, theta3_values, '-b');
title('\gamma_3 변화')
xlim([0 360])
xlabel('\gamma_1 (\circ)')
ylabel('각도 (\circ)')
ylim([-360 360])
grid on;
hold on;
plot(gamma_values, theta2_values, '-.r');

결과 - 속도 및 각도 그래프

태그: Matlab 4-bar mechanism kinematics symbolic math numerical differentiation

10월 6일 12:48에 게시됨