В мире, где все мы хотим контролировать свои гаджеты с помощью движений, которые заставляют нас чувствовать себя волшебниками, повязка Myo — это благословение. Он обеспечивает очень аккуратное управление жестами в приложениях впечатляюще простым способом. Хотя вы можете реализовать Myo API в iOS и Android, я в глубине души являюсь разработчиком JavaScript и люблю подключать подобные вещи к серверам Node — так что в этой статье мы сделаем именно это! Мы рассмотрим использование пакета Myo npm для переноса этой функциональности на сервер Node.
Что вам нужно
- Повязка Мио
- Myo Connect — это нужно будет установить и запустить на вашем компьютере.
- Windows или Mac OSX — в настоящее время Myo, похоже, не поддерживает Myo Connect для Linux.
- Основное понимание использования Node — Питер Диркс из SitePoint написал довольно полное руководство по запуску с npm .
Начиная
Прежде чем идти дальше, убедитесь, что:
- Вы носите свою повязку Myo, и она заряжена и готова к работе!
- Bluetooth-адаптер вашего Myo подключен к USB-порту, ближайшему к руке, на которой надет ваш браслет Myo (новое требование для более поздних версий программного обеспечения Myo).
- Myo Connect работает на вашем ПК
- Вы помните, как разблокировать повязку Myo, чтобы она распознавала ваши жесты (коснитесь большого и среднего пальца).
Если у вас есть все это отсортировано, мы можем начать!
Начиная свой проект
Создайте новый проект с поддержкой npm на своем компьютере с помощью обычного npm init
(или создав собственный файл package.json
). Установите модуль npm с помощью npm install myo --save
и создайте файл index.js
(или любой другой файл, index.js
вы предпочитаете для основного узла) для своего кода. Если вы хотите запустить сервер, выполните обычную команду node index.js
.
Вы также можете использовать те же концепции на внешнем интерфейсе через Browserify — однако мы не будем рассматривать Browserify в этой статье.
Запустите файл index.js
с оператором require для добавления в модуль Myo npm
var Myo = require("myo");
Затем запустите Myo.connect()
с Myo.connect()
пространством имен (например, com.yourCompany.yourProject
):
Myo.connect("com.sitepoint.myoarmbandcontroller");
Обнаружение Myo Соединений
Чтобы определить, когда подключается Myo Armband, мы можем использовать событие "connected"
. Он предоставляет переменную data
и timestamp
при успехе:
Myo.on("connected", function(data, timestamp) { console.log("Myo successfully connected. Data: " + JSON.stringify(data) + ". Timestamp: " + timestamp + "."); });
Переменная data предоставляет объект JSON, который выглядит следующим образом:
{ "mac_address" : "2b-or-n0-2b-QQ-QQ", "myo" : 0, "name" : "Stark", "timestamp" : "35259097032", "type" : "connected", "version" : [1,5,1970,2] }
Он предоставляет MAC-адрес Myo, индекс Myo (если у вас их больше одного), имя, которое вы дали этому Myo, отметку времени его подключения (точно такую же, как переменная timestamp
также доступная в обратном вызове выше). ), тип события, вызвавшего эти данные, и версия Myo Connect, которую вы используете.
Существует гораздо лучший способ извлечения данных о вашей повязке Myo из вызовов событий, подобных этому, который мы рассмотрим позже в этой статье ( номер версии выглядит как массив выше, он указывается как номер версии, разделенный точки в другой версии вызова ).
Обнаружение поз
Наиболее распространенная вещь, для которой каждый разработчик хочет использовать Myo Armband — это определять, когда пользователь делает определенные позы. «Позы» — это то, что Мио называет особыми жестами, которые Мио понимает. К ним относятся fist
, fingers_spread
, wave_in
, wave_out
и double_tap
.
Чтобы обнаружить позы, мы наблюдаем за ними, используя функцию on()
. Вот пример обнаружения разложенных пальцев:
Myo.on("fingers_spread", function() { console.log("Fingers spread!"); });
Обнаружение всех других поз работает точно так же, просто отключите fingers_spread
для одного из других событий, перечисленных ранее ( fingers_spread
, wave_in
, wave_out
, double_tap
, double_tap
).
Другой способ определения поз — это наблюдать за общим событием pose
и затем читать отправленные данные. Событие pose
срабатывает в каждой позе, которую Myo распознает:
Myo.on("pose", function(pose_name) { console.log("Myo pose detected! Pose was: " + pose_name + "."); });
Этот метод полезен, если вы хотите ответить на несколько типов поз одинаково:
Myo.on("pose", function(pose_name) { switch (pose_name) { case "wave_in": case "wave_out": console.log("You are waving!"); break; } });
Получение данных Myo в событиях
Когда вы начнете использовать события, если вы продолжите через структуру connected
события, вы заметите, что получение data
о нарукавной повязке не работает. Например, это не будет работать:
Myo.on("pose", function(data, timestamp) { // Note for those copying this code - it is an example of what not to do! Don't copy paste this into your code! });
Эта переменная data
теперь возвращает имя позы, как вы могли вспомнить из предыдущего примера. Итак, что нам делать, если мы хотим узнать о повязке Myo, которая вызвала событие? Существует гораздо лучший способ получить данные о нарукавной повязке Myo — ключевое слово this
. Например:
Myo.on("fingers_spread", function() { console.log("Fingers spread!"); console.log(this); });
Это fingers_spread
целую кучу подробностей о Myo Armband, который только что был отправлен через событие fingers_spread
. Эти данные выглядят так:
{ "macAddress": "2b-or-n0-2b-QQ-QQ", "name": "Stark", "connectIndex": 0, "locked": false, "connected": true, "synced": true, "batteryLevel": 0, "lastIMU": { "orientation": { "w": -0.54913330078125, "x": -0.4156494140625, "y": -0.362060546875, "z": -0.6282958984375 }, "accelerometer": { "x": 0.1279296875, "y": 0.8095703125, "z": 0.40673828125 }, "gyroscope": { "x": -3.8125, "y": -12.625, "z": 10.9375 } }, "arm": "left", "direction": "toward_elbow", "warmupState": "warm", "orientationOffset": { "x": 0, "y": 0, "z": 0, "w": 1 }, "events": [], "connectVersion": "1.5.1970.2", "lastQuant": { "w": -0.54913330078125, "x": -0.4156494140625, "y": -0.362060546875, "z": -0.6282958984375 }, "lastPose": null }
Хотя я не буду подробно рассказывать обо всем, что здесь происходит, здесь есть над чем поработать! У нас есть MAC-адрес и имя нарукавной повязки, заблокирован ли он, уровень заряда батареи (хотя кажется, что он не проходит правильно), данные последнего IMU (Inertial Measurement Unit) (9-осевой IMU отслеживает движение гироскопа, акселерометра и ориентации повязки — возможности безграничны с данными, которые он может предоставить) и многое другое.
Другие возможности
Существует множество более сложных опций отслеживания, которые вы можете изучить с помощью Myo, используя данные EMG и IMU, которые он предоставляет для обнаружения полностью пользовательских жестов, это то, что мы исследуем в следующей статье!
Вывод
Как вы можете видеть, настройка функциональности жестов Myo на сервере Node на самом деле приятна и проста, но в то же время она предоставляет массу действительно интересных возможностей. В рамках этих функций обратного вызова на каждом жесте вы можете запускать все, что работает с Node и npm — подключать свои устройства IoT, отправлять некоторые триггеры IFTTT , управлять NodeBot на основе Arduino или что угодно еще!
Если вы волшебным образом управляете приложением на основе Node или JavaScript с помощью повязки Myo и приведенных выше примеров кода, пожалуйста, поделитесь ими в комментариях или свяжитесь со мной в Twitter ( @thatpatrickguy ). Мне нравится видеть, что делают разработчики в сообществе!