차선인식 프로젝트

조환영·2023년 5월 27일
0

Project

목록 보기
1/3
post-thumbnail

▷ 프로젝트 목표

  • Xycar단안 카메라(monocular camera) 센서만을 사용해 정해진 트랙을 정상적으로, 빠른 시간내에 완주하는 것을 목표로 한다.

    • Xycar: 실차의 1/10 scale로 제작된 RC Car
      • NVIDIA JetPAck 4.6.2 / BLDC모터 / 2D-LiDAR / Ultrasonic sensor / IMU / monocular Camera / stereo Camera
  • C++ / ROS / OpenCV / Control method (PID, Stenley etc) / Filtering (Moving avereage, Low pass Filter etc)

▷ 프로젝트 기간

  • [7일] 23.05.18 ~ 23.05.26

▷ 프로젝트를 통해 얻은 SkillSet

  • 객체지향 프로그래밍 구조 설계

  • CMake를 이용한 프로젝트 빌드

  • OpenCV를 이용한 차선인식 기법

  • Git을 이용한 프로젝트 코드 관리

  • PID Control Tuning

  • 이외의 여러 제어기법 (pure pursuit, stanley ...)활용


▷ 경진대회 규정

  • 트랙 도면 (실내 트랙)

  • 규정

  • 최대한 빠른 랩타임을 기록하되, 경로 이탈이 없어야 한다.

▷ 프로젝트 진행

  • 초기 목표
    : Base Code가 없는 상황에서 C++ Class 구조설계부터 진행하려고 시도했다. 아래는 ROS의 노드 통신에 대한 flowchart이다.

    • 단안 카메라로 부터 받아온 이미지를 시작으로
      "grayscale변환 -> 노이즈제거(Gaussian) -> 에지검출(Canny) -> 직선검출(Hough)" 을 통해 차선을 찾는다.
    • 좌-우 차선을 구분하여 ROI 내에서의 차선 중심과 카메라 중심의 차이를 오차로 제어기에서 조향각을 산출하여 motor node에 자동차 속도와 조향각 정보가 담긴 토픽을 출간한다.
    • "제어"에 집중하기 위해 여러 제어 기법을 적용시켜 볼 수 있도록 Control node를 분리했다.
  • 하지만, 결국...

    • 처음 접해보는 C++ 코드 구조 설계 및 CMake 빌드 설계에서 많은 어려움을 겪어, 프로젝트 중간에 C++ 프로그래밍 틀이 잡혀있는 Base Code를 제공받았다.

    • 제공받은 코드를 분석하고 공부하며 객체지향 프로그래밍의 구조 설계를 공부했다.

    • 공부하고 적용시켜 튜닝하는데 시간이 다 가버려서 초기에 집중하고 싶었던 "여러 제어기법의 적용 경험" 목표를 달성하지 못했다.

▷ 프로젝트 결과

  • 완주 성공 / 쓰러트린 블록(4개)

  • 주행 환경에 영향을 많이 받는 것 같다. 시험 주행 마다 주행 데이터의 편차가 심했다. 메인 및 모터 배터리의 상태에 따라서도 코너링 성능의 편차가 컸다.
    따라서 프로젝트 후반에는 최적의 주행 환경과 그 때의 파라미터들을 튜닝하는 것에 집중했다.

▷ 프로젝트 후기

  • "카메라" 만을 이용하여 "차선인식" 과제를 수행하는 알고리즘을 공부할 수 있었다.

  • 영상처리에 대한 기본적인 개념을 적용시킬 수 있었고, 영상으로 부터 뽑아낸 데이터를 제어에 적용시키는 큰 플로우를 이해하고 목적에 맞게 조작하는 경험을 할 수 있었다.

  • 익숙하지 않던 C++, Git, Linux, ROS 등 개발에 필요한 도구들에 대한 거부감을 줄일 수 있는 경험이었다.

  • Xycar 시스템에 대한 이해가 높아져 추후 진행될 프로젝트의 목적에 더 집중할 수 있는 준비가 된 것 같다.

  • 바로 다음으로 7일간 진행되는 "장애물 회피 프로젝트"에서는 정말 "제어"에 중점을 둔 연구를 진행하도록 노력하고 싶다.

profile
자율주행 TIL(Today I Learned) 기록

0개의 댓글