TECHNICAL FEATURE



TECHNICAL FEATURE

 

제 9회 임베디드 소프트웨어 공모대전 수상작 - 대상
안드로이드 기반의 스마트 내비게이션 "Well-Ving"

글 장성훈, 김상민, 어유경, 최재용, 임동훈 / 경기대학교 전자공학과
자료제공 임베디드소프트웨어산업협의회(www.kesic.or.kr)

 


작품 제목_" Well-Ving"
"Well-Ving"은 Well과 Driving이 합쳐진 단어로써 건강한 운전, 즉 좋은 운전습관 및 안전한 운행을 하자는 의미이며 또한 우리말로는 건강한 인생 또는 행복추구라는 뜻이 담겨있다.

작품 개요
매년 차량이 증가하고 그에 따라 교통사고 또한 증가하고 있으며 사용자들에겐 보험료 증가라는 부담으로 돌아오고 있다.
미국 고속도로 안전 보험 연구소 IIHS에서 다양한 안전시스템(자동 주차, 차선 이탈 경고, 충돌 경고 시스템 등)이 장착된 V사의 한 모델의 소유주들에게 조사한 결과 74%가 오작동에 의해 잘못되거나 불필요한 경고를 받았던 적이 있다고 대답했음에도 불구하고 94%가 그와 같은 시스템을 계속 원한다고 답했다. 사용자들은 몇 번 오작동을 한다고 해도 위험한 상황에서 한 번 도움이 된다면 만족하고 이 시스템이 교통사고 예방에 도움이 된다고 생각하는 것이다.

또한 우리나라에서도 증가하는 교통사고와 도로 곳곳의 정체 등을 해결하기 위해 국가 R&D 사업으로 "스마트 하이웨이"라는 도로와 차량 간, 차량과 차량 간의 통신을 이용한 교통사고 예방 및 운전자 편의를 위한 사업을 추진하고 있다.
이처럼 심각해진 문제를 별도의 장비 없이 요즘 흔히 가지고 있는 스마트폰을 사용하여 조금이라도 더 해결할 수 있다면 많은 사용자들에게 도움이 될 것이다.

Well-Ving은 안드로이드 OS 기반의 스마트폰이나 태블릿 PC에서 실행시킬 수 있으며 기존의 테이타화 되어 있는 지도를 이용한 길 안내 시스템이 아닌 실제 운전자가 주행하고 있는 도로의 영상을 기반으로 도로 위에서 가야 할 길, 위험지역 등을 표시해주는 내비게이션이다.
또한 사용자에게 위험 알림 등의 기능들은 기존의 방식이 아닌 실시간 도로의 상황에 대해 알려줌으로써 불필요한 경고 알림을 없애고 정보가 필요할 때만 경고메세지, AR 기능을 이용하여 사용자에게 보다 보기 쉽게 제공해준다는 장점이 있다. 

 




1.1. 프로그램 사용법 (Interface)     1.1.1. 메인 GUI 사용법   1.1.1.1. 초기 화면 및 메인 메뉴 선택    <대화창><그림20 초기화면 및 메인메뉴 선택화면>    
구 분 기 능
① 사용자 정보 입력란 처음 실행 시 사용자의 간단한 정보를 서버에 등록하기 위해 입력
② 등록 버튼 입력한 정보를 서버에 전송하여 저장
③ 내 정보 버튼 사용자의 정보를 관리하는 페이지로 이동
④ 네비게이션 버튼 네비게이션 페이지로 이동
⑤ 설정 버튼 경로 내 검색 또는 주행 중 알림 옵션을 설정하는 페이지로 이동
1.1.1.2. 내 정보 설정     1.1.1.2.1. 우리집 등록  <그림20 초기화면 및 메인메뉴 선택화면>   
구 분 기 능
① 선택 목록 탭 설정 할 목록을 선택하면 설정화면 이동
② 경로검색 버튼 사용자의 집이 등록되어 있을 경우 검색 없이 바로 경로 탐색
③ 주소 입력란 사용자의 집 주소를 등록하기 전 검색하기 위해 주소를 입력
④ 검색 버튼 입력 된 단어로 주소들을 검색
⑤ 주소 리스트 검색 결과 주소들이 리스트로 나열되고 선택 가능
⑥ 등록 확인창 리스트에서 하나를 선택 시 등록 확인 대화창
1.1.1.2.2. 친구 관리 설정   <그림22 친구관리 설정 화면>    
구 분 기 능
① 전화번호 입력란 검색 할 친구의 전화번호를 입력
② 친구검색 버튼 입력 한 전화번호로 사용자를 검색
③ 친구목록 리스트 사용자의 친구 목록 이름-접속상태-버튼-버튼 형식으로 나열
④ 경로검색 버튼 선택 된 행의 친구의 현재위치를 검색
⑤ 삭제 버튼 선택 된 행의 친구를 목록에서 제외
⑥ 친구 요청 대화창 다른 사용자가 사용자를 친구추가 하였을 때 사용자에게 보여지는 확인창
1.1.1.2.3. 즐겨찾기 설정<그림23 즐겨찾기 관리 화면>
구 분 기 능
① 즐겨찾기목록 리스트 사용자가 즐겨찾기에 등록해놓은 목록들이 나열 짧게 터치하여 검색 또는 길게 터치하여 목록에서 삭제 가능
       1.1.1.2.4. 포토앨범<그림24 포토앨범 갤러리뷰/모아보기 화면> 주행 중 풍경을 담아놓고 싶거나 다음에 와보고자 하는 장소가 있을 때 사진을 찍어 앨범에 담아놓고 볼 수 있는 기능이다. 위 그림처럼 갤러리뷰 와 모아보기 기능을 사용하여 사용자의 편의를 고려하였고 슬라이드 창을 통해 사진의 장소와 찍은 날짜를 이미지와 함께 확인 할 수 있다. 갤러리 뷰의 슬라이드창 내용은 이미지 드래스 또는 선택 시 중앙 이미지에 해당하는 설명으로 바뀌며 모아보기 뷰에서는 이미지 선택 시 해당 이미지에 대한 정보로 바뀌게 된다.1.1.1.3. 설정 화면   <그림25 환경 설정 화면>    
