키보드 제어

학습 목표

키를 누른 순간뿐 아니라 놓거나 통신이 끊긴 뒤의 동작도 정해야 움직이는 장치를 멈출 수 있습니다.

실행 조건

입력 이벤트 목록으로 동작을 재현합니다. 실제 키보드·장치 연결은 같은 처리 함수를 이벤트 수신부와 연결하는 별도 단계입니다.

키 입력을 속도 명령으로

시작 조건

t=[00.10.20.30.40.5]t=\begin{bmatrix}0&0.1&0.2&0.3&0.4&0.5\end{bmatrix} s, key=[w,w,release,d,quit,w]. w=(1,0), d=(0,-1) m/s로 둡니다.

진행 방법

  1. 각 입력을 vx·vy·종료 상태로 바꾸는 순수 함수를 만드세요.
  2. release에서는 속도를 0으로, quit 이후에는 모든 입력을 무시하도록 처리하세요.
  3. 입력 행별로 명령 벡터와 상태를 기록하세요.

남길 결과

events=list(zip([0,.1,.2,.3,.4,.5],['w','w','release','d','quit','w']))
key_velocity={'w':(1.,0.),'s':(-1.,0.),'a':(0.,1.),'d':(0.,-1.)}
# TODO: 종료 상태를 포함하는 decode(key, stopped) 함수를 작성하세요.

결과 기록·자가 점검

t [s]:

key:

vx [m/s]:

vy [m/s]:

종료 상태:

확인할 점

시간 간격과 누적 이동

시작 조건

활동 1의 속도를 다음 입력 시점까지 유지한다고 가정합니다. 초기 위치는 (0,0) m입니다.

진행 방법

  1. 각 구간에서 Δ위치=v*Δt를 계산하세요.
  2. 시간별 위치 표와 xy 궤적을 그리세요.
  3. 입력 간격을 모두 .2 s로 바꾼 결과와 비교하세요.

남길 결과

import numpy as np
import matplotlib.pyplot as plt
position=np.zeros(2)
# TODO: 첫 활동의 명령을 시간 간격에 따라 적분하세요.

결과 기록·자가 점검

구간:

Δt [s]:

속도 [m/s]:

누적 위치 [m]:

확인할 점

중복 입력과 긴 공백

시작 조건

w 키가 t∈{0,.01,.02}t\in\{0,.01,.02\} s에 반복되고, 이후 .5 s 동안 입력이 없는 기록을 추가합니다. Timeout은 .2 s로 둡니다.

진행 방법

  1. 중복 입력은 속도 설정으로 해석하고 누적 가속 명령으로 해석하지 않도록 비교하세요.
  2. 마지막 입력 이후 .2 s가 지나면 정지하는 규칙을 넣으세요.
  3. Timeout 전후 명령과 위치가 어떻게 달라지는지 기록하세요.

남길 결과

events=[(0.,'w'),(.01,'w'),(.02,'w')]
timeout=.2
# TODO: .01 s 간격의 가상 시계로 .5 s까지 명령을 계산하세요.

결과 기록·자가 점검

시점:

마지막 입력과 간격 [s]:

Timeout 여부:

속도:

위치:

확인할 점