Wooseok Song profile photo Projects

Side Project

LIMO 자율주행 프로젝트

RGB 카메라, 2D LiDAR, Depth 카메라를 활용해 트랙 주행과 장애물 회피를 위한 인지·판단·제어 로직을 구현했습니다.

기간 2025.07 - 2025.08
역할 인지·판단·제어 로직 구현 및 실험 튜닝
목표 차선 기반 주행과 장애물 회피를 하나의 ROS2 주행 시스템으로 통합
결과 트랙 주행과 좌·중·우 빈 공간 시나리오별 회피 동작 확인

문제 정의

실험 트랙에는 흰 배경, 지그재그 차선, 넓어지는 도로, 장애물이 함께 존재했습니다. 카메라 기반 차선 인식만으로는 오인식과 제어 진동이 반복되었습니다. 센서별 역할을 분리한 주행 파이프라인이 필요했습니다.

  • 차선 오인식 흰색 트랙 배경과 출발선, 장애물 배치 구역이 차선처럼 검출되었습니다.
  • 코너링 불안정 조향각 한계와 PID 튜닝 문제로 직진 구간 진동과 코너 진입 실패가 발생했습니다.
  • 장애물 회피 한계 LiDAR 단독 판단은 좌우 공간을 세밀하게 구분하기 어려워 무한 전진·후진 루프가 생겼습니다.

시스템 구조

RGB 카메라는 차선 중심을 계산합니다. LiDAR는 장애물 접근을 트리거하고, Depth 카메라는 좌·중·우 빈 공간을 판단합니다. 최종 제어는 ROS2의 /cmd_vel 메시지로 통합했습니다.

01 RGB Camera 트랙 영상을 입력받아 차선 후보 영역을 확보
02 BEV · ROI 연산 영역을 제한하고 차선 검출에 유리한 시점으로 변환
03 HLS · Canny · Hough 흰색·노란색 차선을 필터링하고 직선 후보를 추출
04 Lane Decision 기울기와 margin 기준으로 좌우 차선을 분류
05 PID Control 차선 중심 오차를 조향각과 속도 제어값으로 변환

구현 범위

원본 패키지를 단순 실행하는 데서 끝내지 않았습니다. 트랙 환경에서 실제로 실패하던 지점을 기준으로 인식·판단·제어 코드를 수정했습니다.

차선 인식 파이프라인 재구성

BEV 변환, ROI 제한, HLS 마스킹, Canny Edge, HoughLinesP를 조합했습니다. 기울기와 중심 margin으로 좌우 차선을 분리했습니다.

PID 기반 조향·속도 제어

차선 중심점과 ROI 기준점의 오차로 조향각을 계산했습니다. 코너 상황에서는 속도를 낮춰 급격한 회전을 완화했습니다.

LiDAR 트리거와 안전 후진

전방 0.3m 이내 장애물 감지를 회피 모드 트리거로 사용했습니다. 차선 이탈 가능성이 있을 때는 안전 후진 로직을 적용했습니다.

Depth 카메라 기반 빈 공간 판단

Depth 프레임 하단을 좌·중·우 ROI로 분할했습니다. 픽셀 합을 비교해 장애물이 적은 방향을 선택하도록 개선했습니다.

BEV와 ROI를 이용한 차선 인식 설명

ROI 기반 차선 인식

RGB 카메라 영상을 BEV로 변환했습니다. 필요한 구간만 계산해 차선 후보를 안정적으로 추출했습니다.

중앙 margin을 이용해 좌우 차선을 구분하는 도식

좌우 차선 분리

중앙 margin과 직선 기울기를 함께 사용해 왼쪽·오른쪽 차선을 구분했습니다.

이동평균을 이용한 차선 검출 안정화 도식

검출 실패 보완

한쪽 차선이 사라지는 순간을 보완했습니다. 이전 프레임의 이동평균으로 주행 판단을 안정화했습니다.

Depth 카메라 ROI를 좌측, 중간, 우측으로 나눈 설명 이미지

Depth ROI 회피 판단

장애물 접근 시에만 Depth 카메라 판단을 활성화했습니다. 좌·중·우 영역을 비교해 빈 공간으로 이동하도록 설계했습니다.

디버깅 및 개선

실험 중 발생한 문제는 센서값 자체보다 판단 조건의 문제에 가까웠습니다. 프레임별 디버깅 화면과 실제 주행 영상을 함께 보며 조건을 좁혔습니다.

  • 흰 배경 오인식 HLS 범위를 다시 조정하고 ROI를 제한해 차선 이외의 흰색 영역 영향을 줄였습니다.
  • 지그재그 차선 다중 검출 ROI 높이와 margin을 조정해 한 번에 한 패턴만 판단하도록 만들었습니다.
  • LiDAR 단독 회피의 무한 루프 LiDAR는 회피 트리거로만 사용했습니다. 방향 선택은 Depth ROI 비교로 분리했습니다.

검증 결과

차선 기반 주행 흐름을 통합했습니다. 좌측·중앙·우측 중 빈 공간이 달라지는 회피 상황도 각각 테스트했습니다.

전체 트랙 주행

차선 인식과 조향 제어를 통합해 트랙을 따라 주행하는 결과 영상입니다.

장애물 회피 동작

LiDAR 트리거와 Depth ROI 판단을 결합한 회피 동작입니다.

좌측 공간 회피

왼쪽 영역이 비어 있는 상황에서 회피 방향을 선택합니다.

중앙 공간 통과

좌우 장애물 사이의 중앙 빈 공간을 판단합니다.

우측 공간 회피

오른쪽 영역이 비어 있는 상황에서 회피 방향을 선택합니다.

핵심 역량

예제 코드를 실행하는 데서 멈추지 않았습니다. 실제 주행 실패를 분석하고 센서 처리, 판단 기준, 제어값을 반복적으로 개선했습니다.

센서 데이터 해석

카메라, LiDAR, Depth 데이터를 각각의 강점에 맞게 역할 분리했습니다.

실험 기반 문제 해결

오인식, 진동, 무한 루프처럼 실제 하드웨어에서 나타나는 문제를 단계적으로 디버깅했습니다.

ROS2 통합 구현

노드, 토픽, launch, 파라미터를 연결해 하나의 주행 시스템으로 구성했습니다.

Comments