구 분 기 능
① 설정 저장 버튼 알림 및 탐색 설정이 끝나고 설정저장 버튼을 누르면 최종 설정상태가 저장되고 이전 페이지로 이동
② 알림 설정 선택영역 운행 중 원하는 알림구간 또는 상황을 지정 < 청색-check / 적색/uncheck >
③ 탐색 설정 선택영역 경로 내에서 검색하고 싶은 기관을 지정 < 청색-check / 적색-uncheck >
1.1.1.4. 네비게이션 화면<그림26 네비게이션 화면 구성>    
구 분 기 능
① 위험 구간 알림 창 실시간 검사를 통해 설정해놓은 위험구간에 접근 시 운전자에게 미리 알려주는 알림창
② 교차로 알림 창 교차로에 일정거리 접근 시 방향과 남은 거리를 알려주는 알림창
③ 맵 사용자와 친구의 위치를 표시하여 같이 이동시 친구의 실시간 위치파악 가능 < 청색-운전자 / 적색-친구 >
④ 길 안내 화살표 인식한 차선, 도로의 정보를 비교하여 주행해야 할 차선에 화살표로 안내 옆 차선으로 가야 할 경우 화살표를 해당 차선으로 이동시켜 줌으로서 차선이동을 안내
⑤ 차로 정보 주행 중인 차로와 다른 차로에 대한 길 정보
<그림27 네비게이션 화면 구성2>
구 분 기 능
① 아래로 드래그 네비게이션 화면에서 목적지를 검색할 때 사용하는 모션 이벤트로써 별도의 버튼이나 터치구간을 정하여 주행 중 전방주시의 방해가 될 수 있는 상황을 없애기 위해 단말기의 전체화면에서 가능
② 두 번 연속 터치 주행 중 사진 찍기 기능을 위한 모션 이벤트로 ①과 마찬가지로 전체화면에서 사용가능
③ 메뉴 창 집 검색 선택 시 등록된 사용자의 집 주소로 바로 검색이 되며 즐겨찾기, 환경설정, 친구설정의 경우 <3.3.1.2 내 정보 설정> 의 사용법과 동일하며 설정 완료 시 자동으로 네비게이션 화면으로 이동   맵 사용을 하지 않는 경우와 시야에 방해가 되는 경우를 고려한 MAP ON/OFF 버튼
       1.2. 개발 환경 1.2.1. 개발언어 : C++, JAVA, XML, PHP 1.2.2. 사용 Tool
구 분 Host Android
컴파일러 및 툴 javac 1.6.0_17 adb 1.0.26, ddms MinGW(GCC) Compiler, Cygwin
O S Windows XP Android 2.2
라이브러리 JDK-1.6.0_23, Android-SDK_r06, Open CV 2.0, Android-NDK-r4-cystax
개 발 툴 Eclipse 3.5.2 , Eclipse 3.6.2
 1.2.3. 사용 시스템
