Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

시스템을 모델링하고 검증하기

시스템 구조 내에서 각 구성요소를 모델링하여 해당 구성요소의 물리적 또는 기능적 동작을 표현합니다. 테스트 데이터를 사용해 시뮬레이션을 수행하여 기본 구성요소 동작을 검증합니다.

시스템 레이아웃 열기

전체 시스템 레이아웃에 대한 큰 그림을 보면 개별 구성요소를 모델링할 때 도움이 됩니다. 먼저, 레이아웃 모델을 불러옵니다. MATLAB 명령줄에 다음을 입력하십시오.

open_system('system_layout.slx')

구성요소 모델링하기

구성요소의 Simulink® 모델은 다음과 같은 몇 가지 시작점을 바탕으로 합니다.

  • 물리적 구성요소에서 출력과 입력 사이의 명시적 수학적 관계 — 미분 방정식의 적분과 대수 계산을 통해 구성요소의 입력에서 직접 또는 간접적으로 출력을 계산할 수 있습니다. 예를 들어, 주어진 유입량에 대해 수조의 수위를 계산하는 것은 명시적인 관계입니다. 각 Simulink 블록은 입력에서 출력을 계산하는 정의에 따라 실행됩니다.

  • 물리적 구성요소에서 모델 변수 사이의 암시적 수학적 관계 — 변수가 상호 종속적이기 때문에 구성요소에 입력과 출력을 명시적으로 할당하지 않습니다. 예를 들어, 회로에 연결된 모터의 + 단자의 전압과 - 단자의 전압은 암시적인 관계를 갖습니다. Simulink에서 이러한 관계를 모델링하려면 Simscape™와 같은 물리적 모델링 툴을 사용하거나, 이러한 변수를 입력/출력 정의가 가능한 더 큰 구성요소의 일부로 모델링합니다. 모델링 목표와 구성요소 정의를 상세하게 검토하면 입력/출력 관계를 정의하는 데 도움이 될 수 있습니다.

  • 실제 시스템에서 확보한 데이터 — 실제 구성요소에서 입력/출력 데이터를 측정했지만 완전히 정의된 수학적 관계가 존재하지 않습니다. 많은 장치가 이 설명과 같이 모델링되지 않은 구성요소를 가집니다. 예를 들어, 텔레비전에 의해 발생하는 열이 이에 해당됩니다. System Identification Toolbox™를 사용하여 이러한 시스템에 대한 입력/출력 관계를 정의할 수 있습니다.

  • 명시적인 기능 정의 — 대수 계산 및 논리 계산을 통해 기능적 구성요소의 입력에서 출력을 정의합니다. 예를 들어, 온도 조절 장치의 스위칭 논리가 이에 해당됩니다. 대부분의 기능적 관계를 Simulink 블록과 서브시스템으로 모델링할 수 있습니다.

이 튜토리얼에서는 명시적 입력/출력 관계를 갖는 물리적 구성요소와 기능적 구성요소를 모델링합니다. 이 튜토리얼에서 수행할 작업은 다음과 같습니다.

  1. 시스템 방정식을 사용하여 Simulink 모델을 만듭니다.

  2. Simulink 편집기에서 Simulink 블록을 추가하고 연결합니다. 블록으로 방정식의 계수와 변수를 표현합니다.

  3. 각 구성요소에 대해 개별적으로 모델을 구축합니다. 시스템의 모델을 구축하는 가장 효과적인 방법은 먼저 구성요소를 독립적으로 고려하는 것입니다.

  4. 먼저, 시스템의 근삿값을 사용하여 단순한 모델을 구축합니다. 모델의 정확도에 영향을 미칠 수 있는 가정을 식별합니다. 복잡도 수준이 모델링 및 정확도 요구 사항을 충족할 때까지 반복적으로 세부 수준을 높여갑니다.

물리적 구성요소 모델링하기

구성요소 사이의 관계를 설명합니다(예: 데이터, 에너지, 힘 전달). Simulink에서 시스템 방정식을 사용하여 시스템의 그래픽 모델을 구축합니다.

구성요소 모델링을 시작하기 전에 몇 가지 질문을 해야 합니다.

  • 각 구성요소에서 무엇이 상수인가? 어떤 값이 사용자가 직접 변경하지 않는 한 변화하지 않고 유지되는가?

  • 각 구성요소에서 무엇이 변수인가? 어떤 값이 시간 경과에 따라 변화하는가?

  • 하나의 구성요소가 몇 개의 상태 변수를 가지는가?

