# 포장상태 조사장비 개발

## 개요

도로포장상태 조사장비는 도로 주행 중인 운전자의 승차감을 좌우하는 주요 요인인 도로 평탄성을 측정하는 장비이다.

차량에 장착된 여러가지 센서와 카메라를 통해 도로평탄성 분석에 필요한 데이터를 취득하며 이를 화면에 이미지와 그래프등으로 출력. 시각적으로 확인한 어플리케이션을 개발하였다.

![포장상태 조사장비 소개](https://2117524150-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgZ9p_rwVPOOlAOg78W%2Fsync%2F01440c34bb3a7020f933bf73070676878bd944db.png?generation=1628400363263063\&alt=media)

조사 차량의 뒷편에는 주행중인 도로 노면을 촬영하는 두대의 라인 스캔 카메라가, 차량 상부에는 도로 주변을 전방위로 촬영하는 360도 카메라가, 챠랑 하단에는 주행 방향의 도로 높낮이를 측정하는 종방향 평탄성 장비가 장착되어 있다. 또한 조사중인 도로 위치 데이터를 취득하기 위해 차량 내부에 GPS 장치가 장착되어 있다.

여러 장비에서 취득된 데이터는 차량 내부에 장착된 PC의 모니터 화면에 수치와 그래프, 영상 등 다양한 방식으로 실시간으로 디스플레이 되며, 이를 통해 차량에 탑승한 조사자가 현재 주행중인 대상 도로의 정보를 다양한 방법으로 확인 가능하다.

특이사항으로는 로드코리아, 도로교통연구원, 한국공항공사에서 발주한 프로젝트들을 병행하여 진행하였는데, 이는 각 프로젝트에서 기본 요구 사항들이 유사했기 때문 가능했었다.

또한 기본적인 어플리케이션의 구조 및 동작 프로세스는 구현되어 있는 상황이었기 때문에 내부 구조 개선을 통한 어플리케이션 안정화와 각 프로젝트에서 발주처가 요구사항에 따른 추가 모듈 개발 및 연동 등의 유지보수 업무 위주로 진행하였다.

## 세부사항

* 기간 : 2015.01 \~ 2016.03.25
* 사용언어 : C++(MFC)
* 사용 라이브러리
  * exiv2(이미지 헤더 정보 처리 라이브러리
  * RTCore(사내 개발용  라이브러리)
  * STL

## **담당 파트**

### **조사 데이터 후처리 프로세스 개선(공통)**

사용자가 조사 종료시 후처리 프로세스중 조사 중에 저장된 도로 현황 이미지와 GPS 정보를 이용하여 이미지 헤더에 GPS 삽입하는 기능을 구현하였다.

이는 원본 이미지 복사본 생성 과정에서 이미지 헤더에 GPS 정보를 포함시켰던 기존의 방식이 이미지 장수에 따라 처리 시간이 선형적으로 증가하는 문제를 개선하기 위함이었다.(만장 처리시 80여초 소요)

기능 구현시 이미지 메타 데이터 라이브러리인 exiv2를 사용하였다.

개선된 기능 적용시 동일한 장수 처리 시간은 약 6초정도로 기존 대비 약 13배 빨라진 효과가 있었다.

### **교량접속부 측정 장비 제어 모듈 개발(도로교통연구원)**

![교량접속부 측정 장비 어플리케이션 실행화면](https://2117524150-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgZ9p_rwVPOOlAOg78W%2Fsync%2Ff7c57b28677ddd2d1cb3fc8b78801ba40fe0fe89.png?generation=1628400363396284\&alt=media)

교량접속부 측정을 위해 자체 제작한 장비 제어 및 데어트 수신을 위한 통신 프로토콜 설계 및 구현하였다.

특이사항으로는 교량접속부 측정값을 산출하기 위해 장비에 장착된 두 종류의 센서의 데이터를 취합하여 사용했다..

각 센서들 동시에 데이터를 수신하고, 동일한 타이밍에 수신된 데이터를 얻기 위해 쓰레드와 Event 핸들 오브젝트를 사용하여 처리하였다.

### **활주로 조사 보조 디스플레이 인터페이스 개발(한국공항공사)**

![활주로 조사 장비 어플리케이션 실행화면](https://2117524150-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgZ9p_rwVPOOlAOg78W%2Fsync%2F9280c1216a183fb8d8f96d4c9081834cc9c2ad64.png?generation=1628400362967466\&alt=media)

활주로 폭은 8미터로 일반도로에 비해 약 3배정도 넓어 일반도로처럼 한번에 조사 장비를 이용하여 측정하기 어려운 문제가 있었다.

따라서 효율적으로 활주로를 조사할 수 있는 인터페이스에 대한 요구가 있었다.

이에 조사구간에 대한 현황파악이 가능한 궤적안내 미니맵과 조사중 현재 이동중인 위치를 궤적으로 표시해주는 주행궤적 디스플레이 인터페이스를을 설계, 구현하였다.

궤적 안내 미니맵은 조사할 활주로의 각 코너 GPS 좌표와 조사 간격을 입력하면, 화면에 조사햐애할 횟수를 시각적으로 확인할 수 있도록 구현하였다.

또한 사용자에게 이미 조사한 구간과 남은 구간의 구분을 명확하게 인지시키기 위해 조사를 마친 구간은 회색으로 표시되도록 구현하였다.

주행궤적 디스플레이는 현재 조사할 구간의 시, 종점의 GPS 좌표 데이터를 이용하여 아이콘으로 표시되고, GPS센서로부터 현재 차량의 좌표값을 수신하여 화면상에 이동 궤적이 표시되록 구현하였다.

이는 항공기를 기준으로 차선이 그려진 활주로에서 조사차량으로는 일반도로에서처럼 시작부터 끝까지 벗어남 없이 주행할 수 있도록 보조해주기 위해 고안한 인터페이스였다.

또한 운전자 단독으로 조사 장비를 운용할 상화도 고려하여 청각 정보를 이용한 인터페이스도 구현하였다.

주행중인 차량인 차량이 종점위치 통과시 종료되는 자동 종료 기능과 시종점의 GPS 좌표 데이터로 가상의 궤적데이터를 생성하여 현재 주행위치가 궤적데이터의 x좌표에서 멀어지는 거리에 따라 차량에 장착된 스피커를 통해 알람음의 빠르기를 달리하여 재생되도록 하였다.

따라서 운전자는 모니터 화면을 보고 조작할 필요없이 소리에 의지하여 조사할 수 있었다.

## 어려웠던점

### **커스텀 UI 컨트롤 개발**

활주로 조사 보조 디스플레이 인터페이스의 경우 새로운 컨셉의 UI 컨트롤이었기 때문에 속성 육안 조사기 개발 프로젝트 때처럼 상용UI 라이브러리 컨트롤을 이용하여 개발할 수가 없었다.

따라서 전부 새로 구현했어야 했는데, 이러한 방식으로 UI 컨트롤 개발은 처음 진행하다보니 어려운 점이 많았다.

그러다보니 기획단계에서 구상했던 기능적인 부분은 대부분 다 반영이 되었으나, 외관적인 부분은 생각했던 것보다 투박하게 구현되어 많이 아쉬웠다.

### **추가 개발 모듈과 다른 개발자의 어플리케이션 간 연동**

어플리케이션 내에 다른 모듈들 처럼 신규 개발한 모듈들 또한 실행되어야 했기 떄문에 기존 프로그램의 안정성과 모듈 연동 두마리 토끼를 둘다 잡아야 하는 상황이었다.

신규 개발한 모듈 연동시 발생할 사이드 이펙트를 최소화 하기 위해 다른 모듈들이 어플리케이션과 어떻게 연동되어 있는지 코드분석부터 했었다.

어플리케이션 내에 여러 모듈들이 통합되어 실행되는 구조였기 때문에 기존 수행했던 프로젝트들에 비해 코드의 양이 상당히 많아 연동 부분 작업보다 코드 분석에 시간이 많이 걸렸었다.

그나마 한가지 다행이었던 것은, 작성된 코드가 입사 당시부터 레퍼런스로 삼아 공부했었던 개발자의 코드였기 떄문에 모듈 구조나 코딩 스타일이 눈에 익어 전체적인 흐름을 파악하는데는 크게 문제가 없었다는 점이다.

## 정리

기존 프로젝트보다 작성된 코드의 양은 물론 실행 복잡도가 높아 분석뿐만 아니라 개발에 많은 어려움이 있었다. 하지만 프로젝트를 수행하는 과정에서 각 모듈 및 어플리케이션의 구조를 이해하고, 동작을 파악하는 과정을 통해 코드 분석 및 개발 역량 수준을 프로젝트 수행 전보다 많이 높일 수 있었다.

또한 UI 컨트롤 개발을 하면서 기획부터 설계, 개발까지 전체 프로세스를 경험했었기 때문에 UI 컨트롤 개발 역량 또한 한층 더 키울 수 있었다.

## 스크린샷

![공항활주로 조사장비 어플리케이션 실행화면](https://2117524150-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgZ9p_rwVPOOlAOg78W%2Fsync%2Fa470ac5e2cb619d7ce3362820c8f1554fc794464.png?generation=1628400363568993\&alt=media)
