最近公司需求Myo做一個Demo涩哟,我到網(wǎng)上查了一下烟瞧,國內(nèi)竟然沒有任何關(guān)于Myo臂環(huán)的開發(fā)文檔。所以就把我的一些經(jīng)驗(yàn)記錄下來跟大家分享染簇。
Myo共支持五種手勢輸入
Fist: 握拳
Wave in:內(nèi)擺手
Wave out:外擺手
Double tap:雙擊
Fingers spread:伸開五指
在官方提供的例子中参滴,ColorBoxByPose 中提供了實(shí)現(xiàn)以上五種手勢的代碼。
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);
}
}
}
分別對比當(dāng)前的手勢是否等同于已經(jīng)定義好的五種手勢锻弓。通過這個腳本就能對Myo進(jìn)行簡單的開發(fā)了砾赔。關(guān)于這幾種手勢官方的例子已經(jīng)很詳細(xì),就不多做贅述。
ThalmicMyo
ThalmicMyo是核心腳本暴心,里面的關(guān)鍵參數(shù)如下妓盲;
1、 armSynced是一個bool參數(shù)专普,為true表示Myo已經(jīng)識別到手臂悯衬。注意在官方自帶的例子中只有armSynced為true時才能調(diào)用Myo定義好的幾種手勢。
2檀夹、 arm定義右手臂筋粗、左手臂。
3炸渡、 pose里面存儲著Myo探測到的手勢娜亿,UnKnow表示當(dāng)前手勢-----。
4蚌堵、 Accelerometer Myo當(dāng)前加速度計數(shù)器买决,大概0.8 m/s^2
5、 Gyroscope 陀螺儀 軸的速度/秒
6吼畏、 isPaired 是否配對
7督赤、 Vibrate Myo所提供的震動類型(Short\VibrationType),轉(zhuǎn)到定義發(fā)現(xiàn)Myo定義了三種震動類型
public enum VibrationType
{
Short,
Medium,
Long
}
8泻蚊、 Unlock 解鎖類型(Timed/Hold)
Timed=0; 開啟一段固定的時間
Hold=1:一直到通知解鎖
注意官方并不推薦"import Thalmic.Myo"這樣引入命名空間躲舌,因?yàn)門halmic.Myo包含了一些類型(如Vector3)會與Unity內(nèi)置的類型相沖突。
Myo中你最常用的是手勢跟震動類型藕夫,要訪問這些功能孽糖,你需要添加如下聲明:
Using Pose = Thalmic.Myo.Pose;
Using VibrationType = Thalmic.Myo.VibrationType;
另外我發(fā)現(xiàn)在官方調(diào)用中,每次使用手勢都調(diào)用一下ExtendUnlockAndNotifyUserAction這個函數(shù)毅贮,拓展解鎖并通知用戶操作办悟。實(shí)際測試我發(fā)現(xiàn)所謂通知用戶操作只是短震一下,黑人問號臉.jpeg。至于基本鎖定策列滩褥,沒有發(fā)現(xiàn)不同病蛉。
// 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后會調(diào)用這個函數(shù)初始化Myo铺然。所以我們是不是可以關(guān)閉這個方法的調(diào)用來實(shí)現(xiàn)用戶摘下Myo來給另一個用戶不需要重新訓(xùn)練Myo呢?
并不能酒甸。
jointOrientation
這個腳本主要實(shí)現(xiàn)了魄健,怎么把Myo的方向轉(zhuǎn)化為用戶的方向以及震動。
本文的內(nèi)容是原創(chuàng)的插勤,未經(jīng)作者允許禁止任何形式的轉(zhuǎn)載沽瘦。