Mass–Spring–Damper 실습 튜토리얼

워크샵 자료

워크샵의 실습 자료는 아래 링크에서 받을 수 있다. 👉Simscape Multibody Workshop Material

워크샵의 발표 자료는 아래 링크에서 받을 수 있다. 👉Simscape Multibody Workshop Presentation

이번 튜토리얼에서는 가장 기본적인 동역학 시스템인
질량–스프링–댐퍼(Mass–Spring–Damper) 모델을 예제로 사용해,

  1. Simulink 기반 수식 모델링
  2. 동일한 시스템의 Simscape Multibody 모델링
  3. 두 접근 방식의 차이와 연결점

을 단계적으로 살펴본다.


1. 문제 정의: 질량–스프링–댐퍼 시스템

질량–스프링–댐퍼 시스템은 다음과 같은 운동 방정식으로 표현된다.

\[m\ddot{x} + b\dot{x} + kx = F(t)\]

여기서

  • (m): 질량 (kg)
  • (b): 감쇠 계수 (Ns/m)
  • (k): 스프링 상수 (N/m)
  • (F(t)): 외력. 본 실습에서는 아래와 같은 Step 입력이다.

이 시스템은 입력 힘에 대한 위치 응답을 관찰하기에 적합한 대표적인 예제다.


2. Simulink로 모델링하기 (Input/Output 접근)

2.1 기본 아이디어

식 (1)의 운동 방정식을 가속도에 대해 정리하면 아래와 같다.

\[\ddot{x} = \frac{1}{m}\left(F(t)-b\dot{x}-kx\right)\]

즉,

  • 힘의 합 → 가속도
  • 가속도를 적분 → 속도
  • 속도를 적분 → 위치

라는 흐름으로 모델을 구성할 수 있다.


우선, 시뮬링크를 실행시키기 위해 MALTAB의 Command Window에서 simulink라고 입력하면 아래 그림과 같은 페이지가 뜬다. 여기서 Blank Model을 열어보자.

Integrator 블록 2개

  • 가속도 → 속도 → 위치

우선, 캔버스에 integrator 블록을 두개 놓고 두 블록 사이를 연결하자.

식 (1) 혹은 식 (2)에서 볼 수 있는 것 처럼 우리가 모델링하기 위한 물리현상의 미분방정식은 2차 미분 계수를 포함하고 있다. 따라서, integrator 블록을 두개 놓고 연결시켜준다. 이를 통해, mass-spring damper 모델의 가속도, 속도, 위치 값을 활용할 수 있게 될 것이다.

Subtract 블록

  • 외력 $F(t)$
  • 감쇠력 $b\dot{x}$
  • 복원력 $kx$

(msd01_SimulinkModeling.slx 파일을 열어 여기부터 실습해볼 수 있습니다.)

이제 외력 $F(t)$와 $b\dot{x}$, 그리고 $kx$의 덧셈, 뺄셈 관계를 모델링하기 위해서 subtract 블록을 활용할 수 있다. subtract 블록으로 덧셈, 뺄셈 관계를 모델링하자.

Gain 블록, Step 블록, Scope 블록

  • 가속도 계산을 위해 gain 값 1/m
  • 감쇠 계수 계산을 위해 gain 값 b
  • 스프링 상수 계산을 위해 gain 값 k
  • 외력 $F(t)$ 계산을 위해 step 블록 활용

(msd02_SimulinkModeling.slx 파일을 열어 여기부터 실습해볼 수 있습니다.)

이번에는 gain 블록 및 step 블록을 이용해서 미분방정식의 모델링을 마무리하자. gain 블록은 상수배 모델링을 위해 사용할 수 있다. step 블록을 이용하면 외력 $F(t)$를 모델링할 수 있다.

마지막으로 Scope 블록을 캔버스에 넣어주고 x 값을 입력시켜주면 위치 값을 그려볼 수 있다.

2.3 파라미터 정의

(msd03_SimulinkModeling.slx 파일을 열어 여기부터 실습해볼 수 있습니다.)

