1. 입력 이미지 전처리 및 차선 세그멘테이션

    – 원본 이미지에 CLAHE(Contrast Limited Adaptive Histogram Equalization) 적용 및 letterbox 리사이징

    – YOLOPv2 모델을 통해 차선(세그멘테이션) 결과와 기타 정보를 얻음

    – 후처리(이진화, thinning, 형태학적 필터 등)를 거쳐 차선 마스크를 생성

  2. 차선 영역에서 다항식(2차) 피팅

    – 차선 영역 픽셀 좌표(ys, xs)를 추출하여 2차 다항식(형태: x = a·y² + b·y + c)으로 피팅

    – 이때 피팅된 계수를 coeff로 얻습니다.

  3. 칼만 필터를 이용한 계수 스무딩 (LaneKalmanFilter)

    – 매 프레임마다 피팅된 계수가 노이즈를 포함할 수 있으므로, 칼만 필터를 통해 이전 프레임의 추정치와 현재 관측치를 융합하여 보다 안정된(스무딩된) 계수를 산출

  4. BEV(Bird’s-Eye View) 변환

    – 원본 이미지나 마스크를 미리 정의된 원근 변환 파라미터로 BEV(위에서 내려다본 시점) 이미지로 변환

    – 이를 통해 차선의 기하학적 형태가 더 명확하게 보이고, 폴리피팅 및 경로 계산이 용이해짐

  5. 경로(폴리라인) 생성 및 차량 기준 정렬

    – 스무딩된 다항식 계수를 기반으로 이미지 상의 여러 (x, y) 점들을 생성

    – 생성된 점들 중 “가장 아래쪽” 점(차량과 가장 가까운 부분)을 찾아, 원하는 차량 기준 위치(예, 후륜축 중심)를 맞추도록 평행이동(translation) 수행

  6. 좌표 변환: 이미지 좌표 → 차량 좌표

    – BEV 이미지 상의 점들을 차량 좌표계로 변환하여, 전방 거리(X)와 좌우 오프셋(Y)를 계산

    – 여기서는 차량의 후륜축 중심이 기준점(예, (320, 640))으로 고정되어 있다고 가정

  7. Pure Pursuit (순수 추종) 알고리즘을 통한 목표점 선택 및 조향각 계산

    – 변환된 폴리라인 점들 중, 차량으로부터 일정 “전방주시거리(lookahead)” 이상 떨어진 첫 번째 점을 목표점(goal point)으로 선택

    – 선택된 목표점과 차량 사이의 기하학적 관계(각도 및 거리를 고려)를 기반으로 조향각을 계산

    – 계산된 조향각을 ROS 메시지(Float32)로 퍼블리시

  8. 시각화 및 결과 출력

    – BEV 이미지에 폴리라인, 목표점, 조향각 텍스트 등을 오버레이하여 디스플레이

    – 저장 옵션에 따라 비디오 파일로 결과 저장