구 분 내 용
호스트 Windows XP
보 드 galaxy S2 (Kernel 2.6.35.7 / Android Gingerbread 2.3.3)
1. 프로그램 설명   1.1. 파일구성 1.1.1. 메인 GUI
종 류 내 용
java       code Start.java "Well-Ving" 의 시작 액티비티. 처음 실행 시 계정등록 & 메인 메뉴 선택 기능
Info.java 사용자의 정보(친구관리,즐겨찾기 등)관리 액티비티. 세부 메뉴 선택 기능
HomeEdit.java 우리집 관리 액티비티. 사용자의 집 주소를 검색하여 등록 및 수정 기능
FriendsEdit.java 친구관리 액티비티로 친구들을 검색하여 등록 및 삭제, 친구의 ON/OFF상태 확인 기능
FavotirEdit.java 즐겨찾기 액티비티. 등록된 주소를 선택하여 바로 길 안내 기능으로 이동 & 삭제 기능
Album.java 앨범 관리 액티비티. 주행 중 찍은 사진들을 시간, 장소와 함께 보여주는 기능
Option.java 옵션 관리 액티비티. 주행 중 알림설정과 경로 내 검색설정 관리 기능
LineDetection.java 네비게이션 액티비티. 길 안내, 증강현실 검색, 구글맵 등 핵심 기능
Dialog.java 프로그램내에서 쓰이는 대화창으로 표시되는 액티비티. '예', '아니요' 선택 기능
Navi.java 주소 검색 액티비티. 검색하여 즐겨찾기로 등록 & 길 안내 기능으로 이동 기능
FileManager.java 프로그램내에서 쓰이는 파일 입출력 관리 클래스
FriendInfo.java 친구의 접속 및 위치정보를 객체화 하여 주행 중 친구 위치 확인 기능에서 사용하기 위한 클래스
UserData.java 사용자의 정보를 관리하는 클래스
CoverFlow.java 앨범 페이지에서 저장되어있는 이미지들을 Custom 갤러리 위젯으로 구현하는 클래스
Panel.java 앨범 페이지에서 사진의 장소와 저장된 날짜를 표시해주기 위한 슬라이드 창(패널) 관리 클래스
Photo.java 앨범 사진 한 장의 정보를 객체화 하여 사용하기 위한 클래스
ReflectView.java CoverFlow의 반사 이미지들을 구현하는 클래스
FriendsAdapter.java 친구 목록을 커스텀 리스트뷰에 띄워주기 위한 어댑터 클래스
FrItem.java 친구 목록 구현에서 친구의 정보를 객체화하여 FriendsAdapter에 넘겨주기 위한 클래스

종 류 내 용
xml       code main.xml "Well-Ving" 의 메인 화면
home_edit.xml "내정보" 첫 번째 탭 화면, '우리집' 설정화면
friends_edit.xml "내정보" 두 번째 탭 화면, '친구관리'설정화면
favorite_edit.xml "내정보" 세 번째 탭 화면, '즐겨찾기'설정화면
album.xml "내정보" 네 번째 탭 화면, '포토앨범'설정화면
option.xml 옵tus 설정 화면
join_dial.xml 최초 사용자 등록 시 대화창 UI.
add_list.xml 주소검색시 결과들이 커스텀 리스트뷰에 보여지기 위해 쓰이는 UI
dial.xml 상대방이 사용자를 친구추가 하였을 때 띄워지는 대화창 UI
friend_search_dial.xml 다른 사용자를 검색 하였을 때 띄워지는 대화창 UI
friends_list.xml 내 친구목록이 표시되는 커스텀 리스트뷰에 보여지기 위해 쓰이는 UI
home_dial.xml 주소검색 후 집으로 등록하기 위한 확인 대화창UI
map.xml 네비게이션 기능에서 맵이 그리기 위한 UI
navi.xml 네비게이션 기능에서 목적지를 검색하여 선택하기 위한 UI
window_center.xml window.xml 네비게이션 기능에서 경고 메세지 및 기타 알림을 보여주기 위한 UI
File sdcard/eon/album 포토앨범 기능에서 쓰이는 이미지 및 부가정보가 객체화되어 저장되는 폴더
sdcard/eon/album/ albumData.txt 현재 보유하고 있는 이미지들의 경로와 장소, 찍은 시간이 객체화되어 저장되는 파일
sdcard/eon/album/ photo 주행 중 찍은 이미지들이 저장되어 지는 폴더
sdcard/eon/userInfo/ favorit.txt 즐겨찾기에 등록 된 주소들이 저장되는 파일
sdcard/eon/userInfo/ friends.txt 친구도 등록 된 사용자들의 정보가 저장되는 파일
sdcard/eon/userInfo/ info.txt 사용자의 정보가 저장되어지는 파일
1.1.2. Open GL
종 류 내 용
java   code LineDetection.java glRenderer를 호출, 관리 하는 액티비티
glRenderer.java 실제로 그림을 그려주고, 그려지는 그림들의 동작 등을 설정하는 클래스
glLine.java 영상 처리된 데이터를 통해 화살표를 구현하는 클래스
glText.java 텍스처 맵핑을 이용하여 영상에 텍스트를 출력하는 클래스
Line2.java 교차로 좌ㆍ우회전시 곡선의 움직임을 구현하는 클래스
      1.1.3. 증강현실 검색
