자율주행 자동차 학생 실습 가이드 (모방학습)

이 가이드는 ESP32-CAM 자동차에게 직접 시연으로 자율주행을 가르치는 7가지 학습 방식을 6차시에 걸쳐 체험할 수 있게 구성되어 있습니다.

준비물

첫 실행 체크리스트

cd "d:\data\study\AI\Fab-Lab\CAR\Program\auto_car\imitation_learning_car"
python main_learning.py --no-car

--no-car로 먼저 실행해 메뉴/GUI가 동작하는지 확인. 자동차 명령은 콘솔에 출력됩니다.

python main_learning.py --ip 192.168.137.74

1차시 (복습) — 기존 P 제어 자율주행

../학생용_프로그램/단계8_차선추종.py단계9_미니자율주행.py를 먼저 돌려보고 "프로그래머가 직접 짠" 자율주행이 어떻게 동작하는지 관찰합니다.

→ "차선이 안 보이거나 새 환경에선 어떡하지?" → 사람의 운전을 보여주고 따라하게 하면 됨! (모방학습으로 진입)

2차시 — 모드 2: Manual Teaching (가장 쉬움)

학습 목표: "프로그램 = 시간 순서대로 명령 보내기"임을 체감, 자동차의 (speed, steering) 두 채널 이해

실습

  1. python main_learning.py 2 --ip 192.168.137.74
  2. T 키로 LIVE 모드 ON
  3. R 키 → 녹화 시작
  4. W/S로 속도, A/D로 조향 조정하며 트랙 한 바퀴 운전
  5. SPACE → 정지
  6. R → 녹화 종료/저장
  7. 자동차를 시작 위치로 되돌리고 P → 동일 시퀀스 재생

도전 과제


보충 차시 — 모드 5: Joystick Teaching (아날로그)

학습 목표: 디지털(키보드) vs 아날로그(조이스틱) 입력의 차이 이해, 부드러운 주행 데이터를 모드 3·4 학습용으로 수집

준비

실습

  1. python main_learning.py 5 --ip 192.168.137.74
  2. Y → LIVE 모드 ON
  3. 왼쪽 스틱: 좌우=조향, 위로=가속, 중립=정지
  4. R → 녹화, 트랙 한 바퀴 부드럽게 운전, R → 종료, P → 재생
  5. C → ML capture ON 후 한두 바퀴 → 모드 3 dataset.json에 자동 저장
  6. 모드 3(python main_learning.py 3)에서 M 학습 → G 자율주행
⚠️ 모드 5의 LIVE 토글은 Y, 긴급정지는 SPACE. 컨트롤러 없으면 W/A/S/D로 대체.

보충 차시 — 모드 6: Phone Teaching (스마트폰)

학습 목표: "폰 → 노트북(허브) → 자동차" 구조 이해, 스마트폰 기울기/버튼으로 운전·녹화하고 ML 데이터 수집

실습

  1. python main_learning.py 6 --ip 192.168.137.74
  2. 노트북 화면에 뜬 주소(예: http://192.168.137.1:8080)를 폰 브라우저에 입력
  3. 폰 페이지가 ● 연결됨이 되면 노트북에서 Y → LIVE ON
  4. 폰 버튼(▲◀▶)으로 운전, R 녹화 → P 재생
  5. C → ML capture ON 후 한두 바퀴 → 모드 3 dataset 저장 → 모드 3 M 학습
⚠️ 기울기 조향은 보안 정책상 HTTPS 우회 필요. 버튼 조향은 바로 됨.
Windows 방화벽 팝업이 뜨면 "허용". 폰 신호 끊기면 0.8초 후 자동 정지.

3차시 — 모드 1: Hand Demonstration

학습 목표: 사람 동작을 카메라로 캡처해 로봇 명령으로 변환하는 좌표 매핑 개념

실습

  1. python main_learning.py 1 --ip 192.168.137.74 --webcam 0
  2. 노트북 카메라 화면에 손이 잘 보이도록 자리잡기
  3. T 키로 LIVE 모드 ON
  4. 손의 위치로 자동차 제어: 위=빠름, 아래=멈춤, 좌=좌회전, 우=우회전, 핀치=브레이크
  5. R → 카운트다운 후 녹화, 트랙 한 바퀴 시연
  6. S → 종료/저장
  7. P → 손 시연 그대로 자동차에서 재생

4차시 — 모드 4: Position Teaching (KNN 보간)

학습 목표: 카메라 픽셀 → 명령 매핑이 머신러닝 문제임을 이해, KNN(가장 가까운 사례 찾기) 직관

실습

  1. python main_learning.py 4 --ip 192.168.137.74
  2. Y 키로 LIVE 모드 ON (⚠️ 모드 3·4에서는 T가 "티칭 저장")
  3. 트랙의 다양한 위치/상태마다: 자동차 배치 → W/A/S/D로 명령 설정 → T 키 → 저장
  4. 8~12개 정도 모으기 (직선, 좌커브, 우커브, 차선 사라진 곳 등 다양하게)
  5. G 키 → 자율주행 모드 ON

5차시 — 모드 3: ML Imitation (Ridge 회귀)

학습 목표: 데이터로부터 함수를 학습 = 머신러닝의 본질 체험, Ridge 회귀 17줄 코드 직접 읽기

실습

  1. 방식 4와 같은 방법으로 T최소 10개 이상 데이터 모으기 (dataset.json)
  2. M 키 → 모델 학습 (콘솔에 train RMSE 출력)
  3. G 키 → 자율주행 모드 ON

비교 실험 — 5차시 핵심

테스트 상황모드 4 (KNN) 성공?모드 3 (회귀) 성공?
데이터 수집 트랙 그대로
시작 위치 살짝 변경
차선이 흐릿한 구간
완전히 새로운 코너
💡 회귀모델은 매끄러운 일반화에 유리, KNN은 학습 영역 내부에서는 정확하지만 외삽이 약합니다.

6차시 — 비교 분석 + 발표

각 모드의 장단점을 표로 정리하고, "어떤 상황에 어떤 모드를 쓰면 좋을지" 조별로 발표.

평가 과제

  1. 모드 2로 트랙 한 바퀴 시퀀스 1개 녹화 → .json 제출 + 시연 영상
  2. 모드 4로 8개 티칭 포인트 수집 → 자율주행 1바퀴 성공률 측정
  3. 모드 3 학습 RMSE와 자율주행 성공률 표로 정리
  4. 모드 3 vs 4 비교 실험 결과 + 200자 해설
  5. (심화) feature_extractor.py를 수정해 자기만의 특징 추출 함수 작성

자주 묻는 질문

증상점검
UDP 명령이 안 가요config.json IP 확인, 또는 --ip 옵션 명시. 노트북 핫스팟 Auto_Car_01 송출 중인지 확인
카메라 영상이 안 나와요자동차 IP로 브라우저 접속 (http://IP/stream) — 영상 보이면 펌웨어 OK
방식 1 손 인식이 안 돼요pip install mediapipe 확인. --webcam 1 등으로 카메라 인덱스 변경
방식 3 모델 학습이 이상해요샘플 10개 미만이면 학습 안 됨. 데이터가 한쪽으로 치우치면 일반화 X
자동차가 멋대로 달려요!SPACE 즉시 누르기. LIVE 모드를 OFF하면 콘솔 출력만, 실제 자동차 X