Main Content

튀어 오르는 공 시뮬레이션

이 예제에서는 튀어 오르는 공(Bouncing Ball)을 Simulink®에서 두 가지 다른 접근 방식을 사용하여 모델링하는 방법을 보여줍니다.

개요

그림 1: 높이 10m에서 15m/s 속도로 공을 위로 던졌습니다.

튀어 오르는 공 모델은 하이브리드 동적 시스템의 전형적인 예입니다. 하이브리드 동적 시스템은 시스템 동특성이 변할 수 있고 상태 값이 급등할 수 있는 이산 천이뿐만 아니라, 연속 동특성도 포괄하는 시스템입니다. 튀어 오르는 공의 연속 동특성은 다음과 같이 간단히 지정됩니다.

$$
\frac{d v}{d t} = -g,
$$

$$
\frac{d x}{d t} = v,
$$

여기서 $g$는 중력 가속도이고, $x(t)$는 공의 위치이며, $v(t)$는 속도입니다. 따라서 시스템은 두 개의 연속 상태, 즉 위치 $x$와 속도 $v$를 가집니다.

모델의 하이브리드 시스템 특성은 공과 지면의 충돌 모델링에서 비롯됩니다. 공이 지면과 부분 탄성 충돌을 띤다고 가정할 경우, 충돌 전의 속도 $v^-$ 및 충돌 후의 속도 $v^+$는 공의 반발 계수 $\kappa$와 다음과 같은 관계를 가질 수 있습니다.

$$
v^+ = -\kappa v^-, \qquad x = 0
$$

따라서 튀어 오르는 공은 천이 조건 $x=0$에서 연속 상태(속도)로 튀어 오릅니다.

튀어 오르는 공은 제논 현상을 보여주는 가장 간단한 모델 중 하나입니다. 보통, 특정 하이브리드 시스템에서 유한한 시간 간격 내에 무한한 수의 이벤트가 발생할 때 이를 제논 동작이라고 합니다. 튀어 오르는 공 모델에서 공의 에너지가 감소함에 따라, 점점 더 짧은 시간 간격으로 지면과의 충돌이 많이 발생하기 시작합니다. 이로써 모델에 제논 동작이 발생합니다. 제논 동작이 발생하는 모델은 기본적으로 컴퓨터에서 시뮬레이션하기 어렵지만, 일반적이고 중요한 엔지니어링 응용 사례에서는 이를 많이 접하게 됩니다.

두 개의 Integrator 블록을 사용하여 튀어 오르는 공 모델링하기

이 모델 열기

두 개의 Integrator 블록을 사용하여 튀어 오르는 공을 모델링할 수 있습니다. 왼쪽의 Integrator는 첫 번째 수식을 모델링하는 속도 적분기이고, 오른쪽의 Integrator는 위치 적분기입니다. Position Integrator 블록 대화 상자로 이동하면 하한이 0인 것을 확인할 수 있습니다. 이 조건은 공이 지면 아래로 내려갈 수 없다는 제약 조건을 나타냅니다.

위치 적분기의 상태 포트와 이에 대응되는 비교 결과는 공이 지면에 닿는 시점을 감지하고 두 적분기를 재설정하는 데 사용됩니다. 속도 적분기의 상태 포트는 $v^+$ 계산에 사용됩니다.

시스템의 제논 동작을 관찰하기 위해 구성 파라미터 대화 상자의 솔버 창으로 이동합니다. '영점교차 옵션' 섹션에서 '알고리즘'이 '비적응형'으로 설정되었고 시뮬레이션 '중지 시간'이 25초로 설정된 것을 확인합니다. 시뮬레이션을 실행합니다.

공이 지면에 점점 더 자주 닿으면서 에너지가 감소함에 따라 시뮬레이션에서 오류가 발생하는 것을 확인할 수 있습니다. 결과적으로 시뮬레이션은 허용된 '연속 영점교차 개수'의 디폴트 제한인 1000을 초과합니다. 이제 구성 파라미터 대화 상자로 이동합니다. '영점교차 옵션' 섹션에서 '알고리즘'을 '적응형'으로 설정합니다. 이 알고리즘은 이 같은 채터링 동작을 정교하게 처리합니다. 따라서 이제 시스템을 20초 넘게 시뮬레이션할 수 있습니다. 하지만 21초와 25초 사이에 상태 채터가 발생하고 약 20초 지점에서 모델에 강한 채터링이 발생한다는 Simulink 경고가 표시됩니다.

Second-Order Integrator 블록을 사용하여 튀어 오르는 공 모델링하기

이 모델 열기

