2015년 12월 17일 목요일

HeadsetInformationLogger

example 에서 가장 기본이 되는 Headset information Logger.

insight 를 착용하고 나서 신호가 제대로 들어 오고 있는지 확인하려면 EmoState 를 통한 각 센서의 상태를 점검 해 보는 것이 좋다.
Insight Headset

위치 : community-sdk/example/C++/HeadsetInformationLogger
기준 commit : 6a20813229ff56cf0c0040cfddaaa086d7e27ea4
컴파일 : 정상
실행 : 정상
결과물 : 텍스트 파일 (test.csv)

소스 코드에서 SDK API 호출 부분만 살펴 보면,

...
46 EmoEngineEventHandle eEvent = IEE_EmoEngineEventCreate();
47 EmoStateHandle eState = IEE_EmoStateCreate();
48 unsigned int userID = 0;
...
51 int state = 0;
52 IEE_EEG_ContactQuality_t* contactQuality = new IEE_EEG_ContactQuality_t;
...
56 IEE_SignalStrength_t wirelessStrength;
57
58 if (IEE_EngineConnect() != EDK_OK) {
...
65 ofs.open("test.csv");
66 ofs << "Time, Wireless Strength, Battery Level, AF3, T7, Pz, T8, AF4" << std::endl;
...
70 state = IEE_EngineGetNextEvent(eEvent);
...
88 IEE_EmoEngineEventGetEmoState(eEvent, eState);
...
98 systemUpTime = IS_GetTimeFromStart(eState);
99 wirelessStrength = IS_GetWirelessSignalStatus(eState);
100
101 if (wirelessStrength != NO_SIG)
102 {
103 std::cout << "Time: " << systemUpTime << std::endl;
104 IS_GetBatteryChargeLevel(eState, &batteryLevel, &maxBatteryLevel);
...
109 ofs << IS_GetContactQuality(eState, IEE_CHAN_AF3) << ", ";
110 ofs << IS_GetContactQuality(eState, IEE_CHAN_T7) << ", ";
111 ofs << IS_GetContactQuality(eState, IEE_CHAN_Pz) << ", ";
112 ofs << IS_GetContactQuality(eState, IEE_CHAN_T8) << ", ";
113 ofs << IS_GetContactQuality(eState, IEE_CHAN_AF4) << ", ";
...

1. IEE_EngineConnect() 를 통해 hidraw 장치를 열어서 insight 와의 연결을 초기화 하고
2. IEE_EngineGetNextEvent() 로 insight 의 event 를 확인한다.
3. event type 이 IEE_EmoStateUpdated 이면 배터리나 센서의 정보를 읽어온다.
 - 배터리는 IS_GetBatteryChargeLevel() 을 사용해 얻어오고 현재값과 최고값을 알 수 있다.
    참고로 최고 값은 5 이다.
  - 각 센서는 IS_GetContactQuality() 로 조회하고 값은 0에서 부터 4까지 이다.
    IEEG_CQ_NO_SIGNAL : 0
    IEEG_CQ_VERY_BAD : 1
    IEEG_CQ_POOR : 2
    IEEG_CQ_FAIR : 3
    IEEG_CQ_GOOD : 4

[컴파일 방법]
$ cmake .
$ make

[실행 방법]
$ ./hinfo

[결과물]
Time, Wireless Strength, Battery Level, AF3, T7, Pz, T8, AF4
0,2,-1,0, 0, 0, 0, 0,
0.0312769,2,-1,4, 4, 4, 4, 4,
0.523888,2,4,0, 4, 4, 4, 0,
0.641176,2,-1,0, 4, 4, 4, 0,
0.836657,2,-1,0, 4, 4, 4, 0,
0.977402,2,-1,0, 4, 4, 4, 0,
1.14943,2,-1,4, 4, 4, 4, 0,
1.25889,2,-1,4, 4, 4, 4, 0,
1.37618,2,-1,4, 4, 4, 4, 0,
1.50911,2,-1,4, 4, 4, 4, 0,
1.61858,2,-1,4, 4, 4, 4, 0,
1.78278,2,-1,4, 4, 4, 4, 0,
1.89225,2,4,4, 4, 4, 4, 0,
2.01736,2,-1,4, 4, 4, 4, 0,
2.18156,2,-1,4, 4, 4, 4, 0,
2.31449,2,-1,4, 4, 4, 4, 0,
2.41614,2,-1,4, 4, 4, 4, 0,
2.55688,2,-1,4, 4, 4, 4, 0,
2.68981,2,-1,4, 4, 4, 4, 4,
2.78364,2,-1,4, 4, 4, 4, 4,
2.92439,2,-1,4, 4, 4, 4, 4,
3.06513,2,-1,4, 4, 4, 4, 4,
3.20588,2,-1,4, 4, 4, 4, 4,
3.35445,2,-1,4, 4, 4, 4, 4,
3.48737,2,-1,4, 4, 4, 4, 4,
3.5812,2,-1,4, 4, 4, 4, 4

정리하면,
5개 채널 (AF3, AF4, T7, T8, Pz) 의 접촉 상태와 배터리 정보 그리고 timestamp 를 얻을 수 있는 기본 예제. 배터리 값이 '-1' 로 제대로 갱신 되지 않거나 2~4 사이에서 왔다 갔다 하는 경향이 있음. 센서 감도는 나름 정확히 체크되는 것으로 생각됨.

댓글 없음: