Статьи

Управление жестами через Myo Armband в Node.js

В мире, где все мы хотим контролировать свои гаджеты с помощью движений, которые заставляют нас чувствовать себя волшебниками, повязка Myo — это благословение. Он обеспечивает очень аккуратное управление жестами в приложениях впечатляюще простым способом. Хотя вы можете реализовать Myo API в iOS и Android, я в глубине души являюсь разработчиком JavaScript и люблю подключать подобные вещи к серверам Node — так что в этой статье мы сделаем именно это! Мы рассмотрим использование пакета Myo npm для переноса этой функциональности на сервер Node.

Кредит Фотографии: Лаборатории Thalmic

Кредит Фотографии: Лаборатории Thalmic

Что вам нужно

  • Повязка Мио
  • 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 ). Мне нравится видеть, что делают разработчики в сообществе!