[43호]방어 운전 도움 솔루션 ‘DDAS’(Defending Drive Assistant Solution)
2017
ICT 융합 프로젝트 공모전
우수상
방어 운전 도움 솔루션 ‘DDAS’(Defending Drive Assistant Solution)
글 | 고려대학교 강병욱
심사평
칩센 작품 제작 의도가 명확하고, 보고서 또한 정확한 목표에 대한 결과 도출을 하고자하는 의지가 보입니다. 시연 동영상에서는 앞차와의 거리 부분에 대해 센싱하고 있는 것을 확인하였습니다만, 차선 변경이나, 운전 패턴 분석과 관련된 부분은 확인이 되지 않은 점이 아쉽습니다. 최근 무인자동차 시장과 더불어 차량의 안전 시스템인 ADAS 시장 또한 열리고 있는데, 이러한 시장의 트렌드까지도 관심을 가지고 있는듯 하여 조금 더 완성도 있는 제품을 기대하게 하는 작품입니다.
뉴티씨 영상을 보니 어플리케이션의 완성도가 매우 높습니다. 특히 보고서 완성도는 흠 잡을데가 없습니다. 다만, 센서를 여러군데 장착하여, 보다 정확한 안전거리를 잴 수 있도록하는게 중요하다고 생각합니다. 레이저 센서의 경우, 각진 곳의 감지시 튀는 문제는 어떤 식으로 해결하였는 지 등도 제시하는 것이 좋겠습니다. 앞에 차량이 없을 때에 최대 거리로 인식하게 되면, 어떤 식으로 반응하는지 등의 데이터와 처리 방법도 제시하였으면 좋았겠습니다. 앞차와의 거리를 제외한 다른 센서들의 동작 시연 영상도 함께 있었으면 좋았을 것 같습니다.
위드로봇 레이저 센서 처리 부분이 깔끔한 완성도 있는 작품입니다.
작품 개요
문제점
초보 운전자들이 자신의 잘못된 운전 습관으로 인하여 교통사고를 쉽게 유발한다.
사전 조사
‘TAAS 교통사고 분석시스템’을 활용한 2016년 사고 조사에 따르면 ‘안전운전 불이행’과 ‘안전거리 미확보’에 의한 사고가 전체의 76%를 차지한다. 또한 대부분의 초보 운전자들이 불안감을 느끼는 가장 큰 항목은 차선변경의 어려움이었다. 특히 초보 운전자의 경우는 운전습관을 가지기 전의 단계에 속하기 때문에 방어운전을 익혀 교통사고에서의 가장 큰 이슈인 ‘안전거리 미확보’와 ‘안전운전 불이행’으로 인한 사고를 미리 방지하고자 다음과 같은 해결방안을 제시한다 .
해결방안
초보 운전자에게 방어운전을 할 수 있도록 안내해주며, 안전거리 유지 와 차선 변경을 쉽게 할 수 있도록 도와주는 솔루션을 제공한다. 주행 시 운전자의 운행 데이터를 수집하여 위험 운전 패턴을 파악하여, 운전자 스스로 본인의 운전 습관을 알고 잘못된 운전습관을 교정 할 수 있다.
작품설명
주요 동작 및 특징
DDAS는 전후방 차량과의 거리를 측정하는 센서 시스템과 차량 데이터를 수집하는 스캐너 시스템 그리고 데이터를 관리하고 보여주는 어플리케이션으로 구성되어 있다. 센서 시스템은 전후방 차량 간의 거리를 측정하여 어플리케이션으로 전송하며, 스캐너 시스템은 차량의 내부데이터를 측정하여 어플리케이션으로 전송한다. 이를 통해, 어플리케이션에서 거리데이터와 내부데이터를 통해 안전거리를 계산하여 운전자에게 안전거리 확보를 유도한다. DDAS는 운전자가 차선 변경 시, 후방 좌·우 차량을 센싱하여 후방차량과의 상대 속도에 따른 안전여부를 제공하여 운전자의 차선변경에 도움을 줄 수 있다. DDAS는 스캐너 시스템을 통해 과속, 급가속, 급감속, 급정거, 급출발 등의 운전 패턴을 분석하여, 실시간 경고알림 및 통계분석을 통해서 잘못된 운전습관 교정에 도움을 줄 수 있다.
주요기능 체계도
안전거리 알림
전후방 차량과의 거리를 측정하여 운전자에게 수치적으로 현재 거리를 알려주며, 현재 속도에서 지켜야할 안전거리 지수를 평가하여 초록색과 노란색 붉은색으로 경고를 준다. 안전거리를 지키지 않고 주행할 시에 경고음을 들려주어 운전자의 안전거리 확보를 유도한다. 측정에 사용되는 레이저 센서는 인체에 안전한 1M Class를 사용하며, 최대 120m 까지의 거리를 측정할 수 있으며 초당 40번의 센싱이 가능하다. 이를 통해 운전자는 안전거리 확보에 도움을 받을 수 있으며 운전 습관이 잡혀 있지 않은 초보 운전자에게는 좋은 운전습관을 갖도록 할 수 있다. 또한 졸음 운전 등, 운전자가 전방을 주시하지 못하였을 때, 경고음을 통해서 사고를 방지할 수 있다.
차선변경 도움
운전자가 차선을 변경할 시에 후방 좌, 우 방향을 센싱하여 후방 차량과의 상대 속도에 따른 안전여부를 제공하여 운전자의 차선변경에 도움을 줄 수 있다. 레이저 센서와 서보모터를 활용하여 옆 차선의 후방 차량과의 거리 ‘S’를 구한다. 거리 ‘S’를 구하기 위해 θ 값을 이동하며 옆 차선 길이 ‘L’만큼 떨어진 곳에서 측정되는 값 ‘D’를 감지한다. ‘D’ 값이 유효한 값인 경우 (옆 차선의 후방 차량을 센싱한 경우)의 ‘D값을 이용하여’ 삼각함수를 통해 거리 ‘S’를 구한다. 이렇게 구해진 ‘S’값과 현재 속도 데이터를 활용하여 옆 차선 후방 차량과의 상대속도 ‘V’를 구한다. 이 거리 ‘S’ 값과 상대속도 ‘V’값을 통해서 차선 변경의 안전 여부를 판단하여 음성과 시각적 안내를 통해 운전자는 차선 변경에 도움을 받을 수 있다.
운전자 행동분석
운전자는 ‘스캐너 시스템’을 통해서 과속, 급가속, 급감속, 급정거, 급출발 등의 운전 패턴을 분석하여 실시간 경고알림 및 통계분석을 통해서 잘못된 운전습관 교정에 도움을 줄 수 있다. 운전 패턴은 도로 교통공단 안전운행 기준을 근거로 하여 책정하였다. 이 안전 점수의 카운트 된 횟수, 빈도수에 따라 평균 점수를 구하게 된다. 안전 점수를 지키지 못한 경우에 경고 알림을 준다. 오른쪽 그림과 같이 운전 점수를 그래프로 시각화하여 운전자는 수치적으로 명확하게 자신의 운전 습관을 확인 할 수 있다.
얻어진 운전 패턴 데이터를 클라우드 서버에 연결하여 매 차량이 이동하는 지역(Zone)마다 level을 올려준다. 운전자가 위험 행동을 보이는 모든 상황에 클라우드 서버로 데이터를 업로드하게 된다. 운전 패턴 데이터의 맵핑을 통해, 도로의 위험지수 분석 등에 활용할 수 있다.
전체 시스템 구성
‘DDAS’는 ‘센서 시스템’과 ‘스캐너 시스템’으로 이루어진 두 개의 하드웨어 시스템과 어플리케이션 그리고 클라우드 서버로 구성되어있다. 아래는 사용자 관점에서 이해하기 쉽도록 나타내었다.
Hardware System
Laser Sensor System
차량전면 유리에 장착되어 전후방 차량과의 거리를 측정한다. 차량용 전원 시가잭을 통해서 12V 전원을 공급받으며 블루투스 통신을 통해서 측정한 앞차와의 거리를 스마트폰의 어플리케이션으로 전송한다.
회로구성
마이크로 컨트롤러는 ARM Cortex-M3를 선정하였으며, 차량용 전원 12V를 입력 받아 5V와 3V를 출력하는 회로를 구성하였다. 블루투스를 연결하여 스마트폰으로 데이터 통신이 가능하도록 하였다.
시스템 구성도
아래와 같이 마이크로 컨트롤러에 두 개의 레이저 센서와 1개의 모터 그리고 블루투스를 연결한 것을 볼 수 있다.
Data flow Diagram
TIM 인터럽트를 통해서 while문 내에 정확한 시스템 주기를 만든다. 시스템 주기마다 가장 먼저 거리데이터를 저장할 변수들을 모두 초기화해주고 거리데이터를 요청한다. 데이터 요청 후에 데이터를 전달받으면 데이터를 저장하고, 데이터의 유효성을 검사하고 유효한 데이터만 형 변환을 통해 가공이 가능한 타입으로 만들어준다. 이후 데이터 필터링을 거쳐 최종적으로 산출된 거리데이터를 어플리케이션으로 전송한다.
Scanner system
OBD 단자의 12V, Ground, CAN_High, CAN_Low 4선을 연결하여 MCU에 전원을 공급하고 CAN 통신을 가능하게 한다. CAN_High와 CAN_Low에 연결해 줌으로써 차량의 버스에 연결되어 있는 차량 ECU에 접근 가능하다. ECU에 Call and Response 방식을 통해서 다양한 차량 데이터를 읽어올 수 있다.
CAN 통신
차량의 CAN BUS를 통해서 차량 ECU에 접근하기 위해서는 CAN_High와 CAN_LOW를 MCU에 직접 연결하는 것이 아닌 위와 같이 CAN Transceiver를 사용하게 된다. CAN Transceiver에 STM32(MCU)에 내장되어 있는 Can Controller의 CAN_RX, CAN_TX를 연결시켜 줌으로써 CAN 통신이 가능하다.
표준 OBD – II PID
표준 OBD -II PID 표를 활용하여, Response 값을 의미 있는 데이터로 변환할 수 있으며, 각 PID에 대한 예상 Response 값을 제공받을 수 있다. 모든 차량이 모든 PID를 지원하는 것은 아니며, 표준에서 정의되지 않은 제조업체가 정의한 사용자 정의 PID가 있을 수 있다. 본 프로젝트에서 필요한 데이터는 실시간 주행 데이터이기 때문에 현재 정보를 제공하는 모드1을 사용하였다. 예를 들어 엔진 RPM 값과 차량 속력 데이터를 요청한다면 아래와 같은 형식으로 원하는 데이터의 PID의 값을 요청하여, Response 받은 값을 표에 있는 공식을 사용하여 계산하면 원하는 주행데이터를 얻을 수 있다,
Application
어플리케이션에서 ‘Laser Scanner System’과 ‘Scanner System’으로부터 전달받은 데이터를 통해 안전거리 여부를 판단해 사용자에게 알림을 해주며, 사용자의 운전패턴을 분석해 점수화한다. 상단 그림과 같이 실제 운전자들은 네비게이션 어플리케이션을 사용하는 경우가 많으므로 최상위 뷰에 띄워 네비게이션을 사용하면서 동시에 안전거리 여부를 안내받을 수 있도록 제작하였다. 어플리케이션은 블루투스를 통해서 거리데이터와, 차량 내부데이터를 가져오는데, 데이터 흐름도는 이해하기 쉽도록 아래와 같이 시각화하였다.
Bluetooth Data flow Diagram
Laer Sensor Data Process
Scanner Data Process
개발환경
Hardware
· MCU: Arm-Cortex M3
· OS: Windows 10
· Tool IAR Embedded Workbench
· Language C/C++
Software
· OS: Windows10
· Tool: Android Studio
· Language: JAVA(Android)
테스트 환경
· OBD 에뮬레이터
· 차량 (그렌저, 현대)
제작과정
사전 기술 확보
· 자동차 주행 데이터 수집/고장 진단(예측) 기술 확보
· 레이저 센서, 스마트폰 내장 센서 등과의 연동 기술 확보
· 대용량 데이터 관리/분석 기술 확보
· 차량 통신 프로토콜(CAN, Controller Area Network) 및 OBD 지식 습득
전체 일정관리
1월 기획 및 선행 기술 확보
· 문제 정의, 관련 서비스 분석, 솔루션 방향 정립
· 에뮬레이션, 개발 환경 구축
· OBD/CAN, 무선 통신 기술 학습
· 주요 활용 디바이스 채택
2월 하드웨어 제작 및 앱/웹 개발
· 하드웨어 제작
· 안드로이드 앱 개발
· 센서 데이터 가공 알고리즘 개발
· OBD 스캐너와 스마트폰 통신
· 주요 데이터 추출 및 DB 정의
· 레이저 센서와 연동
3월 시스템 구축 및 테스트
· 주행 데이터, 센서 값 DB 설계 및 구현
· 주요 센서 테스트 및 패키징
· 위험도로 분석 시스템 구축
· 실제 차량 환경 테스트
프로젝트 구현
센서값 동기화
각각의 센서들이 실시간으로 통신하기 때문에 초당 요청한 값들을 동기화 시켜주기 위한 방법이 필요했으며 이를 하나의 Pool을 만들어 각 요청 ID 값과 함께 Pool에 삽입하고 Pool의 값들이 하나의 완성된 값이 될 경우 꺼내서 안전거리 계산 Queue에 삽입하도록 하였다.
여기서 값이 들어오지 못해 남겨진 값들에 대해서는 제거 카운트 값을 주어 3회 이상 데이터가 들어오지 않는 경우 Pool에서 제거 들어온 데이터만 저장하도록 구현하였다.
Zone별 안전레벨 지정
운전자가 운전하는 지역을 1km 단위로 쪼개어 현재 자신이 위치하고 있는 지역의 안전레벨을 확인할 수 있다. GPS정보만으로 자신이 운전 중인 도로를 파악하긴 어려우므로(고가도로와 같이 있는 경우 등) 각각의 1km 단위의 지역별 안전수칙 위반 데이터를 수집하고 Zone의 level을 올려 사용자에게 알려주는 방식으로 구현하여 적어도 자신이 운전 중인 도로 혹은 근처 도로에서 발생한 위험 지역을 미리 알려주어 방어운전을 돕는다.
옆 차선 안전거리 측정
옆 차선 차량의 경우 거리값을 알아내기 위하여 레이저 센서의 각도와 거리 값 그리고 기준이 되는 L 값으로 삼각함수를 이용하여 거리계산을 하였다. 여기서 현재 차량이 차선변경을 해도 괜찮은지에 대한 여부는 단순한 거리뿐만 아니라 현재 뒷차량의 속도도 필요하다고 판단하여, 현재 차량의 속도와 거리 간격을 이용 상대차량의 상대속력을 구하였고 이를 통해 차선 변경 안내를 해주도록 제작하였다.
좌우측 차선 스캐닝
좌우측 차선 스캐닝의 경우 버튼을 직접 눌러야하는 불편함이 있었지만, 이를 개선하기 위해 Gyro Sensor에 의해 방향지시등을 켜기만 해도 자동 화면전환 되어 옆차선 센싱을 하도록 제작하였다. Gyro Sensor를 이용해 x, y, z축에 대한 순간 기울기 값을 0.15초 단위로 읽었다. 이렇게 받은 데이터만을 이용하여 원하는 데이터를 깔끔하게 얻을 수 없었다. 이를 해결하기 위해 칼만 필터링을 연구하였다. 이를 통해, 얻은 데이터를 필터링 하는 알고리즘을 개발하였고 차량 좌우측 이동 지시 스틱에 부착하여 운전자가 좌측, 우측, 방향 지시등 끄는 것을 구분하는데 사용했다.
레이저 센서 데이터 수집
데이터 수신시 인터럽트가 발생하여 F_sensor_char 변수에 저장한다. 레이저 센서에서 값이 [0D] [거리 데이터 32~48bit] [0a] 형식으로 들어온다. 따라서 이를 이용하여, 0a가 아닌 경우 F_sensor_string 배열에 저장하고 0a인 경우, 거리 데이터가 (1m 이상&& 130이상) 유효한 데이터 인지 체크한다. 데이터가 유효한 경우 F_sensor_check 값을 1로 바꾸고 valid_num을 1 증가시킨다. 그리고 Sensing_num을 1 증가시켜 다음 데이터 받을 준비를 한다. main문에서 40회 거리데이터를 요청하여 총 40개의 배열에 값을 저장하게 된다.
시스템 주기 생성
ARM Cortex-M3는 36MHz의 클럭을 공급받는다. TIM에서 시스템 주기로 정확한 1초를 만들어 주기 위해서 Period 값 12000, Prescaler 값 3000을 넣는다. 다음 식을 통해서 정확한 1초를 구현한다. [36000,000,000/(12000*3000) = 1000]. main문에서 아래와 같이 구성하여, TIM_Handler()에서 1초에 한번 인터럽트가 발생했을 때, flag=1로 바꾸어 줌으로써, 1초에 한 번 main문에 접근하도록 시스템 주기를 구현하였다.
while(1)
{
if(flag ==1)
{
//어플리케이션
…
flag = 0;
}
}
Application
ZNF(Zone Name Finder)라는 클래스이용 해당 좌표의 키 값을 찾아낸다. 해당 키 값으로 MQTT에 구독 및 HTTP를 요청한다. 요청 결과를 해당 Location의 Danger level을 응답한다. 사용자에게 1Km 단위로 위험 level을 알려 준다. 클래스의 극좌표 값을 변환하여 나라별로 대응가능하다.
ScoreCalculator의 doCalculateScore 메소드로 각각의 안전지표들에 따라 큐에 들어있는 값으로 평가를 내린 후 Count된 값을 반환한다. 여기서 평가된 값을 통해 위험행동을 판단한다. 각 위험행동에 따른 위험 알림과 데이터 저장 및 서버 전송 로직이 포함되어 있다.
아래는 각각의 블루투스로부터 들어오는 값들을 동기화시켜 주기 위한 ScorePool 클래스이다. Pool속에 각각의 정보를 넣기 위한 intoPool, 메소드 검색을 위한 searchPool 메소드와 searchCount(조회수 카운터) 변수,검색된 index를 기준으로 Pool속에서 꺼내기 위한 getDriveInfo 등으로 구성되어 있다. 이 클래스는 싱글톤 형태로 구성되며 getInstance에서 static한 scorePool 객체만을 반환하는데 이로 인해 모든 블루투스 연결 내에서 동일한 객체 사용이 가능하다.
소스코드
DDAS 적용 화면