차선 인식 파이프라인 재구성
BEV 변환, ROI 제한, HLS 마스킹, Canny Edge, HoughLinesP를 조합했습니다. 기울기와 중심 margin으로 좌우 차선을 분리했습니다.
Side Project
RGB 카메라, 2D LiDAR, Depth 카메라를 활용해 트랙 주행과 장애물 회피를 위한 인지·판단·제어 로직을 구현했습니다.
Problem
실험 트랙에는 흰 배경, 지그재그 차선, 넓어지는 도로, 장애물이 함께 존재했습니다. 카메라 기반 차선 인식만으로는 오인식과 제어 진동이 반복되었습니다. 센서별 역할을 분리한 주행 파이프라인이 필요했습니다.
Architecture
RGB 카메라는 차선 중심을 계산합니다. LiDAR는 장애물 접근을 트리거하고, Depth 카메라는 좌·중·우 빈 공간을 판단합니다. 최종 제어는 ROS2의 /cmd_vel 메시지로 통합했습니다.
Implementation
원본 패키지를 단순 실행하는 데서 끝내지 않았습니다. 트랙 환경에서 실제로 실패하던 지점을 기준으로 인식·판단·제어 코드를 수정했습니다.
BEV 변환, ROI 제한, HLS 마스킹, Canny Edge, HoughLinesP를 조합했습니다. 기울기와 중심 margin으로 좌우 차선을 분리했습니다.
차선 중심점과 ROI 기준점의 오차로 조향각을 계산했습니다. 코너 상황에서는 속도를 낮춰 급격한 회전을 완화했습니다.
전방 0.3m 이내 장애물 감지를 회피 모드 트리거로 사용했습니다. 차선 이탈 가능성이 있을 때는 안전 후진 로직을 적용했습니다.
Depth 프레임 하단을 좌·중·우 ROI로 분할했습니다. 픽셀 합을 비교해 장애물이 적은 방향을 선택하도록 개선했습니다.
RGB 카메라 영상을 BEV로 변환했습니다. 필요한 구간만 계산해 차선 후보를 안정적으로 추출했습니다.
중앙 margin과 직선 기울기를 함께 사용해 왼쪽·오른쪽 차선을 구분했습니다.
한쪽 차선이 사라지는 순간을 보완했습니다. 이전 프레임의 이동평균으로 주행 판단을 안정화했습니다.
장애물 접근 시에만 Depth 카메라 판단을 활성화했습니다. 좌·중·우 영역을 비교해 빈 공간으로 이동하도록 설계했습니다.
Debugging
실험 중 발생한 문제는 센서값 자체보다 판단 조건의 문제에 가까웠습니다. 프레임별 디버깅 화면과 실제 주행 영상을 함께 보며 조건을 좁혔습니다.
Results
차선 기반 주행 흐름을 통합했습니다. 좌측·중앙·우측 중 빈 공간이 달라지는 회피 상황도 각각 테스트했습니다.
차선 인식과 조향 제어를 통합해 트랙을 따라 주행하는 결과 영상입니다.
LiDAR 트리거와 Depth ROI 판단을 결합한 회피 동작입니다.
왼쪽 영역이 비어 있는 상황에서 회피 방향을 선택합니다.
좌우 장애물 사이의 중앙 빈 공간을 판단합니다.
오른쪽 영역이 비어 있는 상황에서 회피 방향을 선택합니다.
Retrospective
예제 코드를 실행하는 데서 멈추지 않았습니다. 실제 주행 실패를 분석하고 센서 처리, 판단 기준, 제어값을 반복적으로 개선했습니다.
카메라, LiDAR, Depth 데이터를 각각의 강점에 맞게 역할 분리했습니다.
오인식, 진동, 무한 루프처럼 실제 하드웨어에서 나타나는 문제를 단계적으로 디버깅했습니다.
노드, 토픽, launch, 파라미터를 연결해 하나의 주행 시스템으로 구성했습니다.
Comments