Проект содержит программное обеспечение для Raspberry Pi Zero W, реализующие логику бионического протеза руки человека. Краткое описание функциональных возможностей:
- Исполнение жестов протеза
- Взаимодействие с внешними системами по Bluetooth (передача данных в protobuf структурах через самописный протокол)
- Обработка показаний миоэлектрических датчиков и выделение паттернов жестов. Количество распознаваемых паттернов 2.
- Передача управляющих команд для установки положения линейных двигателей по интерфейсу SPI на контроллер линейных приводов
Схема контроллера доступна в репозитории RaspberryProsthesisCircuit
- Документация
- Контроллер управления линейными приводами на STM32F103C8T6
- Приложение для конфигурирования протеза для ПК на WPF
- Приложение для управления протезом для Android
- Схемотехника драйвера моторов STM32F103C8T6 (Altium Designer)
- Схемотехника контроллера управления Rasbperry Pi Zero W (Altium Designer)
- Сервер для одновременной работы с несколькими протезами по MQTT на Kotlin
- MQTT proxy для контроллера управления протеза для STM32F767ZITX
Программное обеспечение контроллера представлено в виде уровневой архитектуры. За счет того, что в проекте используется Raspberry Pi Zero W с операционной системой Raspberry Pi Os, то в разработке уровеня драйверов и оборудования нет необходимости. Исключением является внешнее АЦП для которого используется пакет Adafruit_ADS1x15. На уровне HAL имеются различные сервисы для более удобной и абстрактной работы с оборудования, там происходит преобразование данных из бинарного формата в доменные объекты.
Уровень программного обеспечения представлен в виде сети процессов Кана. Каждая функция протеза является отдельным потоком, взаимодействие с которым происходит с помощью очередей Python Queue. Так, имеются потоки для исполнения жестов, обработки команд, телеметрии. Наиболее интересным потоком является поток распознавания миоэлектрических паттернов P5.
Распознавание миоэлектрических паттернов осуществляется следующим образом: происходит считывания ЭМГ показаний с частотой 100-130Гц с одноканального электрода. В потоке ЭМГ данный происходит выделение сигнала паттерна за счет расчета среднего по окну из 5 элементов с пороговым значением 400. Над полученным сигналом проводится сегментирования на 10 сегментов и пока каждому сегменту происходит извлечение MAV (mean absolute value) признаков. Полученные признаки передаются в обученную KNN сеть с 10 входами и 2 выходами. KNN сеть обучена для двух паттернов: медленного и резкого сгибания мышц руки. В результате точность для двух паттернов достигает свыше 95%, а среднее время распознавания – 16мс, что позволяет использовать алгоритм в реальном времени.
- MIT license
- Copyright 2020 © Paul Rozhkin.