과학적 원리를 사용하여 각 구성요소에 대한 방정식을 도출합니다. 대부분의 시스템 방정식은 다음 세 가지 범주로 나뉩니다.

  • 연속 시스템의 경우, 미분 방정식으로 변수의 변화율을 설명하며, 시간의 모든 값에 대해 방정식이 정의됩니다. 예를 들어, 1계 미분 방정식은 자동차의 속도를 제공합니다.

    dv(t)dt=bmv(t)+u(t)

  • 이산 시스템의 경우, 차분 방정식으로 변수의 변화율을 설명합니다. 하지만 특정 시간에 대해서만 방정식이 정의됩니다. 예를 들어, 이산 PD(비례-미분) 제어기에서 생성하는 제어 신호는 다음과 같습니다.

    pd[n]=(e[n]e[n1])Kd+e[n]Kp

  • 도함수를 사용하지 않는 방정식은 대수 방정식입니다. 예를 들어, 대수 방정식은 2개의 구성요소를 갖는 병렬 회로에서 총 전류를 제공합니다.

    It=Ia+Ib

바퀴와 직진 동작.  바퀴에 두 개의 힘이 작용합니다.

  • 모터에 의해 가해지는 힘 — 힘 F는 속도가 변하는 방향으로 작용하며, 바퀴 서브시스템에 대한 입력입니다.

  • 항력(drag force) — 힘 Fdrag는 속도가 변하는 방향과 반대로 작용하며, 속도의 함수입니다.

    Fdrag=kdragV|V|

가속도는 이들 힘의 합에 비례합니다.

(m/2)V˙=FFdrag(m/2)V˙=FkdragV|V|V˙=FkdragV|V|(m/2)

여기서 kdrag는 항력 계수이며 m은 로봇의 질량입니다. 각 바퀴는 이 질량의 절반을 지탱합니다.

바퀴 모델을 구축합니다.

  1. system_layout 모델에서 Right Wheel 서브시스템을 더블 클릭하여 빈 서브시스템을 표시합니다.

  2. 속도와 가속도를 모델링합니다. Integrator 블록을 추가합니다. 초기 조건은 0으로 설정된 상태로 둡니다. 이 블록의 입력은 가속도 Vdot이고, 출력은 속도 V입니다.

  3. 항력을 모델링합니다. User-Defined Functions 라이브러리에서 MATLAB Function 블록을 추가합니다. MATLAB Function 블록을 사용하면 모델에 수학 표현식을 빠르게 구현할 수 있습니다. 함수를 편집하려면 블록을 더블 클릭하여 MATLAB Function 편집기를 여십시오.

  4. MATLAB Function 블록의 인수를 정의합니다. MATLAB Function 블록 편집기에서 데이터 편집 버튼을 클릭합니다. k_drag를 클릭하고 스코프파라미터로 설정한 후 적용을 클릭합니다.

  5. Subtract 블록을 사용하여 모터 힘에서 항력을 뺍니다. 파라미터 1/(m/2)를 갖는 Gain 블록을 사용하여 힘-가속도 방정식을 완성합니다.

  6. 블록을 마우스 오른쪽 버튼으로 클릭하고 회전 및 반전 > 블록 반전을 선택하여 MATLAB Function 블록의 방향을 바꿉니다. 블록을 연결합니다.

  7. 두 바퀴는 동일한 동특성을 갖습니다. 따라서 방금 모델링한 Right Wheel 서브시스템을 복사하여 Left Wheel 서브시스템에 붙여 넣습니다.

  8. 모델의 최상위 수준을 봅니다. 부모까지 탐색 버튼 을 클릭합니다.

회전 동작.   두 바퀴가 서로 반대 방향으로 돌면 반지름이 r인 원을 그리면서 움직이므로 로봇이 회전 동작을 하게 됩니다. 바퀴가 서로 같은 방향으로 돌면 회전이 일어나지 않습니다. 바퀴 속도의 크기가 항상 동일하다고 가정하면, 두 바퀴의 속도 VR과 VL 사이의 차이에 따라 회전 동작이 달라지도록 모델링하는 것이 실용적입니다.