종 류 내 용
java       code AR_CalcRunnable.java 화면에 그려지는 아이콘의 좌표 계산
AR_Compass.java 나침반 화면의 아이콘 좌표 계산
AR_DataDownRunnable.java 시스템 설정으로부터 설정된 카테고리를 이용해 URL설정 후 데이터 다운로드 실행
AR_DataDownSetting.java 텍스처 맵핑을 이용하여 영상에 텍스트를 출력하는 클래스
AR_DataFileIO.java 사용자 위치 정보에 대한 파일 입출력
AR_DrawRunnable.java 아이콘이 그려지는 화면 갱신
AR_DrawView.java 계산된 건물의 좌표에 아이콘 생성
AR_ElementOfList.java 건물 각각의 데이터를 저장
AR_GpsPoint.java 프로그램이 실행되는 동안 변경되는 위치정보 저장/이용
AR_HeadOfDataList.java 각 카테고리에 해당하는 데이터들의 집합
AR_UserCategory.java 사용자가 설정한 카테고리 저장
AR_UserCategoryList.java 사용자가 설정한 카테고리를 리스트로 저장
AR_UserInformation.java 사용자위 위치정보와 센서값 저장
1.1.4. Open CV
종 류 내 용
java   code CameraPreview.java 카메라 설정 및 영상 데이터 전송.
CvProData.java 영상처리 후 축출된 데이터 저장.
CvRunnable.java 영상처리 진행상황 파악.
LineDetection.java 네비게이션 실행.
OpenCV.java JNI함수들의 선언 및 라이브러리 추가.
OpenCVInterface.java 영상처리 진행상황에 맞는 함수 호출.
cpp code LineDetection.cpp 실질적인 영상처리가 이루어지는 과정
      1.1.5. 통신부
종 류 내 용
java   code   (Client) ClientApp.java 각 Activity간 변수나 클래스를 공유 및 통신 Thread 관리
ClinetThread.java 주기마다 요청에 따른 웹서버의 정보를 받음
Network.java Client의 요청이 있을 시에만 웹서버에 정보나 수행 요청
DomParser.java ClientThread클래스에서 받은 xml 형식의 데이터를 알맞게 사용할 수 있도록 parsing
GPSRoute.java 정해놓은 경로 데이터를 저장하고 있는 클래스
php   code   (Server)   db_conn.php 웹서버의 MySQL와 PHP를 연결하기 위한 파일이다. 각 PHP파일에서 DB에 명령을 내릴 때 먼저 실행되어야 하는 파일
user.php MySQL에 사용자를 추가시킬 때 사용되는 파일이다. 사용자의 정보를 파라미터로 받아 query문을 생성하고 실행하는 함수
friend.php MySQL에 사용자의 친구를 추가시키거나 삭제, 검색할 때 사용되는 파일이다. 친구 정보를 받아 요청에 따라 수행한 후 결과 값을 반환
zone.php MySQL에 위험지역을 추가시키거나 삭제할 때 사용되는 파일. 위험지역의 GPS 좌표와 정보를 받아 query문을 생성하고 실행하는 함수
check_data.php DB에 사용자의 정보를 업데이트 하고 사용자가 필요로 하는 정보를 검색하여 반환해주는 함수. 접속 중인 친구정보나 위험지역 등의 정보를 사용자의 상황에 맞게 검색하여 반환
1.2. 함수별 기능   1.2.1. 메인 GUI 관련 함수
함수명 public UserData readUserData(File file)
내 용 File형의 매개변수를 받아 UserDdta형으로 반환한다. file에 저장 되어있는 사용자의 정보를 읽어 UserData를 초기화 한 후 반환
함수명 public void writeUserData(UserData user,File file)
내 용 UserData, File 형의 매개변수들을 받는다. file에 사용자의 정보를 저장
함수명 public ArrayList readUserFr(File file,ArrayList list, FrItem item)
내 용 File, ArrayList, FrItem 형의 매개변수들을 받아 ArrayList형으로 반환. file로부터 파일의 끝까지 반복하며 저장되어 있는 친구들의 정보를 읽어 리스트로 반환
함수명 public void writeFrData(ArrayList list, File file)
내 용 ArrayList,File형의 매개변수들을 받는다. 리스트화 되어있는 친구들의 정보를 file에 저장
함수명 public void readUserF(ArrayList addList, File file)
내 용 ArrayList, File형의 매개변수들을 받는다. file로부터 파일의 끝까지 반복하며 저장되어 있는 즐겨찾기 정보들을 읽어 리스트에 저장
함수명 public void writeUserF(AddPoint add, File file, int n)
내 용 AddPoint, File, int형의 매개변수들을 받는다. 즐겨찾기에 추가할 하나의 목적지정보를 file에 저장한다. n이 0이면 이전 파일에 이어서 저장, 1이면 이전 정보를 삭제하고 새로 저장
함수명 public ArrayList pRead(File file, Context con)
내 용 File,Context형의 매개변수들을 받고 ArrayList형 방환 file로부터 리스트상태로 저장되어있는 사진들의 정보를 읽어와 리스트로 반환
함수명 public void onTouchEvent(MotionEvent event)
내 용 터치 이벤트시 발생되는 내장함수 네비게이션 기능 중에 화면 터치를 인식하여 밑으로 드래그 시 검색기능, 두 번 터치 시에는 사진찍는 기능이 동작한다.

