영상 검출에서 안전한 제어 명령으로

영상의 좌우·상하 오차를 이동 명령으로 바꿀 때 부호 오류와 흔들림이 어떻게 생기는지 모의 입력에서 확인합니다.

실습 전에

01 물체가 화면 오른쪽에 있으면 어느 방향으로 움직여야 할까요?

설명

영상 좌표와 기체 좌표의 방향을 먼저 정해야 명령의 부호를 판단할 수 있습니다.

02 물체를 잠깐 못 찾으면 이전 명령을 계속 써도 될까요?

설명

미검출·오래된 Frame을 구분하고 안전한 정지 명령으로 전환합니다.

실행 조건

기본 활동은 NumPy·Matplotlib을 사용합니다. 앞 단원과 연결할 때 OpenCV를 사용합니다.

실습

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

1. 검출 위치를 오차로 바꾸기

시작 조건

160×120 영상의 중심은 (80,60), 관측 중심은 (110,50)입니다. x는 오른쪽, y는 아래쪽입니다.

진행 방법

  1. 예제의 command(center)와 같은 부호로 ex=x−80e_x=x-80, ey=y−60e_y=y-60을 계산하세요. 중심과 관측점을 찍고 중심에서 관측점으로 향하는 화살표에 두 오차를 표시하세요.
  2. 각 축에서 |e|≤10|e|\le10 pixel이면 명령 0, 나머지는 0.02e0.02e로 계산한 뒤 범위를 [−0.5,0.5][-0.5,0.5]로 제한하세요. (110,50)(110,50)의 두 축 명령을 계산하고 함수 출력과 나란히 기록하세요.

남길 결과

기록 항목과 확인할 점
관측 중심
오차 x·y
유효 여부
명령

확인할 점

  • 영상 y축 방향을 세계 좌표의 위쪽과 혼동하지 않았는가?
  • Pixel Error·Normalized Command를 실제 기체의 Velocity [m/s]와 구분했는가?

2. 흔들림과 미검출 처리

시작 조건

x 관측은 [80,82,79,110,None,108], y=60y=60입니다. None은 물체를 찾지 못한 Frame입니다.

진행 방법

  1. 각 유효 관측에 command((x,60))를 적용한 명령과, 최근 유효 관측 최대 3개의 x 평균에 적용한 명령을 각각 구하세요. 시작 시 표본이 3개보다 적으면 모인 표본만 평균냅니다.
  2. None에서 명령을 0으로 만들고 평균용 기록도 비우세요. 뒤의 108은 새 기록의 첫 표본으로 처리하세요.
  3. Frame 순서·원 관측·평균 x·두 명령을 표로 남기고 같은 Frame 축에 표시하세요. 110으로 바뀐 Frame의 두 명령과 미검출 직후 명령을 짚어 차이를 설명하세요.

남길 결과

기록 항목과 확인할 점
Frame
관측 x
필터 x
명령
미검출 처리

확인할 점

  • 이동평균이 반응 지연을 만든다는 점도 확인했는가?
  • None을 숫자 0으로 평균에 넣지 않았는가?

3. 검출부터 명령까지 연결하기

시작 조건

앞 단원의 Mask 중심 계산을 command에 연결합니다. 기본 활동은 저장·생성 영상만 사용합니다.

진행 방법

  1. 중심·면적·검출 시각을 반환하는 함수와 명령 함수를 나누세요.
  2. 빈 Mask·유효한 영역·검출 후 0.2초보다 오래 지난 Frame을 차례로 시험하세요. 현재 시각과 Frame 검출 시각의 차이로 오래된 Frame을 판정하고, 이때 명령을 0으로 처리하세요.
  3. 실제 장치에서 추가로 필요한 좌표 변환·속도 제한·정지 조건을 적으세요.

남길 결과

기록 항목과 확인할 점
입력 Frame
검출 유효성
명령
정지 이유

확인할 점

  • 검출이 실패해도 이전 속도 명령이 남지 않는가?
  • 실제 비행 없이 오류 경로를 시험할 수 있는가?

공식 예제·데이터