Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

생체공학개론 TP 결과 레포트

학번: 2018271172 이름: 김연수

1. 개요(Introduction)

보행이란 인간이나 동물이 지면을 따라 이동하는 과정을 말한다. 이 과정에서 몸의 다양한 부위들이 협력하여
일어난다.

보행주기(Gait Cycle): 보행주기란 한쪽 발의 접지에서 다음 접지까지의 모든 단계를 포함하는 주기를


의미한다. 즉, 한 발의 접지에서 출발하여 다시 그 발로 접지하는 과정까지를 말한다.

보행맥락(Gait Context): 보행은 단순히 물리적 이동 이상의 의미를 가지며, 사회적, 문화적 맥락에서도
중요한 역할을 한다. 예를 들어, 걸어다님의 속도나 방식은 개인의 연령, 건강 상태, 문화적 관행 등에 따라
달라질 수 있다.

보행패턴(Gait Pattern): 각 개인의 보행 패턴은 고유하다. 이는 몸의 구조, 근육 발달, 신경 제어 등에 따라


다르게 나타난다.

보행분석(Gait Analysis): 의료 및 운동 과학에서 보행 분석은 보행 이상이나 장애를 평가하고 진단하는 데


중요한 도구로 사용된다. 이를 통해 보행 장애를 가진 사람들에게 맞춤형 치료 계획을 수립할 수 있다.

보행 분석은 인간의 보행 패턴을 평가하고 이해하는 과정을 말한다. 이는 의료, 운동 과학, 공학 등 여러


분야에서 중요한 역할을 한다. 보행 분석을 통해 개인의 보행 방식을 이해하고, 보행 이상이나 장애를 진단하며,
보행 기능을 최적화하기 위한 개입을 설계할 수 있다.

비디오 분석(Video Analysis):

o 카메라를 사용하여 개인의 보행을 촬영하고, 이 영상을 분석함으로써 보행 패턴을 관찰한다.


o 보행주기, 보행 속도, 걸음 거리, 발의 접지 각도 등을 측정하여 정량적 데이터를 얻는다.
o 이는 일상적인 보행 패턴 뿐만 아니라, 특정 조건에서의 변화나 문제점을 감지하는 데 유용하다.

포스 플레이트(Pressure Plates):

o 특수 장비를 사용하여 발의 접지 압력을 측정하는 방식이다.


o 이를 통해 각 발의 접지 패턴과 압력 분포를 분석하여 보행의 균형과 안정성을 평가할 수 있다.
o 보행 장애나 특정 상태에서 발생할 수 있는 접지 문제를 식별하는 데 도움을 준다.

운동 분석 시스템(Motion Capture Systems):

o 다양한 센서나 카메라를 사용하여 실시간으로 개인의 몸의 움직임을 추적하고 분석한다.


o 관절의 각도, 움직임의 일치 여부 등을 측정하여 보행 패턴을 정밀하게 분석할 수 있다. 이는
보다 정교한 운동 평가와 개입 계획을 수립하는 데 사용된다.
힘 및 운동 분석(Force and Motion Analysis):

o 특정 부위의 근육 활동과 관절의 움직임을 측정하여 보행 과정에서의 힘의 전달과 움직임의


효율성을 평가한다.
o 이를 통해 보행 장애나 근육 이상을 가진 개인들에게 맞춤형 치료와 운동 계획을 개발할 수
있다.

2. 실험 방법(Method)

Inverse dynamics는 주어진 로봇 또는 다리 모델의 관절 각도, 각속도 및 각가속도를 바탕으로 관절에서의 힘과


모멘트를 계산하는 과정을 말한다.

Inverse dynamics를 사용하여 각 관절의 각도, 각속도, 각가속도를 계산하는 MATLAB 코드

% 링크의 길이
L1 = 1; % 링크 1 의 길이
L2 = 1; % 링크 2 의 길이

% 관절 힘과 모멘트 (임의의 예시 데이터)


tau1 = 5; % 관절 1 에서의 모멘트 (Nm)
tau2 = 3; % 관절 2 에서의 모멘트 (Nm)

% 관절 질량
m1 = 1; % 링크 1 의 질량 (kg)
m2 = 1; % 링크 2 의 질량 (kg)

% 중력 가속도
g = 9.81; % 중력 가속도 (m/s^2)

% 각 관절의 각도, 각속도, 각가속도 초기화


theta1 = zeros(size(tau1)); % 링크 1 의 각도 초기화
theta2 = zeros(size(tau2)); % 링크 2 의 각도 초기화
omega1 = zeros(size(tau1)); % 링크 1 의 각속도 초기화
omega2 = zeros(size(tau2)); % 링크 2 의 각속도 초기화
alpha1 = zeros(size(tau1)); % 링크 1 의 각가속도 초기화
alpha2 = zeros(size(tau2)); % 링크 2 의 각가속도 초기화

% Inverse Dynamics 계산
for i = 1:length(tau1)
% 관절 2 에서의 토크 (모멘트)
tau2_temp = tau2(i);

% 관절 1 에서의 토크 (모멘트)
tau1_temp = tau1(i);

% 각 관절의 각가속도 계산
alpha2(i) = (tau2_temp - m2*g*L2*sin(theta1(i) + theta2(i))) / (m2*L2^2);
alpha1(i) = (tau1_temp - m1*g*L1*sin(theta1(i)) - m2*g*(L1*sin(theta1(i)) +
L2*sin(theta1(i) + theta2(i)))) / (m1*L1^2 + m2*(L1^2 + L2^2 + 2*L1*L2*cos(theta2(i))));