함수명 void ArSetting()
내 용 SharedPreferences를 통해 파일로 저장된 환경설정 값을 가져와 경로 내 검색할 기관들을 그려주기 위한 함수
함수명 public String getCurrentTime()
내 용 주행 중 사진찍기 기능에서 현재의 시간정보를 같이 저장하기 위해 시스템으로부터 시간정보를 얻어와 String형으로 반환
함수명 public void savePhoto()
내 용 사진찍기 기능에서 파일에 정보를 저장하는 함수 현재 장소,시간,사진파일이름,경도,위도값으로 사진하나의 정보를 가지를 객체를 생성하고 이전의 저장되어있던 객체리스트에 추가되어 파일에 저장 GPS가 안 잡힐 경우는 마지막 좌표 값으로 위치정보 사용
       1.2.2. Open GL 관련 함수
함수명 public void setGpsData(String left, String middle, String right, int num)
내 용 Activity내부 통신을 통해 서버에서 받아오는 텍스트의 내용을 입력하는 함수이다. String 타입의 매개변수들은 현재차선을 기준으로 각각 좌, 우와 현재 주행 중인 차선정보를 나타낸다. int 타입의 매개변수는 현재 운전자가 어느 차선을 이용해야 하는지 Renderer에 알려준다. 즉, 좌측 차선 변경, 우측 차선 변경, 현재차선 유지와 같은 지시를 위해 쓰이는 매개변수
함수명 public void draw(GL10 gl, int caseNum)
내 용 OpenGL ES에서 제공하는 draw함수를 오버로드한 함수이다. 매개변수인 caseNum에 따라 출력되는 텍스트의 숫자나 텍스트의 내용이 변한다.
함수명 private int leftLine( )
내 용 왼쪽 차선이 이어져있으면(실선) 0을 반환하고, 그렇지 않으면(점선) 1을 반환하는 함수이다.
함수명 private int rightLine( )
내 용 오른쪽 차선이 이어져있으면(실선) 0을 반환하고, 그렇지 않으면(점선) 1을 반환하는 함수이다.

