Получение данных от Myo прекращается через некоторое время

Я использую этот (https://github.com/dzhu/myo-raw) проект для подключения Myo Armband к моему ПК (под управлением Windows) и получения необработанных данных ЭМГ. У меня есть две проблемы, связанные с этим:

1) Получение данных крайне медленное, но автор предупреждал об этом. Кажется, что отключение всего, кроме ЭМГ, ускоряет получение данных, но есть ли способ ускорить еще больше? Кстати, в Linux все нормально;

2) Прием данных через некоторое время вылетает. Я заметил, что он обычно падает, когда я пытаюсь делать «сильные» жесты, такие как сжатие кулака и перемещение правой руки вправо. Объяснений этому у меня нет, так как под линуксом все работает нормально.

Я задаю свой вопрос здесь, потому что страница GitHub кажется мертвой.


person Timofey Goritsky    schedule 22.05.2017    source источник


Ответы (2)


Для № 1 вы можете попробовать использовать официальный протокол Bluetooth вместо myo-raw, поскольку это библиотека предшествует выпуску официального заголовка. Не уверен, что это даст вам лучшие результаты, но это вариант.

Единственная причина № 2, основанная на Myo, может заключаться в том, что Myo засыпает из-за отсутствия движения, но, учитывая, что вы делаете жесты, я предполагаю, что это не так. Я бы дважды проверил myo-raw (например, open PR) и ваш код, чтобы убедиться, что что-то не так.

person Scott Greenberg    schedule 22.05.2017
comment
Я проверил MyoConnect, и он работает нормально. Myo-raw прекрасно работает и с Linux, так что проблема не в самой повязке. Похоже, проблема с последовательным портом, но до мая я с этим не сталкивался. Изменить: это происходит на другом компьютере под управлением Windows. - person Timofey Goritsky; 22.05.2017
comment
@TimofeyGoritsky Вы можете протестировать мою повязку здесь, как она работает. Это первый шаг для обнаружения проблемы. - person Nejc Galof; 25.05.2017

Итак, проблема была настолько тривиальной, что я винил себя в течение нескольких часов. При добавлении n = self.ser.inWaiting() и print(n) к BT.recv_packet() я заметил, что n растет экспоненциально, пока не достигнет 12 килобайт, а затем соединение обрывается. Добавление этого:

        ret = self.proc_byte(ord(c))
        if ret:
            if n >= 100:
                self.ser.flushInput()

Решил проблему.

person Timofey Goritsky    schedule 05.06.2017