단계 8 — P 제어와 자율주행 통합

차시 4차시 · 선수 학습 단계 7

이번 단계 목표 차선 오차로부터 조향각을 계산하는 P 제어기를 만들고, 차량이 차선을 스스로 따라가게 한다.

1. 학습 목표

2. 이론

2-1. 제어 문제 정의

오차(error): 화면 중심 - 차선 중심

화면 중심: 160 (320/2)
차선 중심: 200       → error = -40 (차선이 오른쪽에 있음)
                     → 차량을 오른쪽으로 꺾어야 함

2-2. 비례(P) 제어

P 제어 원리

가장 단순한 제어기. 오차가 클수록 더 많이 보정합니다.

조향 보정 = Kp × error
조향각 = 90 + Kp × error
상황errorKp=0.3일 때 조향각
차선 정확히 중앙090 (직진)
차선이 약간 오른쪽-2090 + 0.3×(-20) = 84
차선이 많이 오른쪽-5090 + 0.3×(-50) = 75
차선이 왼쪽+3090 + 0.3×(30) = 99
⚠️ 부호 주의: 본 차량은 카메라 미러링(flip(frame, 1)) 후 좌표를 사용하므로 부호 컨벤션을 코드와 일치시켜야 합니다.

2-3. Kp 튜닝

Kp 0.1 ──→ ◯       ────→ ◯ ────→ ◯ ────→ ◯  (못 따라감, 차선 이탈)
Kp 0.5 ──→ ◯ ─→ ◯  ──→ ◯ ──→ ◯ ──→ ◯  (적절)
Kp 2.0 ──→ ◯╲ ╱◯╲ ╱◯╲ ╱◯╲ ╱◯  (진동)

2-4. 한계와 PID로의 확장 (참고)

P 제어만으로는:

산업용 자율주행은 PID 제어 + Pure Pursuit + MPC 등 더 정교한 방법을 씁니다.

2-5. 본 차량의 하이브리드 제어

python/controller.py는 단순 P보다 한 단계 발전된 형태:

조향 보정 = k_position × 위치오차 + k_angle × 각도오차
조향각 = 90 + 보정 (단, 45~135로 클립)

3. 단순화된 P 제어 코드

def calculate_steering(lane_center_x, frame_center_x, kp=0.3,
                      steering_neutral=90, steering_min=45, steering_max=135):
    if lane_center_x is None:
        return steering_neutral  # 차선 못 찾음 → 직진

    error    = frame_center_x - lane_center_x
    steering = steering_neutral + kp * error

    if steering < steering_min:
        steering = steering_min
    if steering > steering_max:
        steering = steering_max
    return int(steering)

4. 활동

활동 7-A: P 제어 시뮬레이션 ⭐ Easy

손으로 시뮬레이션. 화면 중심 = 160일 때 다음 표를 채우시오.

차선 중심 (cx)errorKp=0.5 보정조향각좌·우 어느 쪽?
1600090직진
100
60
220
260

활동 7-B: 단순 P 제어로 차선 추종 ⭐⭐ Standard

학생용 프로그램 단계8_차선추종.py를 열고 빈칸을 채우시오.

# TODO 1: 차선 중심 검출 (단계 7 코드 재활용)
# TODO 2: error 계산
# TODO 3: 조향각 = 90 + kp * error 계산
# TODO 4: 범위 제한 (45~135)
# TODO 5: UDP로 송신 ({"speed": 80, "steering": ...})

미션 — 직선 트랙: 길이 2m, 흰 테이프 폭 5cm, 간격 50cm → 1회 끝까지 도달하면 성공

시도Kpbase_speed결과 (성공/이탈/멈춤)
10.380
2
3

활동 7-C: 하이브리드 제어로 곡선 도전 ⭐⭐⭐ Challenge

python/main.py를 실행하면 위치+각도 하이브리드 제어가 자동 적용됩니다.

출발 ──직선 1m──→ 우커브 ──직선 50cm──→ 좌커브 ──→ 골인 (S자)

키 조작 (실행 중)

동작
s자율주행 시작/정지
w/xbase_speed ± 10
a/dk_angle ± 0.1
z/vk_position ± 0.1
+/−kp ± 0.05
SPACE긴급 정지
k_positionk_anglebase_speed완주 시간

5. 차선 못 찾을 때의 안전 동작

전략장점단점
직진 유지단순위험
즉시 정지안전자주 멈춤
마지막 조향각 유지부드러움곡선에서 위험
천천히 정지안전+부드러움코드 복잡
본 차량은 차선 못 찾으면 직진(steering=90), 일정 시간 지속되면 정지 전략을 권장합니다.

6. 핵심 개념 정리

개념설명
오차(error)목표값과 실제값의 차이
비례 제어(P)오차에 비례하여 보정
Kp비례 상수 (반응 속도 결정)
진동(oscillation)Kp가 너무 클 때 좌우로 흔들림
PIDP + I(적분) + D(미분), 더 정교한 제어
클리핑출력값을 일정 범위로 제한

7. 자기평가

항목12345
P 제어의 원리를 그림으로 설명할 수 있다
차선 인식 결과로 조향각을 계산할 수 있다
Kp 튜닝을 통해 안정적 주행을 만들었다
직선 트랙을 자율주행으로 완주했다