2015年4月8日水曜日

Android で Myo のデータを取得しよう

どうも、モーション認識部分を担当している太田です。m(_ _)m 

みなさん、Myo ご存知ですか?
知らない方のために、リンク貼っておきます。(for Developer)


・・・どうです?楽しそうでしょ?

 Developer 向けに様々な SDK が公開されています。
が、残念なことに一番面白そうな筋電位データ (EMG) が Android で見れない!

なので、Bluetooth 通信からゴリゴリと取得してみました。
参考にしたのは、制作元が公開している Bluetooth の仕様(C++ のヘッダファイル)と Android のサンプルページ。
https://github.com/thalmiclabs/myo-bluetooth https://developer.android.com/guide/topics/connectivity/bluetooth-le.html

サンプルページの固有値に関して、Myo の仕様に合わせていけば万事 O.K. です。
ただし注意としては、characteristic から取得できるバイト値がリトルエンディアンであること。また、Myo が送信するデータの種類をユーザ側から設定しないといけないので、Myo のコマンドをデータ取得より先に設定してあげることが必要になります。
Myo の仕様を見るとデータ類は全て notification によって取得されるので、この辺りの実装も当然必要です。


まぁ、こんな感じに取得できます。カッコ内の値は秒間のデータ数です。


値を取得するのは出来たのですが、characteristic の notification の設定を有効にすると characteristic の read が使えません。その逆もまた然りです。(T^T)
今のところ、設定の早いもん勝ち状態です。

Android の仕様なのか掴みきれてませんが、同じようなことを言ってる人がチラホラ・・・。
http://stackoverflow.com/questions/17910322/android-ble-api-gatt-notification-not-received
http://stackoverflow.com/questions/22817005/why-does-setcharactersticnotification-not-actually-enable-notifications
そもそも、notification の設定をする descriptor を BluetoothGatt に書き込むのが解せません。。。

どなたか良いアイデアあれば教えて下さい。m(_ _)m