Skip to content

0woogie/SSU-CAR

 
 

Repository files navigation

안전운전 피드백 서비스

🚘 현대모비스 2024 Mobility SW HACKATHON

2024.01.18~2024.02.23

👥 팀 소개

김정우 맹영욱 백서현 김병지
김정우 맹영욱 백서현 김병지
Frontend Backend Backend Embedded

📌 프로젝트 소개

전방 주시 태만을 비롯한 안전운전 불이행은 교통사고의 주 원인이다.
또한, 현재 상용화된 자율주행 레벨2, 레벨3에서 운전자는 여전히 시스템의 직접 운전 요구에 대응해야 할 의무가 있다.
따라서 사용자의 안전운전을 위해 운전 습관을 피드백해주는 모빌리티 SW를 기획하였다.

차량 센서와 내부 카메라로 차량 내/외부의 위험한 운전 상황과 운전자 자세 (e.g. 실선에서의 차선변경, 전방 주시 태만 등)를 감지한다.
이 데이터를 바탕으로 운전 점수를 산정하고, 주행 리포트를 제공한다.
추가적으로 다양한 운전 배지 획득을 통해 안전 운전에 대한 성취감과 동기 부여를 제공하는 모바일 웹 서비스를 기획했다.

img1 img2

🔍 화면 구성 및 기능

주행 중 주행 후
home 주행 중 주행 후
운전점수, 주의해야 할 운전습관, 주행 코멘트 등
사용자의 전반적인 현재 상태와 주행 기록 확인
차량에서 주행에 대한 운전 정보를 수집
RC카-서버 통신으로 주행 정보 DB 저장
주행에서 누적된 데이터를 주행이 후 즉시 확인
감지된 운전 습관과 횟수를 제공
주행 기록 주행 리포트 배지
주행 기록 주행 리포트 배지
사용자의 지금까지 주행을 기록
각 주행에서 감지된 운전 습관과 횟수를 확인
누적된 주행 데이터를 통해 얻은 사용자의 전반적인
운전 습관 피드백, 그래프 통계 제공
주행 이력, 월별 운전 점수 현황, 월별 주행 이력 및
주의해야 할 운전 습관 등
주행 시 특정 조건을 충족하면 배지 획득
사용자에게 동기부여와 재미 요소 추가

📹 시연 영상

default.MP4

🛠️ Stacks

Front

Back

Embedded

ROS2 Python Docker C++

🧐 상황 판단 알고리즘 구현

Detail information in this link: Here

Monitor the driver's forward attention by pupil, head pose and phone detection.
Three evaluation factors - Closed eye detection, Head pose estimation, Phone detection
img1

Monitor the illegal lane change like changing in solid line and without direction light.

DrivenDist - Report driving distance and current veloicity.
Joystick_usb - Control RC car with joystick.
LaeDetection, lane_ex - Lane detetction with HSV(HSL) filtering.
img1

🕳️ 트러블 슈팅

AWS 배포 과정에서 에러 (서버 다운)

문제 상황 : EC2 인스턴스로 배포, codedeploy와 Github Actions로 배포 자동화해서 사용하던중 서버 갑자기 느려짐-> 다운됨

원인➀ : EC2 인스턴스 재부팅 시 CodeDeploy 꺼짐

  • EC2 인스턴스에 빌드파일, 실행중인 8080 포트 없음 확인
  • systemctl enable codedeploy-agent : 재부팅 시 꺼지는 CodeDeploy 자동으로 켜지게 설정

원인② : 인스턴스 내 MySQL 메모리 과부하

  • EC2 인스턴스에는 mysqld 필요 없는데 계속 실행하면서 메모리 과부하 발생
  • systemctl disable mysqld : 인스턴스 재부팅 시에도 자동으로 mysqld 안켜지게 설정
  • swap memory 로 메모리 확보
    • sudo dd if=/dev/zero of=/swapfile bs=128M count=16
    • sudo chmod 600/swapfile
    • sudo swapon /swapfile
    • sudo swapon -s
    • sudo vi /etc/fstab : 메모리 남은거 확인

🧾 API 명세서

