Simulink에서 시스템 설계하기
모델 기반 설계는 물리적 컴포넌트와 시스템으로 구성된 모델에 중점을 두며 설계, 테스트, 구현 활동의 기반을 제공합니다. 이 튜토리얼에서는, 경고 시스템을 납작한 형태의 로봇 모델에 추가해 봄으로써, 설계한 컴포넌트를 기존 시스템 모델에 추가하는 방법을 보여줍니다.
시스템 모델 열기
이 모델은 가정용 로봇 진공 청소기처럼 두 바퀴를 사용하여 이동하거나 회전할 수 있는 납작한 형태의 로봇입니다.
설계한 컴포넌트와 설계 목표 식별하기
설계 목표를 지정하는 것은 설계 작업에서 중요한 첫 단계입니다. 단순한 시스템이라도 설계 목표가 여러 개 있을 수 있고, 심지어 서로 경합 관계에 있을 수도 있습니다. 이 예제 모델에서는 다음과 같은 목표를 고려할 수 있습니다.
바퀴가 원하는 속도로 돌아가도록 힘 입력에 변화를 주는 제어기를 설계합니다.
장치가 미리 정해진 경로로 이동하도록 하는 입력을 설계합니다.
장치가 선을 따라 이동하도록 센서와 제어기를 설계합니다.
장치가 장애물을 피하면서 가능한 한 최단 경로를 사용하여 특정 지점에 도달하도록 계획 알고리즘을 설계합니다.
장치가 장애물을 피하면서 특정 지점으로 이동하도록 센서와 알고리즘을 설계합니다.
이 튜토리얼에서는 경고 시스템을 설계하는 방법을 보여줍니다. 장애물로부터의 거리를 측정하는 센서에 필요한 파라미터를 결정하기 위해 기존 모델을 사용합니다. 이 예제에서는 거리를 정확하게 측정하는 완벽한 센서가 있다고 가정합니다. 경고 시스템은 이러한 측정값을 고정 간격으로 샘플링하여 출력이 측정값의 0.05m 이내에 유지되도록 함으로써 로봇이 장애물에 부딪히기 전에 정지할 수 있도록 제 시간에 경고를 트리거합니다.
시뮬레이션을 통해 시스템 동작 분석하기
새 컴포넌트를 설계하려면 로봇의 직진 동작을 분석하여 다음을 확인해야 합니다.
바퀴에 제공되는 전력이 끊겼을 때 로봇이 최고 속도로 이동할 수 있는 거리
로봇의 최고 속도
모델을 시뮬레이션합니다. 이 모델은 힘 입력 신호를 받으면 동작을 시작하고 로봇이 정상 속도에 도달할 때까지 기다리다가 힘을 0으로 설정합니다.
모델에서
Inputs
라는 서브시스템을 더블 클릭합니다.기존 스텝 입력을 삭제하고 Pulse Generator 블록을 추가합니다.
다음과 같이 Pulse Generator 블록에 대한 파라미터를 설정합니다.
진폭:
1
주기:
20
펄스 폭:
15
이러한 파라미터 값은 로봇이 최고 속도에 도달하도록 돕습니다. 파라미터를 변경하여 여러 다른 값이 로봇의 움직임에 미치는 영향을 확인할 수 있습니다.
모델을 20초 동안 시뮬레이션합니다.
시뮬레이션 결과를 분석합니다. 시뮬레이션 데이터 인스펙터를 열려면 데이터 인스펙터를 클릭합니다. 이 모델은
linear speed
신호,X position
신호,Y position
신호에 대한 데이터를 기록합니다.세 가지 신호를 모두 보기 위해 서브플롯 레이아웃을 변경합니다. "시각화 및 레이아웃" 버튼
을 클릭합니다. 그런 다음 기본 레이아웃에서 아래쪽 분할 레이아웃
을 선택합니다.
위쪽 서브플롯에서
linear speed
신호를 플로팅합니다.왼쪽 아래 서브플롯에서
X position
신호를 플로팅합니다.오른쪽 아래 서브플롯에서
Y position
신호를 플로팅합니다.
위쪽에 있는 서브플롯은 시뮬레이션 시간 3초에 입력 힘을 나타내는 펄스가 0으로 떨어진 후 로봇의 속도가 급격히 감소하는 것을 보여줍니다. 속도가 점근적으로 0에 접근하지만, 0에 도달하지는 않습니다. 외력이 없는 느린 속도의 동역학을 정확히 모델링하려면 시스템을 더 복잡하게 표현해야 합니다. 하지만 이 예제의 목적상 시스템을 이렇게 근사적으로 표현하는 것 정도로 충분합니다.
아래쪽에 있는 서브플롯은 시뮬레이션 과정에서 로봇의 x 위치와 y 위치를 보여줍니다. 로봇은 y 방향으로 움직이지 않습니다. x 방향에서는 시뮬레이션 시작 시 위치가 급격히 변경됩니다. 시뮬레이션 시간 3초쯤에 로봇의 속도가 감소함에 따라 위치가 더 느리게 변경됩니다.
확대/축소하고 패닝하여 로봇의 최종 위치를 구할 수 있습니다. "확대" 버튼 을 클릭한 다음 로봇 위치를 보여주는 왼쪽 아래 서브플롯을 클릭하고 끌어서 놓아 확대합니다. 시간 3초에서 로봇의 위치는 약 0.55m입니다. 시뮬레이션 종료 시, 로봇의 위치는 약 0.7m입니다. 시뮬레이션 종료 시 로봇의 속도는 0에 가까우므로, 결과는 외력이 0으로 떨어진 후 로봇이 움직이는 거리가 0.16m 미만임을 보여줍니다.
커서를 사용하여 최고 속도를 구할 수 있습니다. "데이터 커서를 표시하거나 숨깁니다" 버튼 을 클릭합니다. 속도 곡선이 평탄한 부분에 커서를 놓습니다. 데이터 커서 레이블은 로봇의 최고 속도가 0.183m/s임을 보여줍니다. 로봇이 0.05m 이동하는 데 걸리는 시간을 계산하기 위해 0.05m를 0.183m/s로 나누면 0.27초라는 결과를 얻을 수 있습니다.
컴포넌트를 설계하고 설계 검증하기
센서 설계는 다음 컴포넌트로 이루어집니다.
로봇과 장애물과의 거리에 대한 측정값 — 이 예제에서는 측정값이 완벽하다고 가정합니다.
경고 시스템에서 각각의 거리를 측정하는 시간 간격 — 측정값 오차를 0.05m 미만으로 유지하려면 샘플링 간격이 0.27초보다 작아야 합니다. 0.25초를 사용하겠습니다.
센서가 경고를 생성하는 거리 — 분석에 따르면 로봇이 장애물에서 약 0.16m 떨어졌을 때 감속을 시작해야 합니다. 실제 경고 생성 거리는 개별 측정값들의 오차 0.05m도 고려해야 합니다.
설계한 컴포넌트 추가하기
센서를 구축합니다.
입력 포트 4개와 출력 포트 1개를 갖는 서브시스템을 만듭니다. 서브시스템은 로봇의 x, y 좌표와 장애물의 x, y 좌표에 대한 입력값을 받습니다. 센서에서 생성되는 경고 신호는 출력 포트에 연결됩니다.
거리 측정 서브시스템을 생성합니다.
Sensor model
이라는 서브시스템에서 Subtract 블록,magnitude^2
함수를 포함한 Math Function 블록, Sum 블록, Sqrt 블록을 사용하여 거리 계산을 구현합니다. 서브시스템 내에서 입력 포트의 배열이 Subsystem 블록 인터페이스의 포트 배열과 일치할 필요는 없습니다.샘플링을 모델링하기 위해 Discrete 라이브러리의 서브시스템에 Zero-Order Hold 블록을 추가하고 블록의 샘플 시간 파라미터를
0.25
로 설정합니다.거리 계산 결과를 Zero-Order Hold 블록의 입력에 연결합니다.
경고 논리를 모델링하기 위해 Logic and Bit Operations 라이브러리에서 Compare to Constant 블록을 추가하고 블록 파라미터를 다음과 같이 설정합니다.
연산자:
<=
상수 값:
0.21
출력 데이터형:
boolean
이러한 파라미터 값을 사용하면, 로봇과 장애물 간의 거리를 나타내는 입력값이 0.21보다 작거나 같은 경우 블록 출력값은 1입니다.
Zero-Order Hold 블록의 출력을 Compare to Constant 블록의 입력에 연결합니다.
마지막으로, Compare to Constant 블록의 출력을
Alert
라는 Outport 블록에 연결합니다.
설계 검증하기
Constant 블록을 Sensor model
서브시스템에 대한 입력으로 사용하여 장애물 위치가 X = 0.65이고 Y = 0인 설계를 테스트합니다. 이 테스트에서는 X 방향에서의 설계 기능을 검증합니다. 다른 경로에 대해 유사한 테스트를 만들 수 있습니다. 이 모델은 경고를 생성할 뿐이며 로봇을 제어하지는 않습니다.
장애물 위치를 설정합니다. Sources 라이브러리에서 Constant 블록을 2개 추가하고 상수 값을
0.65
및0
으로 설정합니다. 로봇의 위치 출력을 센서의 입력에 연결합니다.데이터를 기록하기 위해 Outport 블록을
Sensor model
서브시스템에 연결합니다.신호 기록을 위해
X position
신호와Y position
신호를 표시합니다. 두 신호를 선택합니다. 시뮬레이션 탭에서 신호 기록을 클릭합니다.모델을 시뮬레이션합니다.
시뮬레이션 데이터 인스펙터에서 "시각화 및 레이아웃" 버튼 을 클릭하여 플롯 레이아웃을
2
×1
레이아웃으로 변경합니다. 위쪽 서브플롯에서 X position
신호를 플로팅합니다. 아래쪽 서브플롯에서 Alert
신호를 플로팅합니다.
로봇 위치에 대한 플롯은 이전 실행과 똑같아 보입니다. 경고 신호에 대한 플롯은 로봇이 장애물 위치에서 0.21m 이내로 들어올 때 경고 신호 값이 1이 되어 이 컴포넌트의 설계 요구 사항을 충족함을 보여줍니다.
정형적으로 명세된 요구 사항이 있고 복잡한 컴포넌트를 갖는 실제 시스템을 지원하기 위해 Simulink® 제품군에는 설계 프로세스를 보다 세부적으로 조정하고 자동화하는 툴이 추가로 포함되어 있습니다. Requirements Toolbox™는 요구 사항을 정형적으로 정의하고 이를 모델 컴포넌트와 연결하는 툴을 제공합니다. Simulink Control Design™은 로봇 제어기를 구축할 때 설계를 용이하게 해줍니다. Simulink Verification and Validation™ 제품은 컴포넌트와 시스템 테스트를 위한 정형적 프레임워크를 설정합니다.
참고 항목
블록
- Pulse Generator | Gain | Integrator | Sum | Constant | Zero-Order Hold | Subsystem