강의자료 · 로봇기초실습

키보드 제어

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

실습 전에

01 키를 놓은 사건을 처리하지 않으면 어떻게 될까요?

설명

마지막 이동 상태가 남아 의도보다 오래 움직일 수 있습니다.

02 입력이 끊긴 경우와 종료 명령을 받은 경우를 어떻게 구분할까요?

설명

무응답은 Timeout으로, 명시적 종료는 종료 사건으로 처리하되 둘 다 안전한 정지 상태로 연결합니다.

실행 조건

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

실습

실습용 노트북 미리보기실습용 노트북 다운로드

1. 키 입력을 속도 명령으로

시작 조건

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. 입력 행별로 명령 벡터와 상태를 기록하세요.

남길 결과

기록 항목과 확인할 점
t [s]
key
vx [m/s]
vy [m/s]
종료 상태

확인할 점

  • quit 뒤의 w에서 속도가 다시 켜지지 않는가?
  • 정의하지 않은 키는 정지 또는 명시한 무시 규칙으로 처리되는가?

2. 시간 간격과 누적 이동

시작 조건

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

진행 방법

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

남길 결과

기록 항목과 확인할 점
구간
Δt [s]
속도 [m/s]
누적 위치 [m]

확인할 점

  • 속도와 이동 거리를 구분했는가?
  • 종료 이후 위치가 고정되는가?

3. 중복 입력과 긴 공백

시작 조건

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

진행 방법

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

남길 결과

기록 항목과 확인할 점
시점
마지막 입력과 간격 [s]
Timeout 여부
속도
위치

확인할 점

  • 실제 OS 키보드 입력을 보내지 않고 기록된 events로 재현 가능한가?
  • 입력 처리·시간 갱신·장치 전송이 서로 구분되어 있는가?