서 론
사물인터넷 분야에서 사물에 위치추적 센서를 부착하여 수집된 위치정보를 기반으로 서비스를 지원하는 어플리케이션이 여러 분야에서 개발 및 활용되고 있으며 관련 산업이 급성장하고 있다. 특히, 위치추적 센서로부터 수집되는 다양한 데이터는 유무선 통신기술과 접목되어 일상 및 취미 생활에 관련된 제품 및 서비스 산업이 다양한 용도로 활용되고 있으며, 인간의 삶 편리성 향상에 크게 기여하고 있다. IoT 분야의 3대 핵심기술중 하나인 센싱기술은 전통적인 온도센서, 위치센서, 모션센서, 영상센서 등을 활용하여 사물과 주위 환경으로부터 정보를 얻을 수 있는 물리적 센서를 포함하여 응용 특성을 개선하기 위해 표준화된 인터페이스와 정보처리 능력을 내장한 스마트 센서로 발전하고 있으며, 센싱한 데이터로부터 특정 정보를 추출하는 가상 센싱 기술, 다중센서 기술을 활용한 고차원적인 정보를 추출분야까지 응용범위가 넓어지고 있다[1,2].
시뮬레이션 게임(simulation game)은 현실상황을 비디오 게임으로 표현하여 초창기에는 군사 훈련용 게임에 응용되었으나 점차 일반적인 상황을 컴퓨터로 표현함에 따라 응용범위가 넓어져서 전략, 비행, 레이싱, 생활, 등의 다양한 분야에 적용되고 있다. 특히, 최근에는 가상현실, 증강현실과 밀접하게 접목하여 보다 실제 상황과 유사한 다양한 시뮬레이션 게임이 유무선 인터넷 환경에서 폭넓게 적용되고 있다[3].
운전에 대한 두려움은 경력이 많은 운전자, 운전면허증 취득 초보자, 운전면허증 미취득자들 까지 대부분의 운전자들이 가지고 있다. 운전에 필요한 주차능력, 주행중 방향전환은 운전자들에게 어려움의 대상이며 주차는 다양한 넓이의 공간과 각기 다른 각도, 여러 가지 상황에 따라서 그 상황에 맞는 주차방법을 시도해야 하기때문에 정밀하고도 극복해야할 능력이다.
본 논문은 가상공간에서 3축 자이로스코프 센서를 부착한 자동차 핸들을 움직여서 자동차 주행과 주차능력을 조작해 볼 수 있도록 위치 및 속도 정보를 센싱한 후 가상공간에서 가상자동차의 전진 및 후진, 방향 조종, 기어 조작을 통한 가속 및 감속을 실제 상황과 근접하게 운전하도록 하는 시뮬레이터를 개발하였다.
본 논문의 구성은 제2장에서 연구의 기반이 되는 내용과 관련연구를 서술한 후 제3장에서 실제 가상 주차 시뮬레이터 구현 및 결과에 대해 기술한다. 마지막으로 제4장에서는 결론과 향후 연구내용에 대해 기술하였다.
2. 관련 연구
2.1 자동차 주행 및 주차 시뮬레이션 게임
유로트럭 시뮬레이션2 게임은 Fig. 1과 같이 차량운전 시뮬레이션 게임으로 윈도우, 리눅스, iOS 환경에서 유럽을 배경으로 트레일러 트럭을 운전하면서 유럽 곳곳을 오가며 화물을 배달하면서 도로주행, 배달 등의 역할을 수행한다[4]. 주차의 달인 게임은 Fig. 2와 같이 모바일 환경에서 실행가능한 주차 시뮬레이션으로서 스마트폰 화면터치 동작으로 가상 자동차를 운전하여 주차 능력을 시뮬레이션 할 수 있다[5]. 본 논문에서는 가상 자동차를 주행하고 주차하기 위해 화면터치가 아닌 직접 핸들에 3축 자이로스코프 센서를 부착하여 보다 정확한 위치, 속도 정보 확보하며 3차원 가상 주행도로, 주차장을 실제 환경과 비슷하게 설계하고 이를 언리얼 엔진[6]과 블루프린트[7]를 통해 구현하였다.
Fig. 1.Eurotruck Simulator2.
Fig. 2.Dr. Parking4.
2.2 언리얼 엔진 및 블루프린트
언리얼 엔진[7]은 게임 개발환경을 제공하는 통합형 게임 엔진으로서 지속적인 업데이트, 다양한 기술지원, 언리얼 개발자 간의 네트워크 지원, 다양한 개발 도구들을 제공하는 특징을 가지고 있다. 특히, 게임 개발자에게는 엔진의 구성이 유연해서 여러 기술을 조합하고 확장하기 좋은 구조를 가지고 있으며 엔진이 지속적으로 개량되면서 기술과 개발 도구도 발전하고 있다. 언리얼 엔진은 언리얼 스크립트라는 내부 스크립트 언어를 통해 엔진의 여러 기능을 연동할 수 있으며 게임의 스크립트 언어로도 사용할 수 있다. 게임 스크립트 언어로 루아, 자바, C# 등 다른 언어를 적용하거나 연동하는 것이 가능하며 필요에 따라 어셈블리어 같은 언어도 적용할 수 있다. 엔진과 도구는 거의 C++로 작성되었지만 다른 언어로 이식이 가능하다.
블루프린트는 코딩을 하지 않는다는 것만 다를뿐 스크립트를 만드는 논리는 프로그래밍 언어로 작성하는 것과 같다. 직관적인 노드 기반 인터페이스를 통해 새로운 엑터 유형과 스크립트 레벨 이벤트를 만들 수 있는 특수한 위젯으로 디자이너나 게임플레이 프로그래머도 코드 작성없이 언리얼 에디터에서 빠르게 게임플레이를 만들고 반복처리 할 수 있는 도구이다. 블루프린트는 순서도처럼 노드를 연결해서 프로그램의 논리를 표현하므로 전체 프로그램의 흐름을 쉽게 이해할 수 있으며 프로그램의 논리가 복잡해지면 커다란 그래프를 작성해야 하는 부담이 단점으로 지적되고 있다. 또한 프로그래머가 직접 코디하는 방식과 달리 최적화가 상대적으로 잘되지 않아 실행속도 느린 단점을 가지고 있다[9]. 블루프린트는 레벨 블루프린트, 클래스 블루프린트, 블루프린트 매크로, 블루프린트 인터페이스로 구분된다. 레벨 블루프린트는 게임의 모든 레벨(씬)에 하나씩 할당되어 있는 블루프린트로서 레벨에 설치된 각종 액터와 상호작용을 통해 게임을 진행한다. 클래스 블루프린트 씬에 설치할 각종 액터, 사운드, 카메라, 파티클 등에서 발생하는 이벤트와, 움직이는 액터의 동작 등을 처리하기 위해 사용한다. 클래스 블루프린트는 액터에 하나씩 할당할 수 있다. 블루프린트가 할당된 액터를 블루프린트 액터라고 하며, 블루프린트 액터를 씬에 설치하면 블루프린트에 설정한 절차대로 동작한다. 블루프린트 매크로는 반복되는 일련의 절차를 별로의 그래프로 만들어 둔 것으로, 매크로 라이브러리는 블루프린트 매크로를 모아둔 것이다. 매크로 라이브러리에 수록된 매크로는 각각의 블루프린트에 추가할 수 있다. 블루프린트 인터페이스는 다른 블루프린트와 데이터를 공유하고 이벤트를 발생하기 위해 작성한 블루프린트로서 함수 이름만 저장하고 있다.
본 논문에서 주차 시뮬레이션 게임은 언리얼 엔진4의 블루프린트를 사용해서 구현하였다. C++로 개발되어 배포되고 있는 블루프린트를 이용하여 언리얼 엔진4의 위젯으로 함수형에 맞게 선을 연결하여 편리하게 개발을 완료하였다.
3. 시스템 설계
3.1 3축 센서와 언리얼 엔진4 연동
본 논문에서는 가상 자동차의 위치, 속도 정보를 센싱하기 위해 3축 자이로스코프 센서인 EBIMU-9DOFV2[10] 센서를 사용하였다. 3축 자이로스코프 센서를 컴퓨터의 USB포트에 연결시켜 센서로부터 하이퍼터미널을 통해 Fig. 3과 같이 X, Y, Z축 위치와 가속도를 받아 가상 자동차의 주행 위치와 속도를 표현하는데 적용하였다.
Fig. 3.Roll, Pitch, Yaw, Speed Value from 3-axis Sensor.
언리얼 엔진4와 3축 센서를 연동시키기 위해 Fig. 4와 같은 과정을 통해 UE4duino라는 언리얼 엔진4의 아두이노와 연동이 가능하도록 설계된 플러그인을 적용했다. 플러그인에 언리얼 엔진4에서 사용할 수 있도록 제공한 시리얼 포트 값을 읽어 들이는 함수가 설정되어 있으며, UE4duino 플러그인을 설치하여 언리얼 엔진4에 추가시키면 UE4duino에 포함되어 있는 함수를 언리얼 엔진4의 블루프린트 안에서 사용할 수 있다. 함수중에서 OpenSerial이라는 함수를 통해 게임시작과 동시에 자동으로 UE4duino의 함수에 설정해놓은 USB포트를 통해 포트를 읽고 1초당 불연속 상태의 데이터 전송의 수를 나타내는 Baudrate를 설정하여 센서에서 전해져 오는 값을 받기 위한 준비를 한다.
Fig. 4.Interlock of Gyroscope Sensor and Unreal Engine4.
3.2 앞바퀴 회전조작방법
USB 포트를 통해 3축 센서의 Roll, Pitch, Yaw, 속도값을 UE4duino 플러그인의 함수인 Is Serial Port Open 함수와 Read Serial 함수를 통해 읽어 들이고 Tick 이벤트 함수를 통해서 지속적으로 값을 읽어 들인다. 읽어 들인 값은 벡터 값으로 저장되어지기 때문에 벡터형태의 값을 Split함수를 사용하여 3개의 스트링 형태로 나눈다. 나누어진 스트링 형태의 값들을 실수형으로 변환시켜 Roll, Pitch, Yaw, 속도 값을 저장한다. 이 과정에서 가상 자동차 바퀴의 회전을 위해서 Yaw 값을 받아야 하지만 센서를 핸들 Z축 방향으로 회전시켜야하기 때문에 회전에 필요한 값인 Roll 값을 이용하여 자동차 앞바퀴의 회전을 조종시킨다. 이때 Roll 값은 -180∼180까지의 값을 받는다. 언리얼 엔진4에서 제공하는 Vehicle SteeringInput 함수는 플러스일 경우에 값의 크기에 따라 자동차를 우회전시키고 마이너스일 경우에는 좌회전시킨다. 값에 따라서 각의 크기가 결정되는데 이때는 FrontWheel이라는 블루프린트에 저장되어있는 앞바퀴의 최대 회전각도에 따라 조절해야한다. 각도에 따라서 들어오는 Roll 값으로 지정해야하는 값이 달라지기 때문이다. 본 논문을 위해서 실제 자동차와 같은 각도로 움직이기 위하여 최대 각도를 Fig. 5와 같이 55도로 설정하였다.
Fig. 5.FrontWheel Blueprint.
Fig. 6.Blueprint for Vehicles Rotation.
센서로부터 센싱되는 Rol l값은 최대 180, 최소 -180에 근접한 각도까지 들어오며 센싱되는 값들은 아주 작은 움직임으로도 값이 변한다. 이런 미세한 반응을 잡아주기 위하여 오차범위를 설정한다. 오차범위는 10 단위로 끊어지며 직진을 위해서 -10부터 10까지의 값과 각도의 변화를 0으로 지정한다. 오차범위를 설정할 때 가장 중요한 점은 계속해서 변동되어 들어오는 Roll 값의 첫 번째 값을 저장시키는 것이다. 핸들에 부착한 센서의 위치를 원점으로 잡아두고 이를 좀 더 보완하기위해 첫 번째 Roll값을 지정해둔다. Tick 이벤트를 통해 지속적으로 들어오는 Roll 값에서 저장된 첫 번째 Roll 값만큼을 감소시킨다. 감소된 값에서 10씩 오차범위를 두면서 그 범위 안에 있을 때마다 VehicleSteeringInput함수로 값이 들어가 회전각을 다르게 만든다.
3.3 마우스 조작방법
기어 컨트롤은 실제 차량의 기어 스틱과 비슷한 역할을 수행하기 위해서 마우스로 설정하였다. 이때 마우스의 현재 좌표값을 활용한다. 마우스의 X, Y좌표를 사용하여 Reverse, Drive, Parking 등의 기어로 활용한다. 마우스의 좌표는 고정시 항상 (0,0)의 좌표값을 가진다는 것을 활용하여 마우스를 위로 올려 Y축의 값을 플러스로 만들었을 때에는 기어를 Drive로 변경시켜 진행방향을 앞으로 변경시킨다. Vehicle Movement라는 루트 컴포넌트에서 최대 RPM을 설정 할 수 있도록 구성되어있다. 기어가 Drive일 경우에는 최대 RPM의 값에 따라서 속도가 달라진다. RPM값이 높아지면 높아질수록 최대 속도가 높아지는데 주차를 위해 최대 RPM을 일반 차량보다 낮게 잡는다. Y축의 값이 마이너스가 됐을 때에는 기어를 Reverse로 변경시켜 후진이 가능하도록 만든다. Reverse 기어로 전환 되었을 경우 Drive 기어의 1/2속도로 설정하였다. X축의 값을 플러스로 만들 경우 Parking기능이 수행되도록 한다. Parking 기어로 변경 시에는 현재 기어를 0으로 두어 차량의 움직임을 제한한다.
마우스의 왼쪽버튼을 지속적으로 누르고 있으면 브레이크 기능이 실행되면서 점차적으로 속도가 감소한다. 감소율은 VehicleMovement를 통해서 제어할 수 있으며 마우스 왼쪽버튼이 비활성화 될 경우에는 브레이크가 풀리면서 서서히 기존 속도로 돌아간다. 마우스의 오른쪽 버튼을 지속적으로 누르고 있으면 왼쪽과는 반대로 자동차 엑셀과 같은 기능을 구현한다. Drive시 오른쪽 버튼을 누르면 최대속도의 1/2만큼 속도가 증가 되도록 설정하였다.
마우스의 휠을 올리면 시점이 변경된다. 시점은 1인칭 시점과 3인칭 시점으로 번갈아가며 변경된다. 1인칭 시점에서는 현재 기어와 속도 그리고 Back Mirror 기능과 SideMirror 기능을 추가하였다. 실제 차량으로 운전과 주차시에 필요한 BackMirror와 SideMirror를 1인칭 시점일 경우 화면 상단의 중앙에 위치 시켰다. 거울의 경우 반사되어 보이는 모습은 실제와 반대의 모습을 보이기 때문에 각 Mirror들마다 가로의 값을 1-x값으로 변경하여 반전시켜 실제 차량의 Mirror와 같은 시점으로 구현하였다. 3인칭 시점일 경우 현재 기어와 속도를 확인 할 수 있으며 시점은 일반 레이싱처럼 차량의 뒤편에 있는 것이 아닌 공중에서 차량을 관찰 할 수 있도록 설정해 두었다. 주차 시에 차량의 위치파악이 가능하다.
Fig. 7.Gear Blueprint using Mouse.
3.4 주행 및 주차 시뮬레이션
본 논문에서는 [11] 연구 결과에서 발견된 주행의 문제점과 정확성을 개선하여 Fig. 8과 같은 가상 주행도로를 설정하고 실제로 마우스 및 키보드 정지, 정속주행, 감속주행, 가속주행의 안정적인 실험결과를 확인하였다.
Fig. 8.Experimetal Results of Virtual Driving.
또한 Fig. 9[좌] 같은 주차코스가 있는 자동차 시험장을 구축하고 실제로 다양한 주차 실험을 안정적으로 진행한 결과를 Fig. 9[우]와 같이 확인하였다.
Fig. 9.Experimetal Results of Parking Lot Map and Parking Simulation.
마지막으로, 주차 못지않게 주행속도 및 위치의 자동차 주행 위치의 정확성을 검증하기 위해 좌회전 및 우회전이 원활하게 주행되는 과정을 Fig. 10과 안정적인 좌회전 및 우회전을 통해 확인하였다.
Fig. 10.Experimetal Results of Left Turn(L) and Right Turn(R).
4. 결 론
본 논문에서는 경력자, 초보자 그리고 운전면허 미 취득자 까지 모든 운전자들이 가지고 있는 운전과 주차에 대한 두려움을 극복시킴과 동시에 실제 운전과 비슷한 느낌으로 가정에서 가상으로 시뮬레이션을 할 수 있도록 제작하였다. 실제 자동차를 소유하고 있지 않아도 연습 해 볼 수 있다. 자동차를 이용한 게임은 게임의 몰입도가 높은 게임이다. 운전과 주차에 대한 강의나 이론을 가지고 머릿속에서 이미지를 상상시키는 방법보다 실제와 비슷한 시뮬레이션을 통해서 효과적인 운전과 주차 연습이 된다. 또한 실제 자동차를 운전하여 연습하는 것보다 부담감은 줄어들고 간단하고 가벼운 마음으로 연습을 할 수 있을것이다. 논문의 취지에 맞게 가상의 게임으로 누구든지 쉽게 운전과 주차를 플레이 해보고 실제 운전에서 좀 더 안전하고 향상 된 실력을 느껴 볼 수 있는 효과도 기대된다.
References
- L. Atzori, A. Iera, and G. Morabito, "The Internet of Things: A Survey," Computer Networks, Elsevier, New York, 2010.
- D. K. Lee, D. J. Choi, “ Implementation of Zigbee-based Publish/Subscribe System for M2M/IoT Services,” Journal of Korea Multimedia Society, Vol. 17, No. 12, pp. 1461-1472, 2014. https://doi.org/10.9717/kmms.2014.17.12.1461
- A.J. Faria and W.J. Wellington, “A Survey of Simulation Game Users, Former-Users, and Never-Users,” Simulation Gaming, Vol. 35, No. 2, pp. 178-207, 2004. https://doi.org/10.1177/1046878104263543
- Eurotruck Simulator2: http://www.eurotrucksimulator2.com/ (accessed Jun., 22, 2016).
- Dr. Parking4: http://www.hungryapp.co.kr/web/drparking4 (accessed Jun., 22, 2016).
- Unreal Engine: https://docs.unrealengine.com/latest/KOR/index.html (accessed Jun., 22, 2016).
- D. Lee, W. Yoo, Unreal4: Blueprint Game Development, Acorn Publisher, South Korea, 2014.
- Software Blueprint: https://en.wikipedia.org/wiki/Software_blueprint (accessed Jun., 22, 2016).
- D. Trenholme and S.P. Smith, “Computer Game Engines for Developing First-person Virtual Environments,” Virtual Reality, Vol. 12, Issue 3, pp. 181-187, 2008. https://doi.org/10.1007/s10055-008-0092-z
- E2Box: http://www.e2box.co.kr (accessed Jun., 22, 2016).
- K. Han and K. Ko, “Parking Simulation Game using 3-axis Gyrosensor,” Proceeding of the Fall Conference of the Korea Multimedia Society, Vol. 18, No. 2, pp. 847-848. 2015.
Cited by
- 드론 비행 조종을 위한 자이로센서 데이터 기계학습 모델 vol.20, pp.6, 2016, https://doi.org/10.9717/kmms.2017.20.6.927
- 자율주행자동차 4-5단계의 수용의도에 미치는 영향요인에 관한 연구 vol.23, pp.9, 2020, https://doi.org/10.9717/kmms.2020.23.9.1219