모델 파라미터는 Model Callback (InitFcn) 에서 정의한다. 단축키 Ctrl + H를 눌러 Model Properties를 열면 Callback 탭을 확인할 수 있다. 여기서 InitFcn 콜백을 찾고 m, k, b 값을 차례대로 넣어준다.

m = 3.6;   % kg
k = 400;  % N/m
b = 10;   % Ns/m

그리고 모델 실행 시 솔버의 스텝 사이즈를 최대 0.01로 설정하자. 이는 단축키 Ctrl + E를 눌러 Model Configuration을 열어 설정할 수 있다.

2.4 Simulink의 시뮬레이션 결과

이제 시뮬레이션을 실행해보면 (단축키 F5) Scope에서 아래와 같은 결과물을 얻을 수 있다. 참고로 y축의 값이 10의 -4승 단위로 그려진 것을 알 수 있다. 이것은 입력으로 들어가는 힘은 1초 이후에 10N의 힘이 들어가는데 반해 스프링 계수가 400 N/m나 되므로, 1m를 움직이기 위해서는 400 N의 힘이 필요한 만큼의 강한 스프링이기 때문임을 알 수 있다.

3. Simscape Multibody로 모델링하기

앞서 Simulink에서 수식 기반으로 구성한 질량–스프링–댐퍼 시스템을 이제 Simscape Multibody를 사용해 다시 모델링해 보자.

이 단계의 목표는 다음과 같다.

  • 질량을 강체(Solid) 로 표현
  • 스프링과 댐퍼를 Prismatic Joint의 내부 메커니즘으로 모델링
  • Simulink 입력/출력을 Multibody 모델과 연결
  • Simulink 모델과 동일한 응답이 나오는지 확인

3.1 Multibody 모델의 기본 구성

워크샵 실습 파일의 “01_Mass_Spring_Damper” 폴더 안에 있는 msd04_SimulinkModeling.slx 파일을 열어 여기부터 실습해보자. 다시 한번, 워크샵의 실습 자료는 아래 링크에서 받을 수 있다.

👉Simscape Multibody Workshop Material

모든 Simscape Multibody 모델에는 아래 세 블록이 반드시 포함되어야 하며 신호 선으로 서로 연결되어 있어야 한다.

  • Solver Configuration
  • World Frame
  • Mechanism Configuration

위 그림의 우측 하단을 참고해보자.

이 세 블록은 Multibody 시뮬레이션의 “기초 환경”을 정의한다.

  • World Frame: 관성 기준 좌표계
  • Mechanism Configuration: 중력 등 전역 물리 설정
  • Solver Configuration: Simscape 물리 네트워크 해석 설정

3.2 질량(Mass) 모델링

질량은 Solid 블록을 사용해 모델링한다. 이번 실습에서는 Brick Solid 블록을 사용하였는데, 관성을 정의할 때 점 질량 (point mass)로 정의하기 때문에 형태는 어떤 것이든 상관없다. 블록을 더블클릭하고 특성을 아래와 같이 정하도록 하자.

Solid 블록 설정

  • Dimensions: [1, 1, 1] m
  • Inertia > Type: Point Mass
  • Mass: 1 kg

이 예제에서는 형상이나 관성 모멘트가 중요하지 않으므로, 질량을 점 질량(Point Mass) 으로 단순화하였다.

3.3 스프링–댐퍼 모델링 (Prismatic Joint)

Simscape Multibody에서 joint는 frame을 통해 body 들을 연결하는 객체이다. 상당히 잘 작성된 정의이지만 frame과 body에 대한 이해 없이는 더 이상의 이해는 어려울 수 있다. 차츰 실습해가면서 frame과 body에 대해 더 알아보도록 하자.

질량–스프링–댐퍼 시스템의 핵심은 병진 운동 + 복원력 + 감쇠력이다. 이번 실습에서는 Prismatic Joint를 이용해서 이를 표현했다. Prismatic Joint는 아래 그림처럼 frame의 z-축을 기준으로 위 아래로 움직이는 제약사항을 가지는 운동을 기술한다.

