Бионический протез руки: Контекстное поведение протеза

e8e64a8a934fc160789290b1c9228f8c.jpg

Всем привет! Я продолжаю писать цикл статей, в которых рассказываю о своем проекте бионического протеза руки.

Часть 1

Часть 2

Часть 3

Часть 4 <- Вы здесь

В предыдущей статье мы остановились на том, что исследовали различные схемы управления кистью, и по результатам был сделаны следующие выводы. Прямое управление кистью со всеми тремя степенями свободы является сложным, требует высокой координации и контроля, а наиболее удобной схемой оказалась та, в которой кисть переключается пользователем в то или иное статичное состояние, которое наиболее подходят в данной ситуации. В принципе, это не новость, поскольку многие коммерческие бионические протезы уже давно пошли по этому пути — они позволяют выбирать состояние кисти, то есть позу, в которой согнуто запястье и пальцы, из наперед заданного набора, в котором каждая поза предназначена для взаимодействия с каким-то определенным объектом. Это хорошее и простое решение, однако оно создает несколько трудностей. Первая, и самая главная, заключается в том, что большинство бионических протезов являются трансрадиальными, то есть предназначены для восполнения утраченной руки ниже локтевого сустава. При этом локтевой сустав остается подвижным и дает пользователю возможность гораздо более точно контролировать бионическую кисть. В рамках же моего проекта я пытаюсь решить более сложную задачу трансхьюмерального протеза, то есть предназначенного для восполнения утраченной руки выше локтевого сустава. Второй трудностью является то, что фиксированные позы кисти предоставляют ограниченный контроль над объектом, с которым происходит взаимодействие, и эту ограниченность приходится компенсировать вспомогательными движениями других частей тел — доворачивать кисть засчет других суставов руки и торса и более интенсивно менять положение тела относительно объекта, с которым происходит взаимодействие.

Обе эти трудности можно разрешить, если мы позволим протезу иметь некое собственное поведение, которое будет дополнять действия пользователя и облегчать выполнение задачи. Опять же, это не новость. Одним из передовых направлений исследования в области протезирование является применение искусственного интеллекта для распознавания намерения пользователя с последующей корректировкой собственных движений, чтобы, в идеале, помочь пользователю совершить то действие, которое он задумал. Разумеется, на данном этапе решения с искусственным интеллектом не являются надежными — процент распознавания отличен от 100, ИИ требует долгого обучения, а потенциальная стоимость такой технологии может оказаться неприемлемой для многих пациентов. Те, кто читал предыдущие мои статьи, знают, что я пока что работаю в парадигме обычных детерминированных алгоритмов, и в этой же парадигме я предлагаю попробовать решить данную задачу — дать протезу собственные контекстные поведения.

e4365cdb9e3fd5402a74707d88bf6563.jpg

Чтобы лучше понять направление мысли, я предлагаю отвлечься на, казалось бы, никак не связанную с текущей тему. На картинке представлен ряд скриншотов из моей любимой игры — Half-Life 2. Если вдруг среди читателей окажется кто-то, кто не играл в этот шедевр и оду физике и интерактивности в видеоиграх, то я кратко опишу, что происходит на скриншотах. На каждом из них происходит взаимодействие с тем или иным игровым объектом — опускание рычага, открытие двери с поворотной ручкой, поворот вентиля, поднятие и переноска банки и ящика. И у этих скриншотов есть кое-что общее — на них не видно рук протагониста, молчаливого физика в экзоброне Гордона Фримана. Игровая механика такова, что вы подходите к объекту и просто нажимаете кнопку действия, после чего совершается манипуляция с объектом, при этом данная манипуляция не вызывает никаких вопросов у игрока, поскольку является ожидаемой, и совершается так, как и ожидал игрок. Сегодня в играх при взаимодействии с интерактивными элементами стараются добавлять анимации рук, но это не меняет сути происходящего — вы подходите к объекту и изъявляете желание провзаимодействовать с ним определенным образом, а все остальное за вас совершает игровая механика. Примерно также работают большинство бытовых операций, совершаемых руками в реальной жизни — мы не управляем сознательно отдельными суставами, мы имеем некое общее намерение совершить какую-то операцию с объектом, а руки эту операцию послушно выполняют.

Из этого примера можно сделать вывод, что для некоторых действий с определенными объектами можно реализовать некое контекстное поведение протеза, при котором пользователь будет совершать некие общие движения, например, приблизить кисть к объекту, дать команду на захват, дать команду на поворот, а далее протез сам будет выполнять это действие — поставить пальцы в наиболее эффективные для удержания объекта точки, доворачивать кисть и локоть так, чтобы было выполнено желаемое действие с объектом, обеспечивать постоянную ориентацию объекта в пространстве или, наоборот, его движение по желаемой траектории.

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

В исследованиях бионических протезов рук большую роль играет оценка эффективности протеза. Разумеется, для оценки были предложены различные наборы тестов — заданий, с которыми протез должен справиться. Для интересующихся предлагаю ознакомиться с большой обзорной статьей подобных тестов. На данный момент какого-то одного стандартизированного теста не существует, однако если пробежаться по ним всем, то мы увидим нечто общее — большинство тестов предлагают пользователю с протезом совершить некие операции с рядом объектов — это либо наиболее часто встречающиеся в быту предметы либо набор абстрактных геометрических фигур, имитирующих их. Значит, у нас уже есть первоначальный набор объектов и поведений для этих объектов, которые нам надо реализовать. В качестве примера я приведу таблицу из теста Линды Реcник и ее коллег, в которой перечислены объекты и действия с ними.

0e0ed5e82397e6a948851e1c18af0491.png

