Main Content

Simulink에서 시스템 설계하기

모델 기반 설계 패러다임은 물리적 컴포넌트와 시스템의 모델에 중점을 두며 설계, 테스트, 구현 활동의 기반을 제공합니다. 이 튜토리얼에서는 컴포넌트를 설계하여 기존 시스템 모델에 추가합니다.

시스템 모델 열기

이 모델은 가정용 로봇 진공 청소기처럼 두 바퀴를 사용하여 이동하거나 회전할 수 있는 납작한 형태의 로봇입니다. MATLAB® 명령줄에 다음을 입력하여 모델을 엽니다.

open_system('system_model.slx')

이 튜토리얼에서는 이 시스템을 분석하고 여기에 기능을 추가합니다.

설계한 컴포넌트와 설계 목표 식별하기

설계 목표를 지정하는 것은 설계 작업에서 중요한 첫 단계입니다. 단순한 시스템이라도 설계 목표가 여러 개 있을 수 있고, 심지어 서로 경합 관계에 있을 수도 있습니다. 이 예제 모델에서는 다음과 같은 목표를 고려할 수 있습니다.

  • 바퀴가 원하는 속도로 돌아가도록 힘 입력에 변화를 주는 제어기를 설계합니다.

  • 장치가 미리 정해진 경로로 이동하도록 하는 입력을 설계합니다.

  • 장치가 선을 따라 이동하도록 센서와 제어기를 설계합니다.

  • 장치가 장애물을 피하면서 가능한 한 최단 경로를 사용하여 특정 지점에 도달하도록 계획 알고리즘을 설계합니다.

  • 장치가 장애물을 피하면서 특정 지점으로 이동하도록 센서와 알고리즘을 설계합니다.

이 튜토리얼에서는 경고 시스템을 설계합니다. 장애물과의 거리를 측정하는 센서의 파라미터를 결정해야 합니다. 완벽한 센서는 장애물과의 거리를 정확하게 측정합니다. 경고 시스템은 이러한 측정값을 고정 간격으로 샘플링하여 출력이 항상 측정값 오차 0.05m 이내에 있도록 합니다. 이 시스템은 로봇이 장애물에 부딪히기 전에 정지할 수 있도록 적시에 경고를 생성합니다.

시뮬레이션을 통해 시스템 동작 분석하기

새 컴포넌트를 설계하려면 로봇의 직진 동작을 분석하여 다음을 확인해야 합니다.

  • 바퀴에 제공되는 전력이 끊겼을 때 로봇이 최고 속도로 이동할 수 있는 거리

  • 로봇의 최고 속도

모델을 시뮬레이션합니다. 이 모델은 힘 입력 신호를 받으면 동작을 시작하고 로봇이 정상 속도에 도달할 때까지 기다리다가 힘을 0으로 설정합니다.

  1. 모델에서 Inputs라는 서브시스템을 더블 클릭합니다.

  2. 기존 스텝 입력을 삭제하고 Pulse Generator 블록을 추가합니다.

  3. 다음과 같이 Pulse Generator 블록에 대한 파라미터를 설정합니다.

    • 진폭: 1

    • 기간: 20

    • 펄스 폭: 15

    이 파라미터는 최고 속도에 도달할 수 있도록 설계되었습니다. 파라미터를 변경하여 영향을 확인할 수 있습니다.

  4. 모델을 20초 동안 시뮬레이션합니다.

    시뮬레이션 결과를 분석하려면 모델의 플로팅 스코프에 연결된 신호를 확인하십시오.

    첫 번째 스코프는 시뮬레이션 시간 3초에 입력 힘을 나타내는 펄스가 0으로 떨어진 후 로봇의 속도가 급격히 감소하는 것을 보여줍니다. 속도가 점근적으로 0에 접근하지만, 0에 완전히 도달하지는 않습니다. 외력이 없는 느린 속도의 동역학을 정확히 모델링하려면 시스템을 훨씬 더 복잡하게 표현해야 합니다. 하지만 여기서는 시스템을 이렇게 근사적으로 표현하는 것 정도로 충분합니다.

    The scope shows the speed of the robot over the 20 second simulation.

    두 번째 스코프는 시뮬레이션 과정에서 로봇의 위치를 보여줍니다. 처음에는 위치가 더 빠르게 변경됩니다. 시뮬레이션 시간 3초쯤 로봇의 속도가 감소함에 따라 위치가 더 느리게 변경됩니다.

    The scope shows the position of the robot over the 20 second simulation.

로봇 위치를 보여주는 스코프 플롯을 확대합니다. 시간 3에서 로봇의 위치는 약 0.55m입니다. 시뮬레이션 종료 시, 로봇의 위치는 약 0.7m입니다. 시뮬레이션 종료 시 로봇의 속도는 0에 매우 가까우므로, 결과는 외력이 0으로 떨어진 후 로봇이 움직이는 거리가 0.16m 미만인 것으로 나타납니다.

The scope shows a closer view of the robot position over the 20 second simulation. The maximum value on the y-axis is 0.7.

