Myo臂环Unity3D开发说明文档

最近公司需求Myo做一个Demo,我到网上查了一下,国内竟然没有任何关于Myo臂环的开发文档。所以就把我的一些经验记录下来跟大家分享。

Myo共支持五种手势输入

Fist: 握拳
Wave in:内摆手
Wave out:外摆手
Double tap:双击
Fingers spread:伸开五指
在官方提供的例子中,ColorBoxByPose 中提供了实现以上五种手势的代码。

 void Update ()
    {
        // Access the ThalmicMyo component attached to the Myo game object.
        ThalmicMyo thalmicMyo = myo.GetComponent<ThalmicMyo> ();

        // Check if the pose has changed since last update.
        // The ThalmicMyo component of a Myo game object has a pose property that is set to the
        // currently detected pose (e.g. Pose.Fist for the user making a fist). If no pose is currently
        // detected, pose will be set to Pose.Rest. If pose detection is unavailable, e.g. because Myo
        // is not on a user's arm, pose will be set to Pose.Unknown.
        if (thalmicMyo.pose != _lastPose) {
            _lastPose = thalmicMyo.pose;

            // Vibrate the Myo armband when a fist is made.
            if (thalmicMyo.pose == Pose.Fist) {
                 thalmicMyo.Vibrate (VibrationType.Long);

                ExtendUnlockAndNotifyUserAction (thalmicMyo);

            // Change material when wave in, wave out or double tap poses are made.
            } else if (thalmicMyo.pose == Pose.WaveIn) {
                this.GetComponent<Renderer>().material = waveInMaterial;
                cube.transform.position += new Vector3(-1, 0, 0);

                ExtendUnlockAndNotifyUserAction (thalmicMyo);
            } else if (thalmicMyo.pose == Pose.WaveOut) {
                this.GetComponent<Renderer>().material = waveOutMaterial;
                cube.transform.position += new Vector3(1, 0, 0);

                ExtendUnlockAndNotifyUserAction (thalmicMyo);
            } else if (thalmicMyo.pose == Pose.DoubleTap) {
                this.GetComponent<Renderer>().material = doubleTapMaterial;
               cube.transform.localScale *= 1.5f;

                ExtendUnlockAndNotifyUserAction (thalmicMyo);
            }
        }
    }

分别对比当前的手势是否等同于已经定义好的五种手势。通过这个脚本就能对Myo进行简单的开发了。关于这几种手势官方的例子已经很详细,就不多做赘述。

ThalmicMyo

ThalmicMyo是核心脚本,里面的关键参数如下;
1、 armSynced是一个bool参数,为true表示Myo已经识别到手臂。注意在官方自带的例子中只有armSynced为true时才能调用Myo定义好的几种手势。
2、 arm定义右手臂、左手臂。
3、 pose里面存储着Myo探测到的手势,UnKnow表示当前手势-----。
4、 Accelerometer Myo当前加速度计数器,大概0.8 m/s^2
5、 Gyroscope 陀螺仪 轴的速度/秒
6、 isPaired 是否配对
7、 Vibrate Myo所提供的震动类型(Short\VibrationType),转到定义发现Myo定义了三种震动类型

public enum VibrationType
    {
        Short,
        Medium,
        Long
    }

8、 Unlock 解锁类型(Timed/Hold)
Timed=0; 开启一段固定的时间
Hold=1:一直到通知解锁

注意官方并不推荐"import Thalmic.Myo"这样引入命名空间,因为Thalmic.Myo包含了一些类型(如Vector3)会与Unity内置的类型相冲突。
Myo中你最常用的是手势跟震动类型,要访问这些功能,你需要添加如下声明:
Using Pose = Thalmic.Myo.Pose;
Using VibrationType = Thalmic.Myo.VibrationType;

另外我发现在官方调用中,每次使用手势都调用一下ExtendUnlockAndNotifyUserAction这个函数,拓展解锁并通知用户操作。实际测试我发现所谓通知用户操作只是短震一下,黑人问号脸.jpeg。至于基本锁定策列,没有发现不同。

// Extend the unlock if ThalmcHub's locking policy is standard, and notifies the given myo that a user action was
    // recognized.
    void ExtendUnlockAndNotifyUserAction (ThalmicMyo myo)
    {
        ThalmicHub hub = ThalmicHub.instance;

        if (hub.lockingPolicy == LockingPolicy.Standard) {
            myo.Unlock (UnlockType.Timed);
        }

        myo.NotifyUserAction ();
    }

ThalmicHub
这个脚本中ResetHub()方法,是用来初始化的。在用户摘下Myo后会调用这个函数初始化Myo。所以我们是不是可以关闭这个方法的调用来实现用户摘下Myo来给另一个用户不需要重新训练Myo呢?
并不能。
jointOrientation
这个脚本主要实现了,怎么把Myo的方向转化为用户的方向以及震动。

本文的内容是原创的,未经作者允许禁止任何形式的转载。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,085评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,947评论 4 60
  • 中午时分,惧怕太阳而躲进沿街的一家小茶室。里面的装潢简单、古旧,透着一股诡异。每桌一人,或看电视,或抽烟玩手机,静...
    斯夜阅读 126评论 0 0
  • 概述 由于Thread的yield和sleep有一定的相似性,因此放在一起进行分析。yield会释放CPU资源,让...
    allanYan阅读 4,732评论 5 4