입력 이미지 전처리 및 차선 세그멘테이션
– 원본 이미지에 CLAHE(Contrast Limited Adaptive Histogram Equalization) 적용 및 letterbox 리사이징
– YOLOPv2 모델을 통해 차선(세그멘테이션) 결과와 기타 정보를 얻음
– 후처리(이진화, thinning, 형태학적 필터 등)를 거쳐 차선 마스크를 생성
차선 영역에서 다항식(2차) 피팅
– 차선 영역 픽셀 좌표(ys, xs)를 추출하여 2차 다항식(형태: x = a·y² + b·y + c)으로 피팅
– 이때 피팅된 계수를 coeff
로 얻습니다.
칼만 필터를 이용한 계수 스무딩 (LaneKalmanFilter)
– 매 프레임마다 피팅된 계수가 노이즈를 포함할 수 있으므로, 칼만 필터를 통해 이전 프레임의 추정치와 현재 관측치를 융합하여 보다 안정된(스무딩된) 계수를 산출
BEV(Bird’s-Eye View) 변환
– 원본 이미지나 마스크를 미리 정의된 원근 변환 파라미터로 BEV(위에서 내려다본 시점) 이미지로 변환
– 이를 통해 차선의 기하학적 형태가 더 명확하게 보이고, 폴리피팅 및 경로 계산이 용이해짐
경로(폴리라인) 생성 및 차량 기준 정렬
– 스무딩된 다항식 계수를 기반으로 이미지 상의 여러 (x, y) 점들을 생성
– 생성된 점들 중 “가장 아래쪽” 점(차량과 가장 가까운 부분)을 찾아, 원하는 차량 기준 위치(예, 후륜축 중심)를 맞추도록 평행이동(translation) 수행
좌표 변환: 이미지 좌표 → 차량 좌표
– BEV 이미지 상의 점들을 차량 좌표계로 변환하여, 전방 거리(X)와 좌우 오프셋(Y)를 계산
– 여기서는 차량의 후륜축 중심이 기준점(예, (320, 640))으로 고정되어 있다고 가정
Pure Pursuit (순수 추종) 알고리즘을 통한 목표점 선택 및 조향각 계산
– 변환된 폴리라인 점들 중, 차량으로부터 일정 “전방주시거리(lookahead)” 이상 떨어진 첫 번째 점을 목표점(goal point)으로 선택
– 선택된 목표점과 차량 사이의 기하학적 관계(각도 및 거리를 고려)를 기반으로 조향각을 계산
– 계산된 조향각을 ROS 메시지(Float32)로 퍼블리시
시각화 및 결과 출력
– BEV 이미지에 폴리라인, 목표점, 조향각 텍스트 등을 오버레이하여 디스플레이
– 저장 옵션에 따라 비디오 파일로 결과 저장