Вы хотите создать простую капсулу, способную распознавать естественные движения трости? Хотите внедрить машинное обучение / искусственный интеллект на микроконтроллерах и других устройствах? Мы покажем, как создать GesturePod — самонастраиваемое устройство, которое распознает движения в режиме реального времени. Эта инструкция наглядно показывает, как при помощи GesturePod сделать интерактивной любую «белую трость». GesturePod упрощает доступ к смартфонам и другим домашним устройствам для людей с нарушениями зрения и пожилых людей. С помощью GesturePod можно управлять устройствами, выполняя движения тростью. К примеру, ответить на входящий звонок двойным покачиванием трости из стороны в сторону.


Конструкция капсулы и схема электронной подсистемы приводятся здесь [гиперссылка будет добавлена]. Механизм распространяется по открытой лицензии MIT, текст которой можно найти здесь. Данные для обучения распознаванию 5 движений описаны в нашей публикации для UIST 2019 и доступны здесь.


В этой инструкции мы подключим модуль датчика, включающего гироскоп и акселлерометр (IMU) MPU6050 к MKR1000 (микроконтроллеру ARM класса Cortex M0+), и развернем предварительно обученную модель, которая распознает 5 движений — двойное касание, поворот вправо, поворот влево, вращение и двойное покачивание. Затем эти движения передаются на смартфон через Bluetooth Low Energy (BLE).


У вас нет времени на создание аппаратной части? Попробуйте запустить на своем компьютере эту симуляцию.


Во второй части этого руководства вы увидите, как разработать и обучить модель машинного обучения для распознавания ваших движений.


Одно изображение стоит тысячи слов — а видео стоит больше! Поэтому в помощь предлагаем три небольших видеоинструкции:


  1. Видео «Сборка капсулы GesturePod без питания» (Raw set-up).
  2. Видео «Сборка капсулы GesturePod с автономным питанием» (Stand-alone GesturePod).

Как видно из инструкций и текста, разница в вариантах, показанных в первом и втором видео — в наличии батареи и выключателя и, соответственно, в наличии автономного питания или необходимости в использовании блока питания.

  1. Видео «Интеграция GesturePod и трости» (Integrating GesturePod with cane)

Компоненты и инструменты


Электроника


  1. Микроконтроллер Arduino MKR1000.
  2. Датчик MPU6050.
  3. Модуль HM-10 BLE.
  4. Литий-полимерная батарея 3,3В 700 мА/ч (опционально) с двухштырьковым переходником JST 2.0 PH.

В качестве альтернативы HM-10 можно использовать модуль Bluetooth HC-05. Не забывайте, что при развертывании системы, работающей от аккумулятора, традиционный Bluetooth потребляет больше энергии, чем Bluetooth Low Energy (BLE).


Корпус и крепеж


  1. Описанная выше электронная начинка зашивается в корпус, который можно распечатать на 3D-принтере из этих файлов дизайн-макета.
  2. Металлические хомутики для надежного крепления капсулы к трости.
  3. Винты для фиксации корпуса.
  4. Выключатель для включения и выключения системы.

После этого капсула закрепляется на «белой трости», как показано в видео. Вы также можете обойтись без корпуса капсулы и приклеить систему скотчем к любой палке или трубке. Если выравнивание осей MPU6050 будет последовательным, все будет работать нормально.


Программное обеспечение


Получите последнюю версию Arduino IDE. Эту инструкцию мы протестировали с Arduino 1.8.5 на Windows 10. Хорошее руководство по работе с MKR1000 можно найти здесь. Для проверки системы рекомендуем запустить пример blink.


Инструменты


  1. Пистолетный паяльник.
  2. Винты.
  3. Фигурная отвертка («звездочка»).
  4. Изоляционная лента.

1. Подключение



Мы подготовили видеоинструкции по двум типам установки: (a) «Сборка капсулы GesturePod без питания» (Raw set-up) — ей посвящено первое видео, и (b) «Сборка капсулы GesturePod с автономным питанием» (Stand-alone GesturePod) — ей посвящено второе видео.


  • Сборка капсулы без питания позволит вам полностью реализовать весь алгоритм машинного обучения без потерь в функциональности. Подключение происходит следующим образом:


    MKR1000   ----------------> HM10
    VCC       ----------------> VCC  
    GND       ----------------> GND  
    0 (DO)    ----------------> RX   
    1 (D1)    ----------------> TX  
    
    MKR1000   ----------------> MPU6050
    VCC       ----------------> VCC  
    GND       ----------------> GND  
    SDA (D11) ----------------> SDA   
    SCL (D12) ----------------> SCL

  • При сборке капсулы с автономным питанием структура из первого видео интегрируется с батареей и выключателем. Это позволяет пользоваться системой без подключения к блоку питания и экономить заряд батареи, когда система выключена.



