Windows 8에서의 센서 지원

최근 센서 기술의 발전으로 PC의 사용자 경험도 빠르게 발전 및 진화하고 있습니다. 주변 조명, 움직임, 사람의 접근 및 위치 변화에 대한 반응은 이제 그리 특별하 지 않은 컴퓨팅 경험의 필수 요소로 자리 잡고 있습니다. 빛이 계속 바뀌는 실내에서 디스플레이 밝기를 조정하기 위한 주변 광원 센서 같은 것은 단순하지만 데스크톱 PC 에서도 일반화될 가능성이 많습니다. 물론, 센서에 따라서는 일부 사용자에게 불편을 끼칠 수 있는 요소나 잘못 사용할 여지도 있기 때문에 이러한 주변기기의 사용을 완벽 하게 통제할 수 있는 환경이 필요합니다. Windows 8에서의 센서 지원에 대해 자세히 알아보는 이번 글은 장치 연결 팀에서 PM으로 근무하는 Gavin Gear가 작성했습니다.
- Steven


센서에 관해 우선적으로 고려했던 내용은 시스템 수준에서 이러한 센서를 Windows 8에 적용하는 방식과 배터리 사용 시간을 줄이면서 PC를 환경에 적응시키는 것이었 습니다.

자동 밝기 조정

첫 번째 시스템 기능은 자동 디스플레이 밝기 조정으로, 간단히 '자동 밝기 조정'이라 부릅니다. 이 기능은 주변 광원 센서(ALS)를 이용하여 Windows 7에서 처음 도입되었으며 슬레이트, 컨버터블 및 랩톱과 같은 형태의 모바일 기기가 주요 적용 대상입니다. 현재 디스플레이 패널이 수년 전에 일반적 강도의 약 두 배 수준에 해당하는 밝기를 지원함에 따라 이 기능은 이전 어느 때보다도 중요해졌습니다. 변화하는 주변광 조건에 따라 화면 밝기를 동적으로 조절함으로써 눈의 피로를 최적으로 덜어주고 어두 운 환경에서 화면을 어둡게 하여 배터리 소모를 줄일 수 있습니다.

화면이 반사되기는 하지만 보는 것은 가능 태블릿 표면의 빛 반사로 인해 화면이 거의 보이지 않음

자동 밝기 조정 기능이 있는 쪽(왼쪽)과 없는 쪽(오른쪽)의 태블릿 PC를 밝은 야외에서 사용했을 때의 비교

비교 결과, 자동 밝기 조정 기능이 있으면 태블릿이 밝은 환경에 노출되었을 때 화면이 자동으로 더 밝아져 화면의 내용이 좀 더 선명하게 잘 보인다는 사실을 알 수 있습니다. 해가 비치는 실내에서 데스크톱 PC를 사용하는 사용자라면 계절에 따라 하루 중 특정 시간대에 이러한 상황이 벌어질 수 있음을 알고 있을 것입니다.

자동 화면 회전

스마트폰을 비롯한 많은 휴대용 기기에서 일반화된 기능으로, 장치를 회전시키면 그래픽 디스플레이도 함께 회전하여 새로운 방향으로 배열되고 종횡비도 그에 따라 조정 됩니다. 장치가 기본 방향을 인지할 수 있는 것은 가속도계가 있기 때문입니다. 화면을 자동으로 회전시킴으로써 사용자는 소프트웨어 컨트롤이나 하드웨어 버튼을 누를 필요 없이 슬레이트나 컨버터블 등의 장치를 보다 자연스럽고 직관적으로 사용할 수 있습니다.

태블릿 PC를 가로 방향으로 들었을 때의 Windows 8 시작 화면 PC를 세로 방향으로 들었을 때의 Windows 8 시작 화면

가로 및 세로 방향으로 표시된 Windows 8 시작 화면

개발자의 센서 지원

Windows 8 시스템에서 센서가 사용될 수 있는 방식을 연구하는 단계에서 더 나아가 앱에 센서가 사용되는 방법에 대해서도 고민해야 했습니다. 지원해야 할 시나리오 를 파악하기 위해 게임, 상업용 응용 프로그램, 도구 및 유틸리티 등의 센서 지원 앱을 폭넓게 연구했습니다.

첫 번째 연구 주제는 앱에서 모션과 화면 회전을 감지하는 능력이었습니다. 여기에는 중력에 의한 힘을 측정하고 장치 자체의 모션을 측정하는 목적으로 사용되는 장치인 가속도계가 필요합니다. 그러나 대부분의 시나리오에서 모션 및 중력에 대한 이해만으로는 부족합니다. 많은 응용 프로그램에는 방향도 중요한 요소입니다. PC가 방향을 인 식하도록 하기 위해 나침반 기능을 통합해야 했습니다.

