심화 B — 컴퓨터 비전으로 똑똑한 자율주행
대상 단계 6(카메라·OpenCV)·9(객체감지) 이후 · 도구 advanced_lessons/vision_*, measure_fps
목표 카메라 영상에서 색·물체·마커를 인식해 자동차를 제어하고, 규칙기반과 학습기반(모방학습)을 비교한다.
0. 공통 준비
cd "d:\data\study\AI\Fab-Lab\CAR\Program\auto_car\advanced_lessons"
python vision_traffic_light.py --no-car # 먼저 하드웨어 없이 미리보기
자동차 사용 시 STA 펌웨어 + 노트북 핫스팟 접속 + --ip 지정. 첫 실행은 바퀴를 띄우고!
1차시 — 색으로 판단하기 (신호등 + 콘 따라가기)
1-1. 신호등 색 인식 (vision_traffic_light.py)
- 빨강/초록 카드를 카메라 앞에 → ROI 안 색 비율로 정지/출발
- 핵심: HSV 색공간에서 색 분할(
cv2.inRange). 왜 RGB가 아니라 HSV인가? (조명 변화에 강함)
- 실습: 빨강 카드 → 정지, 초록 카드 → 출발. 색 범위(
RED*_*, GREEN_*)를 조정해 교실 조명에 맞추기
1-2. 색 콘 따라가기 (vision_cone_follow.py)
- 주황 물체의 덩어리 중심을 찾아, 화면 중앙에서 벗어난 만큼 조향(비례 제어)
- 물체가 커지면(가까우면) 감속
- 도전:
STEER_GAIN을 키우면? (과민→지그재그) / 작으면? (둔함)
💡 vision_cone_follow.py의 cone_command()는 순수 함수라, 같은 원리가 차선추종·물체추적에 재사용됩니다.
2차시 — YOLO로 물체 인식 (vision_person_stop.py)
- 사전학습 YOLOv8(
opencv/python/yolov8n.pt)으로 사람·자전거·정지표지판·빨간신호등 감지 → 정지
- 설치:
pip install ultralytics
- 실습: 친구가 트랙 앞을 지나가면 차가 멈추는지. 인형/사진으로도 테스트
- 토론: 신뢰도(
confidence)를 낮추면 더 잘 잡지만 오탐(헛감지)이 는다 — 정밀도 vs 재현율
3차시 — ArUco 마커 내비게이션 (vision_aruco.py)
- 흑백 마커(QR 단순판)로 위치/명령 부여: 마커 따라가기 + 특정 ID는 정지
- 설치:
pip install opencv-contrib-python
- 응용: 마커마다 다른 동작(좌회전/우회전/정지) 부여 → "표지판 기반 주행"
4차시 — 규칙기반 vs 학습기반 비교 (토론·실험)
| 규칙기반 (단계 7~8, vision_*) | 학습기반 (모방학습 모드 3) |
| 만드는 법 | 사람이 색/조건을 직접 코딩 | 운전 시범 데이터로 학습 |
| 새 환경 적응 | 코드 수정 필요 | 데이터 추가 |
| 설명 가능성 | 높음(규칙이 보임) | 낮음(블랙박스) |
| 준비 시간 | 빠름 | 데이터 수집 필요 |
- 실험: 조명/트랙을 바꿔가며 둘 중 어느 쪽이 더 잘 버티는지 측정
- 측정 도구:
measure_fps.py로 두 방식의 처리 속도(FPS)도 비교
부록 — 실시간성 측정 (measure_fps.py)
- 카메라 FPS와 제어 왕복지연(RTT)을 측정. "느린 인식 = 늦은 반응 = 차선 이탈"
- 계산 문제: FPS 10이면 한 프레임 100ms. 1m/s로 달리면 그 사이 10cm 이동 → 왜 위험한가?
ACT 역량 연계
- A: 색 범위·게인을 스스로 튜닝, 실패 원인 분석
- C: 트랙/표지판 코스를 조별로 설계, 규칙 vs 학습 실험 설계
- T: "사람 보면 정지"의 안전·책임, YOLO 오탐이 일으킬 수 있는 사고 토론