θ˙=VRVL2r

회전 동특성 모델을 구축합니다.

  1. system_layout 모델의 최상위 수준에서 Rotation 서브시스템을 더블 클릭하여 빈 서브시스템을 표시합니다. Inport 블록과 Outport 블록 간 연결을 삭제합니다.

  2. 각속도와 각도를 모델링합니다. Integrator 블록을 추가합니다. 초기 조건은 0으로 설정된 상태로 둡니다. 이 블록의 출력은 각도 theta이고, 입력은 각속도 theta_dot입니다.

  3. 접선 속도에서 각속도를 계산합니다. 파라미터 1/(2*r)을 갖는 Gain을 추가합니다.

  4. 블록을 연결합니다.

  5. 모델의 최상위 수준을 봅니다. 부모까지 탐색 버튼 을 클릭합니다.

기능적 구성요소 모델링하기

함수의 입력부터 출력까지 함수에 대해 설명합니다. 이 설명에는 대수 방정식과 논리 구문이 포함될 수 있으며, 이를 사용하여 Simulink에서 시스템의 그래픽 모델을 구축할 수 있습니다.

좌표 변환.  X, Y 좌표상 로봇의 속도 VX, VY는 직진 속도 VN 및 각도 theta와 다음의 관계를 가집니다.

VX=VNcos(θ)VY=VNsin(θ)

좌표 변환 모델을 구축합니다.

  1. system_layout 모델의 최상위 수준에서 Coordinate Transform 서브시스템을 더블 클릭하여 빈 서브시스템을 표시합니다.

  2. 삼각 함수를 모델링합니다. Math Operations 라이브러리에서 SinCos 블록을 추가합니다.

  3. 곱셈을 모델링합니다. Math Operations 라이브러리에서 Product 블록을 2개 추가합니다.

  4. 블록을 연결합니다.

  5. 모델의 최상위 수준을 봅니다. 부모까지 탐색 버튼 을 클릭합니다.

모델 파라미터 설정하기

모델 파라미터 값에는 다음을 소스로 사용할 수 있습니다.

  • 서면으로 작성된 사양(예: 표준 속성 테이블 또는 제조업체 데이터 시트)

  • 기존 시스템에서 직접 확보한 측정값

  • 시스템 입력/출력을 사용한 추정값

이 모델에서 사용하는 파라미터는 다음과 같습니다.

파라미터기호
질량m2.5kg
구름 저항k_drag30Ns2/m
로봇 반지름r0.15m

Simulink는 MATLAB® 작업 공간을 사용하여 파라미터를 계산합니다. MATLAB 명령 창에서 다음 파라미터를 설정하십시오.

m = 2.5;
k_drag = 30;
r = 0.15;

시뮬레이션을 통해 구성요소 검증하기

입력을 전달하고 출력을 관찰하여 구성요소를 검증합니다. 이렇게 간단한 검증으로도 모델을 바로 개선할 수 있는 방법을 찾을 수 있습니다. 이 예제에서는 다음 동작을 검증합니다.

  • 바퀴에 지속적으로 힘이 가해지면 정상 상태 속도에 도달할 때까지 속도가 증가한다.

  • 바퀴가 서로 반대 방향으로 돌 때 회전각이 일정한 비율로 증가한다.

바퀴 구성요소 검증하기

바퀴 구성요소에 대한 테스트 모델을 만들고 실행합니다.

  1. 새 모델을 만듭니다. 시뮬레이션 탭에서 새로 만들기 를 클릭합니다. Right Wheel 블록을 새 모델로 복사합니다.

  2. 테스트 입력을 만듭니다. Sources 라이브러리에서 Step 블록을 추가하고 Right Wheel 블록의 입력에 연결합니다. 스텝 시간 파라미터는 1로 설정된 상태로 둡니다.

  3. 뷰어를 출력에 추가합니다. Right Wheel 블록의 출력 포트를 마우스 오른쪽 버튼으로 클릭하고 뷰어 만들기 및 연결 > Simulink > 스코프를 선택합니다.

  4. 시뮬레이션을 실행합니다. 시뮬레이션 탭에서 실행 을 클릭합니다.