나침반을 지원하려면 3개의 축에서 가속도를 측정하는 3D 가속도계와 3개의 축에서 자기장의 세기를 측정하는 3D 자력계가 기본으로 필요합니다. 이러한 센서 의 조합을 6축 모션 및 방향 감지 시스템이라고 하며 기본적인 기울임 보정 나침반, 화면 회전 및 미로 스타일의 게임 등 특정한 캐주얼 게임을 지원할 수 있습니다. 그러 나, 내부적 테스트와 프로토타입 작업을 진행하면서 6축 모션 감지 시스템에 두 가지 중대한 단점이 있음을 알게 되었습니다. 즉, 나침반이 가끔 부정확해지고 3D의 대화형 게임에 빠르게 반응하지 못한다는 점입니다.

최근에는 휴대전화 플랫폼에서 자이로 센서라고 하는 새로운 형태의 센서가 등장하기 시작했습니다. 자이로 센서는 일반적으로 3개의 축을 따라 각속도를 측정합니다. 자 이로 센서의 데이터는 3D 모션 감지 시스템의 반응 속도와 정확도를 높이는 데도 이용할 수 있습니다. 자이로 센서는 매우 민감하지만 중력 방향이나 북극 방향 등 방향에 대한 기준을 잡기가 어렵습니다.

아래 그림은 장치의 기본 축 3개를 따라 자이로 데이터가 세 가지 회전으로 표현되는 방식을 나타냅니다.