하나의 Second-Order Integrator 블록을 사용하여 이 시스템을 모델링할 수 있습니다. 이 경우 두 번째 수식 $dx/dt=v$는 Second-Order Integrator 블록 내부에 있습니다. Second-Order Integrator 블록 대화 상자로 이동하면 이전과 같이 $x$의 하한이 0인 것을 확인할 수 있습니다. 이 블록 대화 상자의 특성 탭으로 이동하면 옵션 'x가 포화 상태에 이르면 dx/dt 다시 초기화'가 선택되어 있는 것을 볼 수 있습니다. 이 파라미터를 사용하면, $x$가 포화 한도에 도달하는 순간 $dx/dt$(튀어 오르는 공 모델에서 $v$)를 새 값으로 다시 초기화할 수 있습니다. 따라서 튀어 오르는 공 모델에서 이 옵션은 공이 지면에 닿으면 속도가 다른 값, 즉 충돌이 발생한 이후의 속도로 설정될 수 있음을 의미합니다. 지면과 충돌한 후의 속도를 계산하기 위한 루프를 살펴보십시오. 충돌하기 직전의 공의 속도 $v^-$를 포착하기 위해 Second-Order Integrator 블록의 $dx/dt$ 출력 포트와 Memory 블록이 사용됩니다. 그런 다음 다시 튀어 오르는 속도 $v^+$를 계산하기 위해 $v^-$가 사용됩니다.

구성 파라미터 대화 상자의 솔버 창으로 이동합니다. '영점교차 옵션' 섹션에서 '알고리즘'이 '비적응형'으로 설정되었고 시뮬레이션 '중지 시간'이 25초로 설정된 것을 확인합니다. 모델을 시뮬레이션합니다. 시뮬레이션에서 아무런 문제가 발생하지 않습니다. '알고리즘'을 '적응형'으로 설정하지 않아도 t = 20초 이후에 과도한 채터가 발생하는 일 없이 모델을 시뮬레이션할 수 있었습니다.

Second-Order Integrator 모델이 튀어 오르는 공 모델링에 선호되는 접근 방식임

공이 매번 튀어 오르는 데 필요한 시간을 합산하여, 공이 속도가 0인 상태로 지면에 안착하는 정확한 시간 $t^*$를 해석적으로 계산할 수 있습니다. 이 시간은 무한 기하 급수의 합이며, 다음과 같이 표현됩니다.

$$
t^* = \frac{1}{g}\left(v_0+ v_1\left(\frac{1+\kappa}{1-\kappa}\right) \right),\qquad v_1=\sqrt{v_0^2+2gx_0}.
$$

여기서 $x_0$$v_0$은 각각 위치와 속도의 초기 조건입니다. $t&#62;t^*$인 경우 공의 속도와 위치는 모두 0이어야 합니다. 아래 그림에서 두 시뮬레이션의 결과가 $t^*$ 근방에 플로팅되어 있습니다. 플롯에서 빨간색 수직 선은 지정된 모델 파라미터에 대한 $t^*$입니다. $t<t^*$이고 $t^*$에서 크게 벗어나는 경우 두 모델 모두 정밀하게 동일한 결과를 생성합니다. 따라서 두 번째 모델의 자홍색 선만 플롯에 표시됩니다. 하지만 $t^*$ 이후 첫 번째 모델의 시뮬레이션 결과는 정확하지 않습니다. $t&#62;t^*$이면 과도한 채터링 동작이 계속 발생하기 때문입니다. 이와 대조적으로, Second-Order Integrator 블록을 사용하는 두 번째 모델은 $t &#62; t^*$이면 정확히 0에 안착하게 됩니다.

그림 2: 두 접근 방식의 시뮬레이션 결과 비교.

그림 2는 두 번째 모델이 첫 번째 모델에 비해 더 우수한 수치적 특성을 갖는다는 사실을 단정적으로 보여줍니다. Second-Order Integrator 모델의 정확도가 더 높은 이유는 다음과 같습니다. 두 번째 미분 방정식 $dx/dt=v$는 Second-Order Integrator 블록 내부에 있습니다. 따라서 블록 알고리즘이 두 상태 간의 알려진 관계를 활용하고, 특정 조건에서 원치 않는 채터링 동작을 억제시키는 발견법을 적용할 수 있습니다. 그러한 발견법은 두 상태가 적분 오차와 채터링 동작으로 인해 더 이상 상호 일관되지 않을 때 활성화됩니다. 따라서 시스템에 대한 물리적 지식을 바탕으로, 특정 부류의 제논 모델에 대해 제논 상태로 고착되는 시뮬레이션 문제를 완화할 수 있습니다.