시뮬레이션 결과가 일반적으로 예상되는 동작을 보입니다. 스텝 시간에 힘이 가해지기 전까지 동작이 일어나지 않습니다. 힘이 가해지면 속도가 증가하기 시작하며 가해진 힘과 항력이 평형 상태에 도달하면 일정하게 유지됩니다. 이 시뮬레이션은 검증 외에도 주어진 힘에 대해 바퀴의 최대 속도 정보를 제공합니다.

회전 구성요소 검증하기

회전 모델에 대한 테스트 모델을 만들고 실행합니다.

  1. 새 모델을 만듭니다. 를 클릭하고 Rotation 블록을 새 모델로 복사합니다.

  2. 새 모델에 테스트 입력을 만듭니다. Sources 라이브러리에서 Step 블록을 추가합니다. 스텝 시간 파라미터는 1로 설정된 상태로 둡니다. 이 블록을 Rotation 블록의 입력에 연결합니다. 이 입력은 바퀴가 서로 반대 방향으로 돌 때 바퀴 속도의 차이를 나타냅니다.

  3. 뷰어를 출력에 추가합니다. Rotation 블록의 출력 포트를 마우스 오른쪽 버튼으로 클릭하고 뷰어 만들기 및 연결 > Simulink > 스코프를 선택합니다.

  4. 시뮬레이션을 실행합니다. 시뮬레이션 탭에서 실행 을 클릭합니다.

이 시뮬레이션에서는 두 바퀴가 동일한 속도로 서로 반대 방향으로 도는 동안 각도가 꾸준히 증가하는 것을 보여줍니다. 각도 출력을 더욱 쉽게 해석하기 위해 모델을 개선할 수 있습니다. 예를 들면 다음과 같이 할 수 있습니다.

  • 출력을 라디안에서 각도로 변환할 수 있습니다. 180/pi의 이득을 갖는 Gain 블록을 추가합니다.

  • 각도 출력을 360도 주기로 표시할 수 있습니다. 함수 mod를 사용하는 Math Function 블록을 추가합니다.

MATLAB 삼각 함수는 라디안 단위의 입력을 받습니다.

모델 검증하기

개별 구성요소를 검증한 후에는 전체 모델에 대해 유사한 검증을 수행할 수 있습니다. 이 예제에서는 다음 동작을 검증합니다.

  • 두 바퀴에 같은 방향으로 동일한 힘이 가해졌을 때 로봇이 일직선으로 이동한다.

  • 두 바퀴에 서로 반대 방향으로 동일한 힘이 가해졌을 때 로봇이 제자리에서 회전한다.

  1. system_layout 모델에서 Inputs 서브시스템을 더블 클릭하여 빈 서브시스템을 표시합니다.

  2. Step 블록을 추가하여 테스트 입력을 만듭니다. 스텝 시간 파라미터는 1로 설정된 상태로 둡니다. 이 블록을 두 Outport 블록에 연결합니다.

  3. 모델의 최상위 수준에서 두 출력 신호를 동일한 스코프 뷰어에 연결합니다.

  4. 모델을 실행합니다.

    이 그림에서 노란색 선은 X 방향이고 파란색 선은 Y 방향입니다. 각도가 0이고 달라지지 않으므로 차량이 예상대로 X 방향으로만 이동합니다.

  5. Inputs 서브시스템을 더블 클릭하고 소스와 두 번째 출력 사이에 파라미터 -1을 갖는 Gain을 추가합니다. 그러면 왼쪽 바퀴의 방향이 반대로 바뀝니다.

  6. 각도 출력에 스코프를 추가합니다.

  7. 모델을 실행합니다.

    첫 번째 보기에서는 X-Y 평면에 동작이 없음을 보여줍니다. 두 번째 보기에서는 정상 회전이 있음을 보여줍니다.

이 최종 모델에서 입력을 변경해 보면 모델에 관한 여러 질문에 대한 답을 얻을 수 있습니다. 예를 들면 다음과 같습니다.

  • 초기 각도가 0이 아니면 어떻게 되는가?

  • 힘이 0으로 떨어질 때 동작이 정지하기까지 얼마나 걸리는가?

  • 로봇이 더 무거우면 어떻게 되는가?

  • 로봇이 더 매끄러운 표면에서 움직이면, 즉 항력 계수가 더 낮으면 어떻게 되는가?

관련 항목