함수명 public void TexCreate(GL10 gl)
내 용 onSurfaceCreated 함수가 실행될 때 호출되는 함수이다. 화살표가 출력되면 도로의 정보를 나타내는 적어도 하나의 텍스트를 출력해야 하기 때문에 텍스트 출력을 위해 텍스처를 생성시키는 함수이다.
함수명 public void setTexture(GL10 gl, String name)
내 용 텍스트의 크기, 색, 텍스트 박스의 배경색 등을 조절하는 함수이다. 매개변수 name을 통해 출력되는 텍스트의 내용을 조절할 수 있다. glRenderer 클래스에서 onDrawFrame함수에 의해 제어되며, 매번 프레임이 들어올 때마다 텍스처를 생성하면 heap 영역에서 제거가 되지 않는 현상이 발생하여 메모리 누수가 생기게 된다. 따라서 이를 막기 위해 TexCreate에서 분리시켜 불필요한 텍스처 생성을 막는다.
함수명 public int leftMovePoints()
내 용 운전 중 경로 안내에 의한 이동이 아닌 운전자가 임의로 차선을 변경할 때, 차선인식이 잘 되지 않아 화살표 정보가 잘못되는 경우가 있다. 이를 방지하기 위해서 운전자가 왼쪽으로 차선을 변경할 때, 현재 그려지는 화살표는 출력하지 않고, 차선 변경한다는 텍스트만 출력하게 하기 위한 함수이다. 차선변경 중일 때는 1, 그 이외에는 0을 반환한다.
함수명 public int rightMovePoints()
내 용 leftMovePoints()와 같은 기능이지만, 차선 변경을 오른쪽으로 할 때 쓰이는 함수이다. 운전자가 오른쪽으로 차선을 변경할 때, 현재 그려지는 화살표는 출력하지 않고, 차선 변경한다는 텍스트만 출력하게 하기 위한 함수이다. 차선변경 중일 때는 1, 그 이외에는 0을 반환한다.
1.2.3. 증강현실검색 및 Google맵 관련 함수   1.2.3.1. 증강현실
함수명 public void Move(int width, int height)
내 용 카테고리내의 모든 원소들의 화면상의 좌표를 계산해준다.
함수명 public StringBuilder GoogleSearch(AR_GpsPoint gpsPoint, String SearchWord)
내 용 현재 위치와 검색어를 매개변수로 전달받아 URL을 이용해 웹으로부터 데이터를 전송받는다.
함수명 public void JsonAnalyze(AR_GpsPoint gpsPoint)
내 용 웹으로부터 받은 주변 건물들에 대한 데이터를 JSON파싱을 통해 정보를 축출하고 연결 리스트에 저장한다.
함수명 public void Change(double lat, double lng)
내 용 사용자의 현재 위치 데이터를 매개변수로 받아 북을 중심으로한 시계방향으로의 각도 데이터와 사용자와의 거리 데이터로 변환하여 저장한다.
함수명 public static AR_ElementOfList Create(double lat, double lng, String title, String Address, String PhoneNumber)
내 용 JSON파싱으로부터 축출한 건물의 좌표, 이름, 주소, 전화번호를 객체에 저장 후 반환. 이 객체 데이터를 이용하여 증강현실을 수행한다.
함수명 public void setOverLay(int n)
내 용 네비게이션 실행 후 특정 포인트에 접근 시 포인트에 해당하여 주변 건물들의 데이터를 화면에 표시해 줄 경우 호출. 매개변수로 해당 포인트의 숫자를 전달한다.
      1.2.3.2. 구글맵
함수명 public void setMapZoom(Location loc)
내 용 GPS 로부터 위치정보를 가져와 구글맵에 그려주고 구글맵의 zoom 을 조절하는 함수로써 자신의 위치를 맵의 중앙에 위치시키고 맵상에 자신의 위치를 표시해준다. 친구 위치 요청 시에는 서버로부터 받은 친구 위치와 나의 위치를 맵에 같이 표시해주고 친구위치와 내 위치의 중앙점을 맵의 중앙점으로 고정시킨다.
1.2.4. Open CV 관련 함수
함수명 public void processing()
내 용 쓰레드를 생성하여 이미지의 영상처리 과정을 진행한다. 반환된 객체는 리스트에 저장하여 그래픽 처리를 할 수 있도록 한다.
함수명 public void ByteToImage()
내 용 쓰레드를 생성하여 카메라 프리뷰 영상 데이터를 C로 제작된 함수로 전송한다. 함수가 호출되는 해당 프레임만을 호출한다.
함수명 public static native int ByteToImage(byte[] jpegData, int width, int height)
내 용 JNI를 이용해 구현한 함수로서 카메라로부터 인가되는 영상 데이터의 포맷을 YUV에서 RGB로 변환하며, 기본적인 전처리 과정이 이루어진다.
함수명 public static native int GetCurrentState()
내 용 JNI를 이용해 구현한 함수로서 영상처리 과정을 단계별로 나누어 현재 진행상황을 판단한다. 또한 상황에 맞는 값을 반환하여 그에 따른 동작이 이루어지게 한다.
함수명 public static native int DeleteAllOfData()
내 용 JNI를 이용해 구현한 함수로서 프로그램 종료 시 메모리 누수 현상을 방지하기 위해 힙영역에 존재하는 할당된 메모리 공간을 해제한다.
함수명 public static native CvProData ImageProcessing()
내 용 JNI를 이용해 구현한 함수로서 이미지 데이터를 이용하여 차선 인식을 위한 영상처리를 수행하는 함수다. 구해진 차선의 좌표, 좌우 차선의 존재유무, 현재 차량의 진행방향 등을 JAVA의 객체를 이용하여 저장 후 반환한다.
함수명 public static native byte[] YUVtoRGB(byte[] jpegData, int width, int height)
내 용 JNI를 이용해 구현한 함수로서 카메라로부터 인가되는 영상 데이터의 영상포맷을 YUV에서 RGB로 변형해준다. 이는 OpenCV에서 사용하기 편하게 하기 위함이다.
1.2.5. 통신부 관련 함수
함수명 private String sendData(String _myPhone, String _fdPhone, double _x, double _y, String opt)
내 용 웹서버로 요청을 전달하는 함수이다. HttpClient를 이용하여 각 인자들을 파라미터로 전달하여 Post형식으로 웹서버에 요청하게 된다. makeHttpPost 함수를 이용하여 Post형식을 만든다. 웹서버의 결과 값을 String 형태로 반환 받는다.
함수명 private HttpPost makeHttpPost(String $phone, String $friend, String $GPS_x, String $GPS_y, String $option, String $url)
내 용 Post형식으로 웹서버로 보내질 요청 형식을 만드는 함수이다. 인자로 받은 $url로 HttpPost를 연결하고 Vector를 이용하여 각 파라미터를 형식에 추가시키는 함수이다.
함수명 private HttpEntity makeEntity( Vector $nameValue )
내 용 makeHttpPost에서 만든 Vector를 포맷에 맞게 인코딩 하는 함수이다.
함수명 public String userInsert(String name, String phone)
내 용 웹서버의 DB에 사용자 추가를 요청하는 함수이다. HttpClient를 이용하여 각 인자들을 파라미터로 전달하여 Post형식으로 웹서버에 요청하게 된다. makeHttpPost 함수를 이용하여 Post형식을 만든다. 웹서버의 결과 값을 String 형태로 반환 받는다.
함수명 public String friendInsertDelete(String myPhone, String friendPhone, String requestType)
내 용 requestType에 따라 웹서버의 DB에 요청하는 함수이다. HttpClient를 이용하여 각 인자들을 파라미터로 전달하여 Post형식으로 웹서버에 요청하게 된다. makeHttpPost 함수를 이용하여 Post형식을 만든다. 웹서버의 결과 값을 String 형태로 반환 받는다.
함수명 public void Parsing(String xml)
내 용 웹서버로부터 반환 받은 xml 형식의 데이터를 사용하기 위해 parsing하는 함수이다. xml 형식의 데이터를 요청에 맞게 분류하여 parsing 한다.
1.3. 주요 함수의 흐름도    1.3.1. 메인 GUI

 

   

      1.3.2. Open GL