Для верификации подключения MPU6050 мы рекомендуем запустить пример testMPU.ino.


2. Монтаж капсулы в корпус


Убедившись, что данные с датчика можно получить методом опроса, вы можете монтировать электронную начинку в корпус, который можно распечатать на 3D-принтере при помощи этих файлов.


Убедитесь, что у вас есть 3 детали:


  • Основание капсулы.
  • Крышка капсулы.
  • Зажим-хомутик.

Сначала в углубление в основании капсулы устанавливается датчик MPU6050. Затем поверх MPU6050 в корпус вкладывается MKR1000


Здесь расхождение текста оригинала с авторской видеоинструкцией. В оригинале говорится, что микроконтроллер монтируется на опорные столбики (columnar supports), но как мы видим, во всех видеоинструкциях автора (см. https://drive.google.com/file/d/13BYBcYroHY_c4nu1DdYQr4B14SrqJtRL/view 1:50 и/или https://drive.google.com/file/d/1JnsX-Kr7Nm77E2ReGSzVNo0cjskrdD8r/view 1:00) никаких столбиков нет: между МК и датчиком автор проклеивает кусочек ленты и кладёт МК, висящий на проводах, поверх датчика, а затем привинчивает его к основанию капсулы винтами.

Модуль HM-10 BLE крепится в подвешенном состоянии между выступами в крышке капсулы. Затем крышка и основание капсулы скрепляются клиновыми соединениями. Конструкция дополнительно фиксируется винтами. После прикрепления к капсуле хомутика систему можно закрепить хомутиком на трости, как показано на рисунке.


MPU6050 должен быть выровнен по оси капсулы, как показано в видеоинструкции.

3. Кодирование MKR1000 и подключение к телефону


Теперь до реализации функции распознавания движений на периферическом устройстве вам остался всего один шаг...


Скачайте код или клонируйте репозиторий onMKR1000.ino. Соберите и загрузите код с помощью Arduino IDE. Не забудьте выбрать в качестве платы MKR1000. Откройте монитор последовательного интерфейса и установите скорость BAUD равной 115200. Теперь вы можете увидеть прогнозируемые классы. Выполните движения, как показано в видео «‎Интеграция GesturePod и трости»‎, соответствующие движения будут прогнозироваться.


Детектированные движения также передаются по BLE. Вы можете использовать приложение nrF Connect app для подключения по BLE и передавать данные о движениях на свой телефон. Чтобы использовать эти движения для запуска соответствующих действий на телефоне, вы можете загрузить и установить приложение «Interactive Cane» от [ссылка скоро появится...]. Не забудьте дать все необходимые разрешения и включить Bluetooth и службы определения местоположения.


Если вы используете BLE, нужен телефон с поддержкой BLE.

Что дальше?


Это руководство было посвящено созданию GesturePod и развертыванию предварительно обученной модели машинного обучения для распознавания движений. В следующем руководстве вы узнаете, как обучить и развернуть модель машинного обучения для распознавания ваших движений. Вы уже узнали достаточно, чтобы приступить к работе? Тогда перейдите по ссылке, чтобы приступить к обучению новой модели для распознавания собственных движений.


The Things Network Conference — руководство еще короче


Пол Фостер составил руководство короче (и лучше?) этого для практического семинара в рамках конференции The Things Network Conference, UK (2019). Вместо MKR1000 используется Adafruit Trinket M0. Кроме того, этот базовый GesturePod показывает распознаваемые движения (соблюдая британские правила написания, так как конференция проходила в Великобритании) при помощи RGB-светодиода на Adafruit Trinket M0, а не через Bluetooth, как при полной реализации GesturePod. В руководстве также рассказывается о том, как обучить новую модель пользовательским движениям.




Комментарии (2)


  1. atc
    00.00.0000 00:00
    +2

    Очередной авто(?)перевод, который не подвергли минимальной вычитке. SkillFactory должно быть стыдно за такие статьи в своём блоге.


  1. kvark128
    00.00.0000 00:00

    Верно ли я понимаю, что при использовании трости по прямому назначению, вся эта электроника оказывается бесполезной?