% 각 관절의 각속도 계산 (적분)


if i > 1
omega2(i) = omega2(i-1) + alpha2(i) * (time(i) - time(i-1));
omega1(i) = omega1(i-1) + alpha1(i) * (time(i) - time(i-1));
end

% 각 관절의 각도 계산 (적분)
if i > 1
theta2(i) = theta2(i-1) + omega2(i) * (time(i) - time(i-1));
theta1(i) = theta1(i-1) + omega1(i) * (time(i) - time(i-1));
end
end

% 결과 출력
figure;

subplot(3,1,1);
plot(time, theta1, 'b', 'LineWidth', 2);
ylabel('각도 \theta_1 (rad)');
title('각도, 각속도, 각가속도');
grid on;

subplot(3,1,2);
plot(time, omega1, 'g', 'LineWidth', 2);
ylabel('각속도 \omega_1 (rad/s)');
grid on;

subplot(3,1,3);
plot(time, alpha1, 'r', 'LineWidth', 2);
ylabel('각가속도 \alpha_1 (rad/s^2)');
xlabel('시간 (s)');
grid on;

figure;

subplot(3,1,1);
plot(time, theta2, 'b', 'LineWidth', 2);
ylabel('각도 \theta_2 (rad)');
title('각도, 각속도, 각가속도');
grid on;

subplot(3,1,2);
plot(time, omega2, 'g', 'LineWidth', 2);
ylabel('각속도 \omega_2 (rad/s)');
grid on;

subplot(3,1,3);
plot(time, alpha2, 'r', 'LineWidth', 2);
ylabel('각가속도 \alpha_2 (rad/s^2)');
xlabel('시간 (s)');
grid on;

코드 설명

1. 링크의 길이, 관절 토크, 질량, 중력 가속도 초기화: 링크 길이, 관절에서의 토크(모멘트), 질량, 중력 가속
도 등의 초기값을 설정한다.

2. 각 관절의 각도, 각속도, 각가속도 초기화: 각 관절의 각도, 각속도, 각가속도를 저장할 변수를 초기화한다.

3. Inverse Dynamics 계산: 주어진 토크(모멘트)와 관절에서의 중력 효과를 바탕으로 각 관절의 각가속도를
계산한다. 이후 각속도와 각도를 적분하여 시간에 따른 변화를 계산한다.

4. 결과 출력: 시간에 따른 각 관절의 각도, 각속도, 각가속도를 그래프로 출력한다. 각도는 첫 번째 figure에
서, 각속도와 각가속도는 두 번째 figure에서 표시된다.

3. 실험 결과(Result)

각 관절의 각도와 각속도를 다양한 평면(Plane)에서 표시하려면, 각 관절의 각도와 각속도를 3차원 공간의 각 축
으로 투영하여 표현할 수 있다.

% 관절 각도 및 각속도 데이터 (임의의 예시 데이터)


time = linspace(0, 5, 100); % 시간 벡터
hip_angle = deg2rad(30)*sin(time); % 고관절 각도 (라디안)
knee_angle = deg2rad(45)*cos(time); % 무릎 각도 (라디안)
ankle_angle = deg2rad(20)*sin(time); % 발목 각도 (라디안)

hip_angular_acc = deg2rad(10)*cos(time); % 고관절 각가속도 (라디안/초^2)


knee_angular_acc = deg2rad(5)*sin(time); % 무릎 각가속도 (라디안/초^2)
ankle_angular_acc = deg2rad(15)*cos(time); % 발목 각가속도 (라디안/초^2)

% xy 평면에서의 표시
figure;
subplot(3, 1, 1);
plot(hip_angle, knee_angle, 'b');
xlabel('고관절 각도 (rad)');
ylabel('무릎 각도 (rad)');
title('xy 평면');

subplot(3, 1, 2);
plot(knee_angle, ankle_angle, 'g');
xlabel('무릎 각도 (rad)');
ylabel('발목 각도 (rad)');

subplot(3, 1, 3);
plot(ankle_angle, hip_angle, 'r');
xlabel('발목 각도 (rad)');
ylabel('고관절 각도 (rad)');

% yz 평면에서의 표시
figure;
subplot(3, 1, 1);
plot(knee_angle, knee_angular_acc, 'b');
xlabel('무릎 각도 (rad)');
ylabel('무릎 각가속도 (rad/s^2)');
title('yz 평면');

subplot(3, 1, 2);
plot(ankle_angle, ankle_angular_acc, 'g');
xlabel('발목 각도 (rad)');
ylabel('발목 각가속도 (rad/s^2)');

subplot(3, 1, 3);
plot(hip_angle, hip_angular_acc, 'r');
xlabel('고관절 각도 (rad)');
ylabel('고관절 각가속도 (rad/s^2)');

% zx 평면에서의 표시
figure;
subplot(3, 1, 1);
plot(ankle_angle, hip_angle, 'b');
xlabel('발목 각도 (rad)');
ylabel('고관절 각도 (rad)');
title('zx 평면');

subplot(3, 1, 2);
plot(hip_angle, knee_angle, 'g');
xlabel('고관절 각도 (rad)');
ylabel('무릎 각도 (rad)');

subplot(3, 1, 3);
plot(knee_angle, ankle_angle, 'r');
xlabel('무릎 각도 (rad)');
ylabel('발목 각도 (rad)');

4. 결론(Conclusion)

5. 참고문헌(References)

You might also like