최고 속도를 구하려면 다음을 수행하십시오.

  1. 시간 1초~3초에서 속도 신호가 평탄한 부분을 확대합니다.

  2. 확대/축소 버튼을 다시 클릭하여 확대/축소 모드에서 나갑니다.

  3. 커서 측정 을 클릭합니다.

  4. 속도 곡선이 평탄한 부분에 두 번째 커서를 놓습니다.

    The scope shows a closely zoomed view of the robot speed in the part of the simulation where the pulse signal is high. The cursor measurements panel is shown in the Scope window to the right of the plot.

커서 측정 패널의 열에 로봇의 최고 속도가 0.183m/s로 표시됩니다. 로봇이 0.05m 이동하는 데 걸리는 시간을 계산하기 위해 0.05m를 0.183m/s로 나누어 0.27초라는 결과를 얻습니다.

컴포넌트를 설계하고 설계 검증하기

센서 설계는 다음 컴포넌트로 이루어집니다.

  • 로봇과 장애물과의 거리에 대한 측정값 — 이 예제에서는 측정값이 완벽하다고 가정합니다.

  • 경고 시스템에서 각각의 거리를 측정하는 시간 간격 — 측정값 오차를 0.05m 미만으로 유지하려면 샘플링 간격이 0.27초보다 작아야 합니다. 0.25초를 사용하겠습니다.

  • 센서가 경고를 생성하는 거리 — 분석에 따르면 로봇이 장애물에서 약 0.16m 떨어졌을 때 감속을 시작해야 합니다. 실제 경고 생성 거리는 개별 측정값들의 오차 0.05m도 고려해야 합니다.

설계한 컴포넌트 추가하기

센서를 구축합니다.

  1. 입력 포트 4개와 출력 포트 1개를 갖는 서브시스템을 만듭니다. 서브시스템은 로봇의 x, y 좌표와 장애물의 x, y 좌표에 대한 입력값을 받습니다. 센서에서 생성되는 경고 신호는 출력 포트에 연결됩니다.

    The view of the sensor subsystem in the parent diagram shows the input and output ports.

  2. 거리 측정 서브시스템을 생성합니다. Sensor model이라는 서브시스템에서 Subtract 블록, magnitude^2 함수를 포함한 Math Function 블록, Sum 블록, Sqrt 블록을 사용하여 거리 계산을 구현합니다. 서브시스템 내에서 입력 포트의 배열이 Subsystem 블록 인터페이스의 포트 배열과 일치할 필요는 없습니다.

    Blocks inside the subsystem that represents the sensor implement the distance calculation.

  3. 샘플링을 모델링하기 위해 Discrete 라이브러리의 서브시스템에 Zero-Order Hold 블록을 추가하고 블록의 샘플 시간 파라미터를 0.25로 설정합니다.

  4. 거리 계산 결과를 Zero-Order Hold 블록의 입력에 연결합니다.

  5. 경고 논리를 모델링하기 위해 Logic and Bit Operations 라이브러리에서 Compare to Constant 블록을 추가하고 블록 파라미터를 다음과 같이 설정합니다.

    • 연산자: <=

    • 상수 값: 0.21

    • 출력 데이터형: boolean

    이러한 파라미터 값을 사용하면 입력값이 0.21보다 작거나 같은 경우 블록 출력값은 1입니다.

  6. Zero-Order Hold 블록의 출력을 Compare to Constant 블록의 입력에 연결합니다.

  7. 마지막으로, Compare to Constant 블록의 출력을 Alert라는 Outport 블록에 연결합니다.

    The block diagram shows the contents of the subsystem that models the sensor.

설계 검증하기

Constant 블록을 Sensor model 서브시스템에 대한 입력으로 사용하고 장애물 위치 X = 0.65, Y = 0을 설정하여 설계를 테스트합니다. 이 테스트에서는 X 방향에서의 설계 기능을 검증합니다. 다른 경로에 대해 유사한 테스트를 만들 수 있습니다. 이 모델은 경고 생성만 합니다. 로봇을 제어하지는 않습니다.

  1. 장애물 위치를 설정합니다. Sources 라이브러리에서 Constant 블록을 2개 추가하고 상수 값을 0.650으로 설정합니다. 로봇의 위치 출력을 센서의 입력에 연결합니다.

  2. Alert 출력에 스코프를 추가합니다.

    The view of the top model shows the floating scope added to the Alert output of the subsystem that represents the sensor.

  3. 모델을 시뮬레이션합니다.

스코프 내 로봇 위치의 플롯은 이전 실행과 똑같아 보입니다.

The scope shows the position of the robot over the 20 second simulation.

경고 신호에 연결된 스코프는 로봇이 장애물 위치에서 0.21m 이내로 들어올 때 경고 신호 값이 1이 되어 이 컴포넌트의 설계 요구 사항을 충족함을 나타냅니다.

The scope shows the value of the alert signal over the 20 second simulation.

정형적으로 명세된 요구 사항이 있고 복잡한 컴포넌트를 갖는 실제 시스템을 지원하기 위해 Simulink® 제품군에는 설계 프로세스를 보다 세부적으로 조정하고 자동화하는 툴이 추가로 포함되어 있습니다. Requirements Toolbox™는 요구 사항을 정형적으로 정의하고 이를 모델 컴포넌트와 연결하는 툴을 제공합니다. Simulink Control Design™은 로봇 제어기를 구축할 때 설계를 용이하게 해줍니다. Simulink Verification and Validation™ 제품은 컴포넌트와 시스템 테스트를 위한 정형적 프레임워크를 설정합니다.

관련 항목