1.3.3. 증강현실 검색

      1.3.4. Open CV

1.3.5. 통신 

1.4. 기술적 차별성  요즘 등장하는 증강현실을 이용한 네비게이션을 살펴보면 영상처리 기반의 증강현실이 아닌 맵의 정보만을 이용하여 대략적인 경로를 길 위에 표시해 주는 정도의 기술이대부분이다. 그렇기 때문에 차량의 방향이 도로상의 방향과 약간이라도 틀어질 경우 오차가 생기고 그런 문제 때문에 도로위에 표현 해주기보단 허공에 길 안내표시를 해줌으로써 사용자의 입장에서 크게 오차를 느끼지 못하도록 하는 방식을 사용하기도 하였다. 반면 "WELL-VING"은 차선인식을 통해 보다 더 정확하게 도로를 인식하여 도로위에 안내표시를 해줌으로써 실제의 영상과 만들어낸 이미지의 자연스러운 조화를 구현한 완전한 증강현실이라 할 수 있다.  현재 몇몇의 자동차들에 차선이탈경고와 같은 시스템이 장착되어 나오기도 하고 이전의 차선검출을 이용한 프로그램들이 존재 하였지만 차선의 위치를 찾아낸다고 하기보다는 미리 예측된 구역에서의 차선의 유무를 판별하는 정도로써 ‘‘yes‘‘ or ‘‘no‘‘ 식의 검출 방식 이었다. 이에 "WELL_VING" 프로그램은 차선검출 방식에서의 속도를 현저하게 줄임으로써 자유영역에서의 검출이 가능하게 하였고, 차선검출에서 예측좌표의 우선검사 알고리즘 통해 더욱 빠른 속도의 차선검출을 구현하였다.  기존의 차선검출에서의 대표적인 방식은 잡음을 없애고 외곽선을 검출하기위한 미분 작업 후 동일 직선상의 점들을 한점으로 모아 차선임을 인지하는 Hought변환 과정이었다. 기존의 방식과 새로운 방식을 모두 사용하여 다음과 같은 결과를 얻어냈다.  <표2 기존방식과 새로운 방식 비교표>
  기존 검출방식의 WELL_VING 새로운 검출방식의 WELL_VING
