LoginSignup
3
2

More than 5 years have passed since last update.

UnlimitedHandで手の状態をなんとなく取得

Posted at

Goal

手の状態(開く・閉じる)をそれなりの制度で取得する。

Reference

いつもの公式
UnlimitedHand リファレンス (Unity用)

デバイスについておさらい

そもそも、UnlimitedHandって何をしているの?というところ。
手の状態を取得するのは、シートについている8つのフォトリフレクタというセンサーです。
HWの構造に説明が載っていますが、このセンサーによって筋肉の動きがわかるらしいです。

ただし、ここで取得される値が厄介で、同じ人でやっても手の状態とセンサ値がきれいに一致して取れないです。まして違う人になれば倍くらい値がずれることもありました。
そんなわけで、ただ閾値を決めて手を開いている、閉じているということはわかりません。

手の開閉状態を取得する

Falconerでは手の開閉で鷹がつついてきます。
ここではどのように手の開閉を検知しているのか参考に、いろいろいじってみました。

public class HandPhysicsControllerInput : MonoBehaviour{
    public UH uhand;

    [HideInInspector]
    public int[] uPRSum = new int[8];   //Sum of the Sensors' Values 

    [HideInInspector]
    public int count;                   //Count Number to calculate the Averages of the Sensor's Values

    [HideInInspector]
    public int[] uPRAve = new int[8];   //Averages of the Sensor's Values
    public int FIRE_THRESHOLD_OPEN = 30;    //Fire Threshold which compares with "PRVARSum"
    public int FIRE_THRESHOLD_CLOSE = -30;    //Fire Threshold which compares with "PRVARSum"

    public int PRVARSum;                //Finger Movement SUM
    bool isHandOpen = true;

    void Update () {
        count++;
        for (int i = 0; i < 8; i++)
        {
            uPRSum[i] += uhand.UHPR[i];
            uPRAve[i] = uPRSum[i] / count;
        }
        if (30 < count)
        {//reset the count
            for (int i = 0; i < 8; i++)
            {
                uPRSum[i] = uPRAve[i];
            }
            count = 1;
        }

        PRVARSum = 0;
        PRVARSum += (uhand.UHPR[1] - uPRAve[1]);
        PRVARSum += (uhand.UHPR[2] - uPRAve[2]);
        PRVARSum += (uhand.UHPR[3] - uPRAve[3]);

        if (PRVARSum > FIRE_THRESHOLD_OPEN)
        {
            // 手を開く処理
        }
        else if (PRVARSum < FIRE_THRESHOLD_CLOSE)
        {
            // 手を閉じた処理
        }
     }
}

Falconerをもとにいじっていたので、その時のいろいろが無駄に書かれていたりする気もするのですが
フォトリフレクタの1,2,3の平均値との差分合計が閾値を超えたら手を開閉したと判断しているみたいです。
閾値に固定値を使うのがいいのかは微妙な気もしますが、自分で動かしてみると大体とれるっぽいです。

おまけ

現在アマゾンでUnlimitedHandが値引きされているみたいです(クリスマス?)
ここにきている人はすでに持っている人ばかりだと思いますが、両手用にいかが?

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2