README.md 7.11 KB

자율 주행차의 영상 기반 차간거리 유지 개발

Table of Contents


프로젝트 소개


YOLO-v5 기반으로 단안 카메라의 영상을 활용해 차간 거리를 일정하게 유지하며 주행하는 Adaptive Cruise Control 기능을 제공한다.


주요 기능

  1. 객체 인식

    • 복도에서의 차량 카트 이미지를 촬영하여 커스텀 데이터셋을 제작
    • YOLO-v5 모델 중 가장 초당 프레임 수 가 높은 YOLO-v5s에 커스텀 데이터셋을 학습
    • 라즈베리파이에 부착된 웹캠을 통해 실시간으로 전방 차량 인식
  2. 거리 측정

    • 객체 인식 시 나타나는 Bounding box의 좌표값을 추출하여 대상과의 거리가 1m 일 때 Bounding box의 높이와 너비값을 측정
    • 이후 인식된 객체의 Bounding box 높이와 너비값과 1m 일 때의 Bounding box 높이와 너비값의 비례식을 통해 거리를 측정
  3. 거리 유지

    • 측정된 거리를 기반으로 동작을 나누어 시리얼 통신을 통해 동작 신호를 cart를 조작하는 STM보드에 전달
    • STM보드에서 전달받은 신호를 기반으로 PWM 제어를 통해 차간 거리가 유지되도록 속도 조절


시스템 구조

거리유지 시스템 구조

image


겍체 인식 및 거리측정 시스템 구조

image


거리측정 알고리즘

image

  • 카메라의 해상도에 따라 1m에서 기준이 되는 Bounding box의 width와 height의 크기가 달라진다


디렉토리 구조

HEN_Project2
├── dataset
│   ├── ver_1
│   ├── ver_2
│   └── ver_3
│
├── docs
│   ├── 기초보고서
│   ├── 면담보고서
│   ├── 중간보고서
│   └── 최종보고서
│
└── src
    ├── cart
    │   ├── main_arm.c
    │   └── main_cart.c
    │
    ├── weights
    │   ├── cart_model_v1.pt
    │   ├── cart_model_v2.pt
    │   ├── cart_model_v3.pt
    │   ├── cart_model_v4.pt
    │   └── cart_model_v5.pt
    │
    └── detect.py


결과

실시간 객체 인식 및 거리측정

  • 학습된 가중치 모델을 바탕으로 단안 카메라를 이용하여 전방 차량 키트를 인식하였다.

  • 인식된 차량 키트에 대한 Bounding box에서 왼쪽부터 클래스명, 예측 정확도, 단안 카메라 기준 예측 거리(cm) 를 나타낸다.

  • 인식 결과, 이미지 크기 128*128 기준 평균적으로 초당 약 3 프레임의 속도로 동작하였으며, 최대 5m까지 높은 정확도로 인식됨을 확인할 수 있었다.

  • 거리 예측 오차율 측정 결과

실제 거리 측정 최소 거리 측정 최대 거리 최대 오차율
0.5m 0.47m 0.53m 6%
1m 0.96m 1.02m 3%
2m 1.98m 2.02m 1%
3m 2.85m 2.94m 5%
5m 4.65m 5.05m 7%

거리유지

동작 설정

  1. 전방 차량과의 거리가 70cm보다 가까워진 경우 차량 정지
  2. 전방 차량과의 거리가 70cm ~ 120cm인 경우 큰 폭으로 속도 감소
  3. 전방 차량과의 거리가 120cm ~ 150cm 인 경우 작은 폭으로 속도 감소
  4. 전방 차량이 없거나 거리가 150cm 보다 먼 경우 원래 주행 속도로 복구

거리유지 기능 실험 결과

  • 기준 주행 속도는 차량 키트가 스스로 움직일 수 있는 최저 속도로 설정하였다.
  • 테스트 결과 거리가 1m에 가까워 지면 상당히 속도가 줄어들었고 70cm에 이르면 차량 키트가 완전히 정지하였으며, 전방에 가까운 차량이 없으면 원래의 주행 속도로 돌아오는 기능 또한 정상적으로 동작함을 확인 할 수 있었다


실행 방법

YOLO 설치

라즈베리파이에서 git clone https://github.com/ultralytics/yolov5 후 안내에 따라 필요한 모듈 설치


YOLO 구성 및 구동 방법

1. custom_dataset 폴더 : yolov5 모델 학습에 사용된 커스텀 이미지파일 포함 (label파일도 포함되어 있음)
-> 직접 제작 해야 함

2. yolov5 : yolov5 모델의 전체 구성파일이 포함

  • 주요파일
    1) best.pt : 커스텀 이미지로 학습된 yolov5모델
    2) detect.py : 객체인식을 구동시키기 위한 파이썬 파일
    3) /data/car_data.yaml : 학습할 이미지파일들의 정보가 포함된 파일
    4) /models/yolov5s.yaml : 학습할 데이터셋의 뼈대
    5) yolov5s.pt : Pre-Trained 모델

3. train을 위한 명령어
(yolov5 폴더에서) 다음 명령어 실행
python3 train.py --img 128 --batch 3 --epochs 50 --data car_data.yaml --cfg ./models/yolov5s.yaml --weights yolov5s.pt --name custom3_car_yolov5s

  • 파라미터 설명
    1) img : 학습할 img size
    2) batch : 한번에 처리되는 이미지 개수
    3) epochs : 학습 반복 횟수
    4) data : custom yaml 파일
    5) cfg : 뼈대 yaml 파일
    6) weights : Pre-Trained 모델 파일 경로 (pt 형식 파일)
    아무런 값을 적지 않으면 ('') 랜덤한 weight 값으로 초기화 및 학습 진행 (깃헙 공식 오피셜, pre-train을 추천)
    pre-trained 파일이란? : 학습 파라미터(weight와 bias)가 잘 초기화된 파일
    7) name : 학습한 가중치 파일과 관련 내용들이 들어갈 폴더명 (runs/train/에 생성된다)

4. 객체인식을 위한 명령어
(yolov5 폴더에서) 다음 명령어 실행
python3 detect.py --weights best.pt --img 128 --conf 0.4 --source 0

  • 파라미터 설명
    1) weights : 학습된 가중치 파일
    2) img : 인식할 이미지 크기
    3) conf : 인식할 객체의 최저 인식률
    4) source : 인식할 이미지 및 영상 파일 (라즈베리파이에서 웹캠을 source로 하고 싶다면 '0'을 넣으면 된다)

참조


팀원

  • 권동영 (2016110307)
  • 신동해 (2018110651)