博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(30 gadget day 1) MYO get started
阅读量:5746 次
发布时间:2019-06-18

本文共 5194 字,大约阅读时间需要 17 分钟。

MYO

MYO是一款类似Leap motion的新型人机交互HCI设备。它被戴在人的前臂,从而可以感知人的肌肉电流,进而识别出人的各种手势动作,比如向左向右挥手。

图片描述

官方给出的MYO的几个用途是

  • 做展示。挥挥手就能换页,或者将Prezi的控制变成它应有的样子。
  • 控制手机。比如跑步的时候挥挥手就能切换歌曲,玩1024之类的。
  • 智能家居。打个响指就能让电视开机之类的。
  • 控制那些会跑的。现在支持了Sphero和Parrot Drone。

另一个我觉得很酷的例子是在一次演出里使用MYO来辅助增强现场表演效果。特别有未来实时大规模交互演出的感觉。那些具体的表演视频就大家自己去搜吧。

avb-myo-home.jpg

我买了两个MYO腕带,下面三天我们就来想想能用它来玩点什么~(那上面的标志是在亮的,真的挺酷)

图片描述

MYO的结构

myo-overview.png

整个MYO中间靠近皮肤的部分都布满了各种金属触点,所以戴起来的时候完全不在乎什么角度。充电用的是标准的Micro USB。

图片描述

开发者视角

跟Leap motion类似,MYO提供两类输入数据:空间数据(Spatial data),手势数据(Gestural data)和唯一一种反馈接口,震动(vibration command)。

空间数据包括两个维度:方向(orientation),三维的加速度向量(acceleration vector)。

手势数据包括几种特定的手势,比如握拳等。

iOS sample

当然,MYO提供了基本所有平台的SDK(当然Windows phone除外)。开发起来最方便的还是Mac啦,windows要装一堆驱动啥的。如果只是开发应用的话,基本之用跟Android/iOS的SDK打交道就好啦。如果需要底层数据,MYO也提供C lib API。另外,还有一种用Lua写的。

sdk-stack.png

跟各种Sensor的使用类似,MYO的数据是以回调传递事件的方式来提供。MYO提供三类事件,如前面所说所空间事件,手势事件,以及一些辅助类的事件(如连接,断开设备等)。

开发MYO应用的最好方式就是先运行sample程序。iOS的SDK里面包括一个Doc和叫HelloMyo的Sample程序。打开Sample,运行,玩玩就好了。(MYO SDK开发速度很快,所以如果发现Sample程序告知版本太低,则需要连上USB和蓝牙发射器进行一次升级)。

看看代码吧。