Prismatic Joint 설정

Prismatic Joint의 값은 아래와 같이 설정해주자.

1) Internal Mechanics

  • Spring Stiffness: k (400)
  • Damping Coefficient: b (10)

※ 참고로 k, b 라고 만 입력해주면 된다. 시뮬레이션을 실행할 때 자동으로 k, b 값이 400과 10으로 각각 정해지게 된다. 이는 앞서 Model Callback 중 Init Fcn에서 작업해준 것이 반영되는 것이다.

2) Actuation

Actuation은 Force를 Provided Input으로 설정하면 된다. msd04_SimulinkModeling.slx을 열었다면 아마 자동으로 설정되어 있을 것이다.

  • Force: Provided by Input

이 설정은 외력 $F(t)$을 Simulink에서 입력으로 제공받아 사용할 수 있게 해준다.

3) Sensing

Sensing은 Position을 받아보도록 하자. 이것도 마찬가지로 msd04_SimulinkModeling.slx을 열었다면 아마 자동으로 설정되어 있을 것이다.

  • Position 체크

이 설정은 변위 출력을 Simulink로 전달할 수 있게 해준다.

3.4 블록 연결 구조

이제, 아래 그림의 빨간 화살표처럼 블록들을 연결해주자. 참고로 World Frame 쪽에서는 우클릭하여 드래그하면 신호가 빠져나온다.

최종적으로 Multibody 서브시스템 내부 연결 구조는 다음과 같다.

  • World Frame → Prismatic Joint (Base)
  • Prismatic Joint (Follower) → Solid
  • Solver Configuration → 물리 네트워크

이 구조는 다음 의미를 가진다.

  • World Frame: 기준점
  • Prismatic Joint: 질량의 운동을 제한하는 1자유도 조인트
  • Solid: 실제로 움직이는 질량

3.5 중력 제거

이 예제는 수평 방향 1차원 병진 운동만을 다루므로 Mechanism Configuration 블록에서 Gravity를 [0, 0, 0]으로 설정하자. 이것도 마찬가지로 msd04_SimulinkModeling.slx을 열었다면 아마 자동으로 설정되어 있을 것이다.

중력을 제거하지 않으면, 질량에 불필요한 외력이 작용해 Simulink와 다른 결과를 얻게 될 것이다.

3.6 Simulink와 Multibody 연결

Multibody 모델을 기존 Simulink 모델과 연결되어 있다. 입력(외력)은 Simulink-PS Converter를 통해 Simulink의 힘 신호가 물리 신호로 바뀌어 prismatic joint에 입력되고 출력(변위)은 PS-Simulink Converter를 통해 물리 신호가 Simulink 신호로 바뀌어 들어가게 된다.

이렇게 하면,

  • Simulink에서 힘을 입력하고
  • Multibody에서 계산된 변위를
  • Scope에서 바로 비교할 수 있다.

3.7 결과 비교

Scope에 다음 신호들을 동시에 연결한다.

  • Simulink 기반 모델의 변위
  • Simscape Multibody 기반 모델의 변위

두 결과를 비교하면,

  • 파형이 완전히 일치
  • 시간 지연이나 오차 없음

을 확인할 수 있다.

이 결과는
“수식 기반 모델과 구조 기반 모델이 동일한 물리 현상을 표현한다”
는 것을 명확히 보여준다.


4. 정리

  • Simulink 모델은
    → (미분)방정식 레벨에서 모델링할 수 있으며 운동 방정식과 신호 흐름을 이해하는 데 강점이 있다.
  • Simscape Multibody 모델은
    물리 구조와 운동 관계를 직관적으로 표현한다. 복잡한 구조도 쉽게 모델링할 수 있다는 장점이 있다.

다음 글에서는 워크숍의 두 번째 실습 예제인 진자 운동 모델링을 중심으로,

  • Frame에 대한 더 자세한 설명
  • Revolute Joint를 이용한 회전 운동
  • Rigid Transform을 이용한 Frame의 이동

을 step-by-step으로 살펴볼 예정이다.