Name Last Update
dataset Loading commit data...
docs Loading commit data...
src Loading commit data...
.gitignore Loading commit data...
README.md Loading commit data...

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

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)