카테고리 기능 �HTTP 메서드 URI Request Response
임베디드 실시간 상황 값 전달 POST /driving/embedded {
”type” : 1,
”createdAt : “2024-02-12 09:51:16”
}
{
주행 중이면 HttpStatus.OK
주행 중 아니면 HttpStatus.ACCEPTED
}
SSE 프론트엔드 SSE통신 POST /driving/events
최근 주행 점수 �GET /home/score {
"score" : 60
}
최근 주행 3개 점수 �GET /home/latestScores {
"scores": [
{
"reportId": 1,
"score": 80
},
{
"reportId": 2,
"score": 70
},
{
"reportId": 3,
"score": 100
}
]
}
최근 주행 피드백 �GET /home/feedback {
"feedback" : "차선 변경에 좀 더 신경써봅시다"
}
주의해야할 운전 습관 �GET /home/recentRisks {
"recentRisks": [
{
"scenarioType": 2,
"scenarioName": "핸드폰 사용",
"scenarioCount": 2
},
{
"scenarioType": 52,
"scenarioName": "실선에서 차선변경",
"scenarioCount": 2
},
{
"scenarioType": 51,
"scenarioName": "방향지시등 안 켜고 차선변경",
"scenarioCount": 1
}
]
}
주행 시작 POST /driving/start {
”reportId” : 1
}
주행 주행 끝 (목적지 도착) PATCH /driving/end {
”reportId” : 1
}
주행 주행 끝 - 상세 내용 조회 �GET /driving/end/{report-id} {
”reportId” : 1,
”departuredAt” : "2024-02-12 09:51:16",
”arrivedAt” : "2024-02-12 12:03:44",
”mileage” : 110.5,
"score" : 80,
”scoreComment” : “지난번보다 20점이나 올랐네요! 수고하셨습니다!”,
"internalSummaries": [
{
"scenarioType": 1,
"scenarioName": "졸음 운전",
”scenarioCount": 3
},
{
"scenarioType": 2,
"scenarioName": "차선 변경",
”scenarioCount": 5
}
],
"externalSummaries": [
{
"scenarioType": 1,
"scenarioName": "차선 변경",
”scenarioCount": 2
},
{
"scenarioType": 2,
"scenarioName": "과속",
”scenarioCount": 1
}
]
}
기록 기록 전체 조회 �GET /history {
{
”reportId” : 1,
”departuredAt” : "2024-02-12 09:51:16",
”arrivedAt” : "2024-02-12 12:03:44",
”mileage” : 25.523,
”score” : 80
},
{
”reportId” : 2,
”departuredAt” : "2024-02-12 09:51:16",
”arrivedAt” : "2024-02-12 12:03:44",
”mileage” : 25.523,
”score” : 80
}
}
기록 기록 상세 조회 �GET /history/{report-id} {
"internalSummaries": [
{
"scenarioType": 1,
"scenarioName": "전방 주시 태만",
"scenarioCount": 5
},
{
"scenarioType": 2,
"scenarioName": "졸음 운전",
"scenarioCount": 1
}
],
"externalSummaries": [
{
"scenarioType": 51,
"scenarioName": "차선 변경",
"scenarioCount": 1
}
]
}
리포트 (간단) 주행 이력 조회 POST /feedback/bio {
”thisMonth”: 2
}
{
"monthlyMileage": “20.2",
"totalMileage": "1206.456",
"latestDeparture": "2023-10-23 18:51:16",
"latestArrival": "2023-10-23 19:30:44",
}
리포트 나의 안전 점수 조회 POST /feedback/score {
”thisMonth”: 2
}
{
”averageScore” : 75.5
}
리포트 이번달 주의 항목 - 상위 4개 POST /feedback/top4 {
”thisMonth”: 2
}
{
"topRisks": [
{
"scenarioType": 2,
"scenarioName": "핸드폰 사용",
"scenarioCount": 2
},
{
"scenarioType": 52,
"scenarioName": "실선에서 차선변경",
"scenarioCount": 2
},
{
"scenarioType": 51,
"scenarioName": "방향지시등 안 켜고 차선변경",
"scenarioCount": 1
},
{
"scenarioType": 3,
"scenarioName": "졸음 운전 (눈)",
"scenarioCount": 1
}
]
}
리포트 이번달 주의 항목 - 내외부 나눠서 POST /feedback/caution {
”thisMonth”: 2
}
{
"internalSummaries": [
{
"scenarioType": 2,
"scenarioName": "핸드폰 사용",
"scenarioCount": 5
},
{
"scenarioType": 1,
"scenarioName": "졸음 운전(고개)",
"scenarioCount": 3
},
{
"scenarioType": 3,
"scenarioName": "졸음 운전(눈)",
"scenarioCount": 2
}
],
"externalSummaries": [
{
"scenarioType": 51,
"scenarioName": "방향지시등 안 켜고 차선변경",
"scenarioCount": 5
},
{
"scenarioType": 52,
"scenarioName": "실선에서 차선변경",
"scenarioCount": 1
}
]
}
뱃지 뱃지 전체 조회 �GET /badge {
{
"badgeId": 1,
"status": 0,
"name": "귀향길 운전왕",
”caption”: “시작이 반이다! 벌써 베스트 드라이버에 가까워지고 있어요.”
},
{
"badgeId": 2,
"status": 1,
"name": "베스트 드라이버",
”caption”: “시작이 반이다! 벌써 베스트 드라이버에 가까워지고 있어요.”
},
{
"badgeId": 3,
"status": 0,
"name": "피드백 만점",
”caption”: “시작이 반이다! 벌써 베스트 드라이버에 가까워지고 있어요.”
}
}

About

SSU-CAR Backend Repository

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published