akikan工場

作ったものや頑張ったことを紹介するブログです

apple watchのスリープ状態でもジャイロセンサの値を取る

最近、特定のモーションを検知する仕組みを作っています。

 

学習データを取るために、apple watchのジャイロセンサの値を取得する準備をしました。

 

以下のqiitaの記事を参考にしました。

https://qiita.com/izugch4423/items/9c102a2cb747a0cd969a

 

スムーズに取れたかと思ったのですが、結果を確認したところ、apple watchがスリープした時にうまくデータを取れていませんでした。

 

apple watchは少し手首を傾けるとスリープしてしまうため、このままでは必要なデータが取れません。

そこでスリープ状態でもセンサが動くようにするにはどうすればいいか調べました。

 

やや黒魔術的なところがあるので、もっと正しいやり方があれば教えてください。

 

どうやったか

位置情報を取得するためのCoreLocationフレームワークを使います。

 

また、バックグラウンドでも位置情報を取得するフラグをtrueにし、WatchKit ExtensionのBackgroundModesにあるLocation updatesにチェックを入れます。

 

let locationManager = CLLocationManager()
locationManager
.allowsBackgroundLocationUpdates = true

 

実際に位置情報の取得を行うstartUpdatingLocationは呼ばなくても大丈夫です。

 

これで自分の環境(watch OS 4.3.2)ではapple watchがスリープ状態になってもジャイロセンサが動き続けました。

 

 

データの取得準備やクレンジングなど、機械学習はデータ集めがとても大変ですね!

モーション検知をこれからやろうとしている方に参考になればと思います。