Реализовать все это не так уж просто, поэтому я начал с малого — попробовал имплементировать контекстные поведения для двух объектов — ложки и отвертки. Отвертки в списке нет, это уже моя собственная инициатива, поскольку я будучи хобби-электронщиков и моделистом гораздо чаще взаимодействую с отверткой, чем с представленными в списке инструментами — ножницами и молотком.

Результаты можно увидеть на демонстрации ниже, после которой я дам краткие комментарии к тому, что на видео происходит:

Первое, о чем хочется рассказать касательно новой версии протеза — исчез гироскоп с головы, и теперь рука является самостоятельным устройством. Причин у такого решения несколько. Первая и самая главная — управление головой хоть и добавляет точности, но заставляет пользователя усиленно контролировать движения головы, что является не очень удобным. Вторая причина — эстетика и эргономика. Мы пока что не в киберпанке, где торчащие из головы провода являются повседневностью, поэтому сенсор, даже если он будет беспроводным и замаскированным под цвет кожи или спрятанным среди волос все равно будет вызывать лишние вопросы и неудобства. Ну и, как оказалось, для того типа поведения, которое я пытаюсь реализовать, управление головой является избыточным, поэтому на данном этапе я от него отказываюсь, но вполне возможно вернусь к нему в будущем. За неимением датчика наклона головы управление плоскостью, вдоль которой двигается кисть (подробности в первой части) происходит засчет долгого удержания кнопки. То есть зажали кнопку, переставили плоскость и отпустили кнопку. Кнопка, напомню, симулирует работу миодатчика, то есть в реальности управление происходит сокращением мышцы (например бицепса). Таким образом нажатие, двойное нажатие и удержание соответствуют короткому сокращению, двум подряд сокращениям и сокращению и удержанию мышцы в напряженном состоянии (тут читатель может попробовать примерить это на себя и поиграть бицепсами — главное, чтобы коллеги не видели, если вы находитесь в офисе).

На видео продемонстрированы два режима работы — режим использования ложки и режим использования отвертки. В обоих режимах реализована некая стейт-машина, в которой протез последовательно переходит от одного состояния к следующему. В стартовой позиции протез движется без каких-либо ограничений, однако кисть старается сохранять определенный угол относительно земли для того, чтобы было удобно совершить захват объекта. Захват происходит по нажатию кнопки. После этого поведение протеза начинает различаться для двух режимов. Для ложки кисть во всех состояниях старается сохранять свою ориентацию относительно земли, чтобы ложка, удерживаемая ею также сохраняла свою ориентацию. Это необходимо, чтобы мы не опрокинули еду, когда будем переносить ее на ложке. По зажатию кнопки мы можем полностью обездвижить протез, чтобы он остался в своем последнем положении — это позволяет нам зачерпнуть еду ложкой засчет поворота предплечья. Наконец, когда мы подносим ложку к голове, кисть автоматически разворачивает ложку в сторону головы, чтобы облегчить прием пищи. Для отвертки стейт-машина сложнее. После захвата отвертки мы должны пройти через два состояния — в первом мы устанавливаем удаленность кисти от головы, во втором локтевой сустав фиксируется, и мы устанавливаем угол кисти и, соответственно, отвертки относительно земли. Это состояние является ни чем иным как pose mode из предыдущей статьи. После этого мы входим в последнее состояние, в котором зажатием кнопки мы вращаем отвертку по часовой стрелке, а при отпускании она автоматически вращается против часовой стрелки. Переход между состояниями вперед происходит по однократному нажатию кнопки, а назад — по двойному нажатию.

Заключение

Итак, нам удалось реализовать контекстное поведение для двух предметов, это хорошее начало. Далее можно работать на количество и начинать прописывать режимы для других предметов и действий. Остается вопрос того, как пользователь будет переключаться между ними. Конечно, можно сделать переключение так как это сделано в некоторых коммерческих моделях — с помощью телефона и специального приложения на нем, но мне бы хотелось, чтобы весь функционал протеза был сконцентрирован в нем самом и не требовал других внешних устройств. Пока что я пришел к идее, что можно разместить небольшой дисплей на самом протезе, а переключение будет осуществляться, например, засчет разворота предплечья (подобно меню на ранних iPod’ах с навигацией с помощью колеса). Кроме этого стоит подумать о каких-то алгоритмах, которые будут сглаживать движения протеза и делать их более естественными и не такими резкими. Но самое главное, чем я хотел бы заняться в ближайшее время — механикой. Маленькие сервомоторы sg90, засчет которых движется кисть, уже не удовлетворяют меня даже в рамках тестирования, поскольку не всегда выдерживают даже холостые нагрузки, когда кисть ничего не держит, из-за чего постоянно происходят их краши. Не знаю, связано ли это с недостаточным питанием самих моторов или с нарушением внутренней логики их контроллеров, но пора задуматься о том, как можно приводить в движение кисть более мощными моторами. Тут сразу встают две проблемы. Первая — вес. Проблема не такая большая, и я уверен, что ее можно будет решить с помощью некой пассивной поддержки руки, которую можно встретить в строительных экзоскелетах. Вторая, более серьезная проблема — где эти моторы разместить и как передавать их движение к кисти, возможно через подвижный локтевой сустав. Я нашел несколько интересных решений данной проблемы, но все они требуют деталей с большой точностью изготовления, поэтому этот этап проекта скорее всего затянется, и мне скорее всего придется наконец отложить картон и клей и познакомиться с 3д-печатью. В ближайшей перспективе я сфокусируюсь на другом проекте, связанным с этим — его виртуальном двойником, о чем я упоминал в предыдущей статье. Этот проект уже в разработке, и в ближайшем будущем я о нем расскажу. А пока что я с вами прощаюсь, всем спасибо за внимание! И как всегда, исходники и все материалы можно посмотреть на странице проекта на гитхабе.

© Habrahabr.ru