JavaScript
JINSMEME

JINS MEME で装着判定を行うロジック

概要

JINS MEME の開発者の皆様からたまにいただくご質問として「装着しているかどうか取得できるメソッドって無いのですか?」というのがあります。本当はSDK内でこういうメソッドがあったほうが良いのかもしれませんが、あいにく用意できていません。毎度すみません、、。ということで1秒おきに装着しているかどうかを判定するロジック(JavaScript版)を以下に貼り付けておきます。

ちなみにリアルタイムモードのデータにfitErrorという項目があるのですが、1分間まばたきがあったか無かったかだけで値を返しているものなのと、普通に机に置いていても風のゆらぎとかでまばたきの誤判定をすることもあり利用しづらいのであまりオススメしません。毎度すみません、、。

ライセンス

Public Domain

コード詳細

ロジックとしては以下になります。
(1)Roll/Pitch/Yaw の前回値との差分が1LSB(0.01degree)以上かどうかでフラグを立てる
(2)Roll/Pitch/Yaw でどれかフラグが立ってたらそのフレームはフラグ1
(3)これを1秒(20フレーム)で平均を取り、0.4以上なら装着状態、小さければ非装着状態と判定

/* (1),(2) コードイメージ */

//グローバル変数
var gb = {};
var gb.roll_m1; //1つ前を残す
var gb.pitch_m1; //1つ前を残す
var gb.yaw_m1; //1つ前を残す
var gb.wearing_tot; //1秒おきに判定するためのバッファ

//dataReport内
var gxd1 = Math.abs(gb.roll_m1 - data.roll) > 0.012 ? 1 : 0;
var gyd1 = Math.abs(gb.pitch_m1 - data.pitch) > 0.012 ? 1 : 0;
var gzd1 = Math.abs(gb.yaw_m1 - data.yaw) > 0.012 ? 1 : 0;
gb.wearing_tot += (gxd1 + gyd1 + gzd1) >= 1 ) ? 1 : 0;
gb.roll_m1 = data.roll;
gb.pitch_m1 = data.pitch;
gb.yaw_m1 = data.yaw;

/* (3)コードイメージ */

//20行(1秒)おきに実行し、装着フラグを算出
var isWearing = gb.wearing_tot >= 20 * 0.4 ? 1 : 0;
//バッファの初期化
gb.wearing_tot = 0;