ESP32-CAM 자율주행 자동차 — 사용 설명서

main.py · 차선을 인식해 스스로 달리는 자율주행 프로그램

영상 수신 → 차선 인식 → 제어 계산 → ESP32로 명령 전송 순서로 동작합니다.

목차
  1. 준비물과 사전 점검
  2. 실행 방법
  3. 화면 구성
  4. 두 가지 주행 모드
  5. 전체 조작키
  6. 제어 게인과 튜닝 감각
  7. 조향 중립 캘리브레이션
  8. ROI 조정
  9. 차선 색(HSV) 튜닝
  10. 문제 해결
  11. 현재 기본 설정값

1. 준비물과 사전 점검

2. 실행 방법

방법 A — 더블클릭 권장

자율주행_실행.bat 파일을 더블클릭합니다. 검은 콘솔 창이 열립니다.

방법 B — 명령어

python opencv/python/main.py

실행 후 IP 입력

3. 화면 구성

영상 창은 위쪽에 카메라 영상(차선 인식 표시), 아래쪽에 정보 패널 3칸으로 되어 있습니다.

화면 글자는 OpenCV 제약으로 영어로 표시됩니다. (콘솔 출력은 한글)

4. 두 가지 주행 모드

모드진입설명
자동 (AUTO)s 로 시작/정지차선을 인식해 스스로 조향·주행. 평소 사용하는 모드.
수동 (MANUAL)m 으로 전환키보드로 직접 운전. 조향 중립 맞추기·테스트에 사용.

5. 전체 조작키

공통

기능
s자동주행 시작 / 정지
m수동 ↔ 자동 모드 전환
Space긴급 정지
h도움말(콘솔 출력)
q프로그램 종료
p키 코드 디버그 모드(방향키 코드 확인)

주행 제어 (자동)

기능
w / x기본 속도 증가 / 감소
+ / -Kp 증가 / 감소
a / dk_angle 증가 / 감소 (커브 대응)
z / vk_position 증가 / 감소 (좌우 위치 복귀)
e / r조향 중립 트림 ← / → (캘리브레이션, 자동 저장)

수동 운전 (m 으로 진입 후)

기능
i / k (또는 / )속도 증가 / 감소
j / l (또는 / )좌회전 / 우회전
n조향 중립으로 리셋

영상·차선 인식

기능
1 / 2 / 3차선 색 선택 (1=흰색, 2=검정, 3=주황)
tHSV 튜닝 모드 켜기/끄기 (끄면 자동 저장)
cHSV 설정 저장(튜닝 모드일 때)
[ / ]검출(초록) ROI를 위로 확장 / 축소
, / .흰색 밝기 최소값 낮춤 / 높임
; / '흰색 채도 최대값 높임 / 낮춤
f / g프레임 스킵 증가 / 감소 (지연 줄이기)
y / uYOLO 실행 주기 증가 / 감소 (단계 9)

6. 제어 게인 이해 — k_position 과 k_angle

조향은 다음 식으로 계산됩니다.

조향 보정 = k_position × 위치오차 + k_angle × 각도오차
조향각   = 중립(steering_neutral) + 보정

튜닝 감각

7. 조향 중립(직진) 캘리브레이션

앞바퀴가 정지 상태에서 똑바로 직진하지 않으면 중립값을 맞춰야 합니다.

  1. m 으로 수동 모드에 들어갑니다.
  2. e(왼쪽) / r(오른쪽) 키로 앞바퀴가 정확히 직진이 되는 지점을 찾습니다.
  3. 누를 때마다 config.json 에 자동 저장되어 다음 실행부터 그대로 적용됩니다.

화면 왼쪽 패널의 Neutral: NN 으로 현재 중립값을 확인할 수 있습니다.

8. ROI(인식 영역) 조정

9. 차선 색 선택과 HSV 튜닝

차선 색 선택 (흰색 / 검정 / 주황)

도로 선 색에 맞춰 1(흰색) · 2(검정) · 3(주황) 키로 인식 색을 바꿉니다. 선택값은 config.json에 자동 저장되어 다음 실행에도 유지됩니다. 화면 가운데 패널의 Lane: WHITE/BLACK/ORANGE 로 현재 색을 확인할 수 있습니다.

흰색 HSV 미세 튜닝

조명이나 차선 색에 따라 인식이 잘 안 되면 색 범위를 조정합니다.

  1. t 를 눌러 튜닝 모드를 켭니다. 슬라이더 창이 뜹니다.
  2. White Brightness Min(흰색 밝기 최소), White Saturation Max(흰색 채도 최대), Yellow Hue/Brightness 를 조정합니다.
  3. 다시 t 를 누르면 저장하며 종료, c 는 저장만 합니다.

권장값 — White Brightness Min 200~240, White Saturation Max 30~80, Yellow Hue 15~35.

10. 문제 해결

증상원인 / 해결
영상 창이 안 뜨고 GUI: NONE / function is not implementedheadless OpenCV 문제. pip uninstall -y opencv-python-headlesspip install opencv-python.
시작하자마자 No module named 'ultralytics' 로 종료보통은 자동 비활성화되지만, 단계 9를 쓰려면 pip install ultralytics.
영상 스트림 연결 실패 / 창이 안 뜸ESP32 전원·와이파이 확인, IP 끝자리 재확인, 같은 네트워크인지 확인.
한글이 콘솔에서 깨짐bat은 chcp 65001 적용됨. 직접 실행 시 콘솔을 UTF-8로 두거나 bat 사용.
수동 조향이 반대로 돈다j/l 은 하드웨어에 맞춰 이미 조정됨. 그래도 반대면 서보 배선 확인.
자동 주행이 차선 반대로 꺾인다수동과 별개 원인(제어 부호/서보 배선). 담당자에게 문의.
화면이 끊기고 지연이 크다f 로 프레임 스킵을 늘리거나, u 로 YOLO 주기를 늘림.

11. 현재 기본 설정값 (config/config.json)

항목설명
base_speed220기본 속도 (w/x)
kp1.4비례 상수
k_position1.0위치 복귀 게인 (z/v)
k_angle2.5커브 대응 게인 (a/d)
steering 범위30 ~ 150조향 최소~최대
steering_neutral90직진 중립 (e/r 로 조정)
roi_far_y0.30ROI 위 경계(작을수록 위로 큼)
roi_near_y0.90ROI 아래/근거리 경계
roi_x_ratio0.8ROI 가로 비율(중앙 기준)
lane_colorwhite차선 색 (1/2/3 로 선택, white/black/orange)