1Frame 처리 속도 1.2 sec 0.14 sec
외곽선 검출 O X
Hought변환 O X
직선길 O(94%) O(91%)
커브길 X O(84%)
※ Device : Samsung Galaxy S2※ 정확도는 영상마다 100프레임동안 차선 검출의 유무로 설정  위 표를 보면 알 수 있듯이 외곽선 검출 과정과 Hought변환이 배제됨에 따라 처리 속도가 감소하는 것을 볼 수 있으며, 실제 테스트를 통해 외곽선검출과정의 미분작업이 영상처리에서 엄청난 양의 연산으로 인하여 많은 과부하가 있음을 알 수 있었고 현 최고 스펙의 단말기에서도 실시간 영상처리가 필요한 우리의 프로그램에서 사용하지 못할 속도를 보였다.2. 응용 분야   2.1. HUD/투명 디스플레이와의 접목<그림28 전투기와 자동차의 전면유리 활용 사례> <그림 30>은 현재 전투기와 자동차에서 HUD(Head Up Display)기술을 사용하여 전면유리에 정보를 나타내 주는 그림이다. 이렇게 전면 유리를 이용한다면 차량의 계기판, 오디오 시스템의 디스플레이화면, 네비게이션 화면 모두 표현가능하고 그에 따라 차량의 내부공간이 넓어질 것이다. 또한 현재 개발되고 있는 투명 디스플레이의 강도를 보완하여 차량의 전면유리로 사용한다면 요소들의 크기나 위치역시 사용자의 입맛에 맞게 설정이 가능하며 켰다 껐다할수 있는 기능역시 가능 할 것이다.    <그림29 "Well-Ving" 프로그램 접목 가상이미지> <그림 31>과 같이 Well-Ving 프로그램을 전면 디스플레이 기술에 접목시킨다면 굳이 길을 찾기 위해 다른 화면을 볼 필요가 없고 별도의 단말기나 화면의 분할영역 없이 전방만 보면서 운행이 가능 할 것이다.2.2. 무인 운전 시스템 3g/4g를 이용한 신호체계와의 실시간통신, 또는 단말기에서 신호등을 인식하는 방법으로 꼭 운전자가 없더라도 자동차 이용이 가능하며 장애인이나 노인과 같은 현재 운전이 불가능한 사람들에게 큰 도움이 될 것이고, 더불어 음주운전이나 초보운전, 난폭운전, 신호위반 등으로 인한 사고는 줄어들 것이다. 또한 많은 운전자들이 겪는 주차에서의 어려움이 자동제어시스템으로 해결되고 주차라인에 정확히 주차되어 다른 운전자들에게 피해를 줄 일도 없어진다. 대중교통에 이용이 된다면 어떨까? 우리나라에서 가장 험한 운전자하면 떠오르는 것이 택시기사, 버스기사 이다. 안전 운전은 물론 버스는 정확한 배차간격이 가능해지고 상황에 따라 현재의 친구위치 보기 기능처럼 앞의 차를 등록해놓으면 실시간으로 거리를 비교한 속도가 제어가 가능하다. 이렇게 무인운전이 가능해진다면 운전면허 도로주행과 같은 사소하지만 자칫하면 위험한 상황이 될 수 있는 문제들의 해결부터 육로를 사용한 유통업이 완전 자동화 되어 산업발전에 기여하게 되는 결과까지 기대할 수 있다.      2.3. 관광지 및 시설 안내 시스템 본 시스템을 자동차에만 국한하지 않고 실외 관광지나 시설에서 바닥에 단말기에서 인식 가능한 표식을 이용한 영상 인식으로 사용자들이 좀 더 편리하고 흥미를 가질 수 있는 안내 시스템을 만들 수 있을 것이다. 예를 들어 놀이 공원에서 자신이 타고 싶은 놀이기구나 가보고 싶은 장소를 고른 후 실제 영상으로 길안내를 받을 수 있으며 또한 증강현실 안내를 이용한 게임이나 이벤트 등을 통해 이동 중에도 관람객들에게 흥미를 줄 수 있다. 더불어 가족이나 친구 등의 일행을 단말기에 친구로 등록하여 가족들이나 친구들의 위치를 확인할 수 있고, 뿐만 아니라 미아방지 및 미아 찾기에도 효과가 있을 것이다.3. 6. 기타    3.1. 안드로이드 보드 스펙
개발 보드
   
갤럭시 S2
CPU  1.2GHz dual-core Samsung Exynos
Memory  16/32GB + microSD
Camera  8.0-Mega Pixel Camera AF with LED Flash
Display  4.27"WVGA (480×800) Super AMOLED PLUS
Network  HSPA+ (21Mbps)  Wi-Fi : 802.11.a/b/g/n DLNA
System Software  Kernel 2.6.35.7, Android Gingerbread 2.3.3




[그림 및 함수도는 PDF 참고]
이 기사를 공유합니다
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지