- (void)viewDidLoad {    [super viewDidLoad];    // Data notifications are received through NSNotificationCenter.    // Posted whenever a TLMMyo connects    [[NSNotificationCenter defaultCenter] addObserver:self                                          selector:@selector(didConnectDevice:)                                          name:TLMHubDidConnectDeviceNotification                                          object:nil];    // Posted whenever a TLMMyo disconnects.    [[NSNotificationCenter defaultCenter] addObserver:self                                          selector:@selector(didDisconnectDevice:)                                          name:TLMHubDidDisconnectDeviceNotification                                          object:nil];...    // Posted when a new pose is available from a TLMMyo.    [[NSNotificationCenter defaultCenter] addObserver:self                                          selector:@selector(didReceivePoseChange:)                                          name:TLMMyoDidReceivePoseChangedNotification                                          object:nil];}

首先是注册各种事件,包括连接断开连接,这里有个Sync Gesture,指的是一种比较奇怪的动作(不大好描述)。应该是MYO用来给手臂肌肉电流做一个基本的base line吧。

最有用的可能就是TLMMyoDidReceivePoseChangedNotification了。一旦有新的姿势检测到,这个函数就能收到一次callback。来看这个Callback的内容。

- (void)didReceivePoseChange:(NSNotification *)notification {    // Retrieve the pose from the NSNotification's userInfo with the kTLMKeyPose key.    TLMPose *pose = notification.userInfo[kTLMKeyPose];    self.currentPose = pose;    // Handle the cases of the TLMPoseType enumeration, and change the color of helloLabel based on the pose we receive.    switch (pose.type) {        case TLMPoseTypeUnknown:        case TLMPoseTypeRest:        case TLMPoseTypeDoubleTap:            // Changes helloLabel's font to Helvetica Neue when the user is in a rest or unknown pose.            self.helloLabel.text = @"Hello Myo";            self.helloLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:50];            self.helloLabel.textColor = [UIColor blackColor];            break;        case TLMPoseTypeFist:            // Changes helloLabel's font to Noteworthy when the user is in a fist pose.            self.helloLabel.text = @"Fist";            self.helloLabel.font = [UIFont fontWithName:@"Noteworthy" size:50];            self.helloLabel.textColor = [UIColor greenColor];            break;        case TLMPoseTypeWaveIn:            // Changes helloLabel's font to Courier New when the user is in a wave in pose.            self.helloLabel.text = @"Wave In";            self.helloLabel.font = [UIFont fontWithName:@"Courier New" size:50];            self.helloLabel.textColor = [UIColor greenColor];            break;        case TLMPoseTypeWaveOut:            // Changes helloLabel's font to Snell Roundhand when the user is in a wave out pose.            self.helloLabel.text = @"Wave Out";            self.helloLabel.font = [UIFont fontWithName:@"Snell Roundhand" size:50];            self.helloLabel.textColor = [UIColor greenColor];            break;        case TLMPoseTypeFingersSpread:            // Changes helloLabel's font to Chalkduster when the user is in a fingers spread pose.            self.helloLabel.text = @"Fingers Spread";            self.helloLabel.font = [UIFont fontWithName:@"Chalkduster" size:50];            self.helloLabel.textColor = [UIColor greenColor];            break;    }    // Unlock the Myo whenever we receive a pose    if (pose.type == TLMPoseTypeUnknown || pose.type == TLMPoseTypeRest) {        // Causes the Myo to lock after a short period.        [pose.myo unlockWithType:TLMUnlockTypeTimed];    } else {        // Keeps the Myo unlocked until specified.        // This is required to keep Myo unlocked while holding a pose, but if a pose is not being held, use        // TLMUnlockTypeTimed to restart the timer.        [pose.myo unlockWithType:TLMUnlockTypeHold];        // Indicates that a user action has been performed.        [pose.myo indicateUserAction];    }}

内置的手势有这些:

TLMPoseTypeDoubleTap(拇指和中指连续点击两次)

TLMPoseTypeFist(握拳)
TLMPoseTypeWaveIn(向内挥手,戴在右手就是往左挥手)
TLMPoseTypeWaveOut(向外挥手)
TLMPoseTypeFingersSpread(按理来说是类似cross finger的意思,但似乎我没咋触发过这个pose)

基本就这么点儿代码。明天我们尝试把这个跟其他功能联系起来哈。

转载地址:http://elazx.baihongyu.com/

你可能感兴趣的文章
Apache Storm 官方文档 —— FAQ
查看>>
iOS 高性能异构滚动视图构建方案 —— LazyScrollView
查看>>
Java 重载、重写、构造函数详解
查看>>
【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏
查看>>
【云栖大会】探索商业升级之路
查看>>
HybridDB实例新购指南
查看>>
C语言及程序设计提高例程-35 使用指针操作二维数组
查看>>
华大基因BGI Online的云计算实践
查看>>
深入理解自定义Annotation,实现ButterKnif小原理
查看>>
排序高级之交换排序_冒泡排序
查看>>
Cocos2d-x3.2 Ease加速度
查看>>
[EntLib]关于SR.Strings的使用办法[加了下载地址]
查看>>
中小型网站架构分析及优化
查看>>
写shell的事情
查看>>
负载均衡之Haproxy配置详解(及httpd配置)
查看>>
linux虚拟机拷贝之后联网出错
查看>>
Linux文件系统探索
查看>>
标准与扩展ACL 、 命名ACL 、 总结和答疑
查看>>
查找恶意的TOR中继节点
查看>>
MAVEN 属性定义与使用
查看>>