영상 검출에서 안전한 제어 명령으로
영상의 좌우·상하 오차를 이동 명령으로 바꿀 때 부호 오류와 흔들림이 어떻게 생기는지 모의 입력에서 확인합니다.
실습 전에
01 물체가 화면 오른쪽에 있으면 어느 방향으로 움직여야 할까요?
설명
영상 좌표와 기체 좌표의 방향을 먼저 정해야 명령의 부호를 판단할 수 있습니다.
02 물체를 잠깐 못 찾으면 이전 명령을 계속 써도 될까요?
설명
미검출·오래된 Frame을 구분하고 안전한 정지 명령으로 전환합니다.
실행 조건
기본 활동은 NumPy·Matplotlib을 사용합니다. 앞 단원과 연결할 때 OpenCV를 사용합니다.
1. 검출 위치를 오차로 바꾸기
시작 조건
160×120 영상의 중심은 (80,60), 관측 중심은 (110,50)입니다. x는 오른쪽, y는 아래쪽입니다.
진행 방법
- 예제의
command(center)와 같은 부호로 , 을 계산하세요. 중심과 관측점을 찍고 중심에서 관측점으로 향하는 화살표에 두 오차를 표시하세요. - 각 축에서 pixel이면 명령 0, 나머지는 로 계산한 뒤 범위를 로 제한하세요. 의 두 축 명령을 계산하고 함수 출력과 나란히 기록하세요.
남길 결과
기록 항목과 확인할 점
- 관측 중심
-
- 오차 x·y
-
- 유효 여부
-
- 명령
-
확인할 점
- 영상 y축 방향을 세계 좌표의 위쪽과 혼동하지 않았는가?
- Pixel Error·Normalized Command를 실제 기체의 Velocity [m/s]와 구분했는가?
2. 흔들림과 미검출 처리
시작 조건
x 관측은 [80,82,79,110,None,108], 입니다. None은 물체를 찾지 못한 Frame입니다.
진행 방법
- 각 유효 관측에
command((x,60))를 적용한 명령과, 최근 유효 관측 최대 3개의 x 평균에 적용한 명령을 각각 구하세요. 시작 시 표본이 3개보다 적으면 모인 표본만 평균냅니다. None에서 명령을 0으로 만들고 평균용 기록도 비우세요. 뒤의 108은 새 기록의 첫 표본으로 처리하세요.- Frame 순서·원 관측·평균 x·두 명령을 표로 남기고 같은 Frame 축에 표시하세요. 110으로 바뀐 Frame의 두 명령과 미검출 직후 명령을 짚어 차이를 설명하세요.
남길 결과
기록 항목과 확인할 점
- Frame
-
- 관측 x
-
- 필터 x
-
- 명령
-
- 미검출 처리
-
확인할 점
- 이동평균이 반응 지연을 만든다는 점도 확인했는가?
- None을 숫자 0으로 평균에 넣지 않았는가?
3. 검출부터 명령까지 연결하기
시작 조건
앞 단원의 Mask 중심 계산을 command에 연결합니다. 기본 활동은 저장·생성 영상만 사용합니다.
진행 방법
- 중심·면적·검출 시각을 반환하는 함수와 명령 함수를 나누세요.
- 빈 Mask·유효한 영역·검출 후 0.2초보다 오래 지난 Frame을 차례로 시험하세요. 현재 시각과 Frame 검출 시각의 차이로 오래된 Frame을 판정하고, 이때 명령을 0으로 처리하세요.
- 실제 장치에서 추가로 필요한 좌표 변환·속도 제한·정지 조건을 적으세요.
남길 결과
- 입력→검출→검증→명령 흐름도와 오류 사례 표.
기록 항목과 확인할 점
- 입력 Frame
-
- 검출 유효성
-
- 명령
-
- 정지 이유
-
확인할 점
- 검출이 실패해도 이전 속도 명령이 남지 않는가?
- 실제 비행 없이 오류 경로를 시험할 수 있는가?
공식 예제·데이터