[![좌우 동작에는 +Z 회전, 굴림 동작에는 +Y 회전, 상하 동작에는 +X 방향이 존재](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com//00/00/01/29/43/%0A%0Ametablogapi/2262.Yaw-Pitch-Roll-Slate-Win8_thumb_3B30CD96.png "좌우, 상하 및 굴림 방

향을 나타낸 그림")](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/29/43/%0A%0Ametablogapi/0525.Yaw-Pitch-Roll-Slate-Win8_7B66E710.png)

초기에는 이러한 센서가 특수 게임 등 극히 일부의 앱에만 국한된다고 생각했습니다. 그러나 3D 모션 및 방향 감지 문제를 더 깊이 있게 고찰할수록 다차원의 흔들기, 비틀기, 돌리기 등 사람이 쉽게 이해할 수 있는 종류의 모션에 반응하는 응용 프로그램이 훨씬 더 몰입도와 매력이 크다는 것을 점점 더 확실히 깨닫게 되었습니다. 이러한 종류의 센서를 이용하면 몰입도가 매우 우수한 3D 게임을 개발하는 부분뿐만 아니라 매핑 및 내비게이션 응용 프로그램, 측정 유틸리티, 두 시스템 사이의 대화형 응용 프 로그램, 캐주얼 게임 같은 단순 앱 등 다른 많은 앱이 다양한 모션 입력에 더욱 자연스럽게 반응할 수 있을 것입니다.

엔지니어링 문제

우리는 일부 3D 경험의 프로토타입 작업을 통해 모션 앱에 대한 연구를 시작했습니다. 첫 번째 난관은 장치의 물리적 방향을 앱의 가상 3D 환경에 직접 매핑시키는 것 이었습니다. 태블릿을 가상 세계로 들어가는 창문 개념으로 생각하고 단순한 증강 현실 경험을 모델링하기로 결정했습니다. 개념은 상당히 단순했습니다. 화면을 보면서 장치 를 움직이면 실내 가상 환경이 고정되어 있는 것처럼 보입니다.

처음에는 장치의 상하 움직임을 이에 대응한 3D 환경의 상하 움직임에 매핑하기 위해 가속도계를 사용하여 시험했습니다. 장치를 그대로 잡고 있으면 장면이 안정된 상 태로 유지되지만 장치를 기울이면 장면이 위나 아래로 기울어집니다. 그리고 우리는 곧바로 가속도계 센서의 데이터에 들어 있는 '노이즈' 때문에 장치를 고정시켜 잡고 있 을 때도 3D 환경이 불안하게 흔들린다는 문제에 봉착했습니다. 가속도계 데이터를 캡처하여 차트로 나타내보니 이 노이즈를 분명하게 확인할 수 있었습니다.

가속도 X는 0 근처의 들쭉날쭉한 선; 가속도 Y는 0 근처의 들쭉날쭉한 선; 가속도 Z는 -1 근처의 들쭉날쭉한 선

노이즈가 없다면 차트에서 선이 상하로 요동치지 않고 직선으로 나타날 것입니다. 이러한 노이즈를 없애기 위한 통상적 방법으로 원시 데이터 스트림에 저역 통과 필터를 사용합니다. 프로토타입에 이 방법을 적용한 결과 모션이 부드럽고 안정된 모습을 나타냈습니다(들쭉날쭉한 부분이 없어짐). 그러나 저역 통과 필터는 또 다른 문제를 낳았 습니다. 즉, 앱이 모션에 빠르게 반응하지 못해 움직임이 뒤쳐진다는 느낌을 주었습니다. 반응 속도를 떨어뜨리지 않으면서 불필요한 요동을 없앨 방법이 필요했습니다.

다음으로 시도한 실험은 가상 3D 환경 앱에서 '왼쪽 보기' 및 '오른쪽 보기' 기능을 제공하는 것이었습니다. 이러한 형태의 움직임을 지원하기 위해 6축 나침반 해법(3D 가속도계 + 3D 자력계)을 사용했습니다. 이러한 종류의 시도는 효과가 있었지만 6축 나침반의 일반적 불안정성 때문에 움직임에 일관성이 없었습니다. 상하 움직임을 좌우 움직임과 결합시키는 일도 쉽지 않았습니다.

이러한 실험을 통해 이와 같은 센서의 결합으로는 우리가 원하는 유동적이고 빠르게 반응하는 경험을 제공할 수 없다는 것이 확실해졌습니다. 가속도계 센서는 깨끗한 데 이터를 제공하지 못했고 단독으로 장치 방향을 알아내지 못했습니다. 자력계는 업데이트 속도가 느렸고 전자기 간섭에 민감하게 반응했습니다(예를 들면, 나침반 바늘이 가끔 한 위치에 고정되는 현상). 아직 자이로 센서로 시험해볼 차례가 남아 있었지만 자이로는 회전 속도만을 감지할 수 있으므로 어떤 식으로 도움이 될지 미지수였습니다.

'센서 융합'의 발견

그러나 실험을 더 진행한 결과 세 가지 센서를 모두 함께 사용하면 문제를 해결할 수 있다는 사실이 밝혀졌습니다. 가속도계, 자력계 및 자이로가 서로의 약점 을 보완하여 데이터 및 데이터 반응 속도의 부족한 부분을 효과적으로 채워줄 수 있다는 것이 드러난 것입니다. 이 센서들을 결합하면 센서를 개별적으로 사용했을 때보다 반응 속도가 더 빠르고 유동적이며 더 나은 경험을 이끌어낼 수 있습니다. 다수의 센서 입력을 결합하여 전체적으로 보다 향상된 결과를 만들어내는 과정을 센서 융합이라고 합니다.

기본적으로, 센서 융합은 전체가 각각의 합보다 더 뛰어난 경우에 해당합니다. 일반적인 센서 융합 시스템은 3D 가속도계, 3D 자력계 및 3D 자이로를 사용하여 결합된 '9축 센서 융합' 시스템을 만들어냅니다. 이 시스템의 작동 방식을 이해하기 위해 입력과 출력에 대해 살펴보겠습니다.

하드웨어(3D 가속도계, 3D 자이로, 3D 자력계)에서 화살표가 '통과' 및 '센서 융합'을 가리키고 여기서 화살표는 다시 센서 출력(3D 가속도계, 3D 자이로, 3D 나침반, 3D 경사계, 장치 방향)으로 연결됨
9축 센서 융합 시스템

이 그림은 두 가지 종류의 출력을 보여줍니다. 하나는 센서 데이터가 응용 프로그램으로 직접 전달되는 통과 출력이고 다른 하나는 센서 데이터가 더욱 강력한 데이터 형식으로 합성되는 센서 융합 출력입니다.

어떤 응용 프로그램은 통과 센서 데이터를 직접 사용할 수 있습니다. 이 데이터는 다양한 시나리오에서 '실제 값 그대로' 사용할 수 있습니다. 이러한 시나리오의 예로 걸음 수를 카운트하는 만보계 구현 앱을 들 수 있습니다. 아래 그래프는 태블릿 PC를 들고 걷는 사람의 가속도계 출력을 보여줍니다. 이 그래프는 사람의 각 걸음걸이를 감 지할 수 있음을 분명하게 보여줍니다.

가속도 X, 가속도 Y, 가속도 Z가 차트에 각각 선으로 표시되었으며 사용자의 각 걸음걸이를 나타내는 규칙적 변동을 확인할 수 있습니다.

 

그러나, 실험 결과에 따르면 많은 응용 프로그램에서 원시 센서 데이터를 효과적으로 사용할 수 없었습니다. 이러한 응용 프로그램의 예는 다음과 같습니다.

  • 나침반 앱
  • 고급 내비게이션 및 증강 현실 앱
  • 캐주얼 게임
  • 3D 게임 앱

다음은 3D 게임 샘플의 스크린샷입니다.

 시뮬레이션된 3D 공간에 표적이 있는 단순한 3D 게임

3D 1인칭 슈팅 게임(//Build/ 세션에서 소개)

이러한 응용 프로그램은 구현 기능을 지원하기 위해 센서 융합 데이터를 사용해야 합니다. 센서 융합의 '마술'은 세 가지 모든 센서의 데이터를 수학적으로 결합하여 기 울임 보정 나침반, 경사계(상하 동작, 좌우 동작, 구름 동작 표현), 더욱 발전된 장치 방향 표현 등 보다 복잡한 출력을 제공하는 데 있습니다. 이러한 형태의 데이터를 통해 더욱 정교한 앱은 자연스러운 동작에 빠르고 유동적이며 신속하게 반응할 수 있습니다.

Windows 8은 센서 융합 솔루션을 통합함으로써 전 범위의 응용 프로그램에 완벽한 솔루션을 제공합니다. Windows에서 센서 융합은 불안정한 동작과 부자연스러운 전 환 문제를 해결하고 데이터 무결성 문제를 줄이며 3D 공간에서 어색함 없이 전체 장치 모션을 부드럽게 표현할 수 있는 데이터를 제공합니다.

하드웨어 파트너와의 협력

Windows를 위한 센서 융합 솔루션을 설계하면서 하드웨어 설계 업체와 초기부터 협력하여 이 솔루션을 보다 효과적으로 활용하도록 지원할 필요가 있었습니다. 단일 장 치를 설계하는 경우라면 센서 융합 시스템을 설계하는 일이 그리 어렵지 않습니다. 그러나 Windows는 다양한 형태를 가진 많은 종류의 PC에서 실행되고 PC의 하드웨어 제 조업체도 다양합니다. 따라서 우리는 Windows 하드웨어 파트너가 참여할 전체 에코시스템을 지원하는 솔루션을 제공해야 했습니다.

첫 단계는 Window의 센서 융합 솔루션에 사용될 센서 패키지의 성능 기준을 세우는 일이었습니다. Windows 인증 가이드라인을 이용하여 센서 성능에 대한 규격을 제 공했습니다. 하드웨어 업체가 해당 솔루션이 Windows와 호환되는지 쉽게 확인할 수 있도록 다양한 테스트를 개발하여 Windows 인증 키트에 포함시켰습니다.

또 다른 문제는 드라이버를 개발하고 지원하는 비용을 줄이는 것이었습니다. 센서 하드웨어 제조업체와 PC 제조업체의 편의를 돕는 차원에서 USB 또는 절전 성능을 높 인 I2C 등의 버스를 통해 연결되는 모든 Windows 호환 센서 패키지와 호환되는 단일 Microsoft 제공 드라이버가 개발되었습니다. 이 센서 클래스 드라이버를 통해 하 드웨어 제조업체는 센서 하드웨어를 혁신적으로 구현하는 한편 Windows 운영 체제와 함께 제공되는 드라이버로 자사의 하드웨어를 쉽게 지원할 수 있습니다.

이 클래스 드라이버의 채택 속도를 높이기 위해 Microsoft는 업계 파트너와 협력하여 이 규격을 일반 표준으로 도입하는 일을 추진했습니다. 2011년 7월 드디어 USB-IF의 HID(Human Interface Device) 규격에 센서 표준이 도입되었습니다(HID 규격 버전 1.12, 검토 요청 #39로 소개). 이러한 표준화의 결과로 센서 제조업체는 호환 장치 펌웨어에 대한 공개 표준 USB-IF 규격을 따름으로써 Windows 8과 호환되는 센서 패키지를 개발할 수 있습니다. 이에 따라 Windows 8 PC에 센서 하드웨어 를 통합하는 데 필요한 시간과 비용이 줄어듭니다. 그 밖에 지원 비용이 절감되고 센서를 장착한 Windows 8 PC에서 하드웨어 성능이 일관되게 발휘된다는 이점도 따릅니 다.

클래스 드라이버를 표준화하는 부분 외에도 센서 융합 솔루션의 성능을 최적화하고 배터리 소모량에 미치는 영향을 최소화해야 했습니다. 시스템에 사용되는 각 센서는 전력을 소모하며 데이터를 각 단계를 거쳐 보내려면 메모리와 CPU 시간이 소모됩니다. Windows 8에서 작동하는 센서 융합 시스템이 전력과 성능에 미치는 영향을 최소화 하기 위해 크게 두 가지 방법이 이용되었습니다.

1. 우리는 센서 융합 시스템의 데이터 처리가 대부분 하드웨어 수준에서 이루어지도록 Windows 8에서 센서 융합 인터페이스를 설계했습니다. 이러한 하드웨어 수준의 센서 융합 기술 덕분에 많은 계산 리소스를 소모하는 알고리즘을 메인 CPU에서 실행하지 않아도 되어 전력과 CPU 주기가 절약됩니다.

2. 우리는 또한 특정 시점에서 실행되는 센서 앱의 요구와 직접적으로 연결된 강력한 필터링 메커니즘을 구현했습니다. 이 수요 기반의 데이터 및 이벤트 모델은 앱에서 센서 데이터를 요구할 때 필요한 속도로만 스택을 거쳐 이 데이터를 제공하는 방식입니다. 그 결과 센서 데이터 처리를 위한 CPU 사용량이 크게 줄어듭니다.

센서 및 Metro 스타일 앱

마지막 해결 과제는 센서 융합의 잠재력을 Metro 스타일 앱을 개발하는 개발자가 실현할 수 있도록 하는 것이었습니다. 이를 위해 새로운 WinRT의 일부로 센서 API 를 설계했습니다. 이 API를 통해 개발자는 어떤 Metro 스타일 앱에서도 센서 기능에 액세스할 수 있습니다. 직선적이고 단순한 이러한 API는 캐주얼 게임부터 가상 현실 응용 프로그램에 이르는 모든 응용 프로그램을 지원하는 데 필요한 데이터를 개발자에게 제공합니다. 물론, 이러한 기능은 모두 게임 개발자를 위해서 또는 데스크톱 응용 프로그램에서 달리 사용할 수 있도록 Win32 API로 제공됩니다.

다음 JavaScript 코드 조각은 Windows 런타임을 사용하여 가속도계에 액세스하고 이벤트를 수신하기가 얼마나 간단한지 잘 보여줍니다.

 var accelerometer;
accelerometer = 

Windows.Devices.Sensors.Accelerometer.getDefault();
accelerometer.addEventListener("readingchanged",onAccReadingChanged);

function 

onAccReadingChanged(e) {
    var accelX = e.reading.accelerationX;
    var accelY = e.reading.accelerationY;
    var accelZ = 

e.reading.accelerationZ;
}

Windows 런타임에서의 센서 지원에 대한 자세한 내용은 이 //build/ 세션의 앱에서 위치 및 센서 사용 부분을 참조하십시오.

이제 Windows 8에서 센서 융합을 시도하거나 이러한 새로운 기능을 사용하는 앱을 직접 개발할 수 있는 방법이 궁금해질 수 있습니다. 2011년 //build/ 컨퍼런스 에 참석한 개발자에게는 센서가 풀 패키지로 포함된 삼성 Windows 8 개발자 프리뷰 슬레이트 PC가 제공되었습니다. 물론 약 4,000대만 준비되었기 때문에 이 PC를 받지 못한 사람도 있습니다. 반가운 소식은 Windows 개발자 프리뷰 장치에 포함된 9축 센서 융합 시스템을 ST Microelectronics를 통해 온라인으로 구입할 수 있다는 것 입니다. 'Windows 8용 ST Microelectronics eMotion 개발 보드'(모델 # STEVAL-MKI119V1)는 USB를 이용하여 연결하며 Windows 8에 포함된 HID 센서 클 래스 드라이버와 호환됩니다. Windows 8 개발자 프리뷰 버전을 다운로드했고 한시라도 빨리 센서를 체험해보고 싶다면 이 장치를 이용해보시기 바랍니다.

USB 동글에 연결된 회로 보드

Windows 8용 ST Microelectronics eMotion 개발 보드

자, 이제 센서 융합의 실제 활용에 대해 알아보겠습니다!

<source src="https://video.ch9.ms/ch9/bfda/824ab48a-

2b96-49b4-85de-9fda0142bfda/SupportSensorsinWin8_low_ch9.mp4">이 HTML5 비디오는 현재 브라우저에서 지원되지 않습니다.

다른 미디어 플레이어로 보려면 이 비디오를 다운로드하십시오.
고화질 MP4 | 저화질 MP4

- Gavin