凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

筋電の Raw Data が取得できるようになった Myo SDK 0.8.0 を試してみた

はじめに

前回、Myo の記事について書きました。

この時点では筋電の生値が未だ取れない、と書いたのですが、公式ブログで生値が取れるようになったことが発表されましたので試してみました。

環境

サンプルを試してみる

最新の SDK は以下よりダウンロードします。

Connect App も同時に最新のものにしておきます。

ダウンロードすると以下のように bin ディレクトリの中に emg-data-sample が増えており、ここで筋電の生値がどんな感じで取れるか見ることが出来ます。

力を抜いている時

f:id:hecomi:20141221011905p:plain

力を入れている時

f:id:hecomi:20141221011931p:plain

Unity で使ってみる

リファレンス見てみます。

新しく onEmgData() が加わり、整数型で 8 個のデータ(8 個のセンサの値)が返ってくることが分かります。しかしながら SDK に同梱されている MyoUnity.unitypackage のサンプルには、これにアクセスするインターフェースがありません。

幸い構造自体は前回のエントリで書いたようにシンプルになっています。そこで適宜 libmyo.h などを参照しながら libmyo.cs を拡張したり、足りないイベントや API をポチポチ追加しながら自前でバインディングをしました。ついでに、対応されていなかった RSSI についても追加しておきました。

そのうち公式が対応すると思いますが、それまでのつなぎとしてご自由にお使い下さい。

デモ

Download

追記(2014/12/24)

GitHub にあげました。

サンプルコード

サンプルコードは以下になります。

using UnityEngine;
using System;

public class RssiAndEmgGUI : MonoBehaviour 
{
    public GameObject myo;
    private ThalmicMyo thalmicMyo_;
    private ThalmicMyo thalmicMyo {
        get { return thalmicMyo_ ?? (thalmicMyo_ = myo.GetComponent<ThalmicMyo>()); }
    }

    void Start()
    {
        // Enabled にするとデータが降ってくる、Disabled だと降ってこない(デフォルト)
        thalmicMyo.SetStreamEmg(Thalmic.Myo.StreamEmgType.Enabled);
    }

    void Update()
    {
        // RSSI の値を更新する
        thalmicMyo.RequestRssi();
    }

    void OnGUI()
    {
        if (thalmicMyo != null) {
            // rssi は sbyte、emg は sbyte[8] で 8 個ある各センサの値を格納
            GUI.Label(new Rect (12, Screen.height - 100, Screen.width, 100),
                "RSSI: " + thalmicMyo.rssi + "\n" +
                "EMG:  " + string.Join(", ", Array.ConvertAll<sbyte, string>(thalmicMyo.emg, x => x.ToString()))
            );
        }
    }
}

おわりに

強く握っているかどうか位なら取れそうです。そのままだとノイズが大きいので適宜フィルタを掛けて見ながらいろいろ試してみようと思います。