Робот YuMi от ABB, один из моих любимых роботов в современном промышленном мире, имеет одно явное отличие от большинства других роботов. У него две руки! Стороннему наблюдателю это может показаться неважным, но для тех, кто занимается автоматизацией, это большой шаг вперед. Все те задачи, которые так сложно было выполнить одной рукой (робота), например соединение деталей, теперь стали возможными. Возможно, то есть для тех, кто понимает параллельное программирование. Но мы хотели, чтобы ЛЮБОЙ мог программировать YuMi. Мы хотели создать простую технику программирования… но как выглядит параллельное программирование на языках программирования для начинающих?

Ну, в Scratch это выглядит так (см. выше). Не красиво. Когда программа запускается (вверху слева), она выполняется до тех пор, пока не достигнет команды «широковещательная рассылка». Так начинается координация между задачами, поскольку блок, ожидающий «готовности» (вверху справа), будет выполняться. Такое обозначение может сбить с толку новичков… Откуда мне знать? Я научил программировать многих людей, как детей, так и взрослых, и эта форма параллельного программирования на основе радиовещания разочаровала каждого из них.

В профессиональных инструментах должно быть лучше/по-другому, верно? Ну не совсем. Оказывается, если нет очевидных исследований, на которые можно было бы опираться, промышленные разработчики, испытывающие нехватку времени, вынуждены делать все возможное, используя текущие подходы. Выше мы видим RSOY, современное простое в программировании решение для YuMi. Как видите, он координирует работу левой руки (левый столбец) и правой руки (правый столбец) с помощью команды синхронизации (MoveSync) и переменной синхронизации (s1). Этот подход может быстро запутать, поскольку команды синхронизации НЕ обязательно должны иметь совпадающие номера строк.

Давайте сделаем шаг назад… какая координация нам нужна, чтобы работать двумя руками. Что ж, нам нужно иметь возможность перемещать две руки вместе, как при взятии средней части (вверху), и нам нужно иметь возможность ждать, пока другая рука закончит, как при размещении первых двух частей на стержне. (выше). С помощью этих двух методов синхронизации, хотя они и кажутся ограниченными, мы можем реализовать широкий спектр важных задач.

Руководствуясь этим мышлением, мы создали Duplo, блочную среду программирования, в которой реализованы эти два механизма координации. В строке 3 выше вы можете видеть, что правая рука следует за левой, поскольку эти две команды связаны. В строке 6 вы можете увидеть две программы, ожидающие друг друга, прежде чем продолжить, со связанной командой «Подождите друг друга».

Чтобы усилить связь между этими связанными командами на двух разных холстах (правом и левом), они перемещаются вместе, как показано выше. Перемещение команды ожидания на левый холст также перемещает соответствующую команду ожидания на правый холст, прямо напротив него. Такое пространственное представление кажется естественным большинству начинающих программистов; если команды движутся вместе и находятся прямо напротив друг друга, они должны выполняться вместе!

Пробуем это в реальном мире, с настоящим роботом…

Чтобы проверить наш подход, мы провели эксперимент, сравнив наш блочный прототип с текущим промышленным подходом (RSOY). Обзор эксперимента выше.

Мы особенно гордимся тем, что нам удалось привлечь более 50 участников к проведению эксперимента, который занял более двух часов. Непросто!

Задачи, которые мы просили пользователей выполнить, были относительно простыми задачами по выбору и размещению, с той особенностью, что решение требовало параллельного программирования. На рисунке ниже вы видите окончательное решение после запуска программы и перемещения деталей роботом. Первая задача — подобрать синюю деталь, которая начинается на подносе справа, и надеть ее на стержень. Вторая задача — сделать то же самое с красной частью, которая начинается на лотке слева. Последняя задача — подобрать зеленую часть, которая начинается на подносе спереди. Чтобы поднять эту деталь, нужны две руки.

Ниже приведен GIF-изображение, показывающее выполняемое решение, которое также было показано в другом GIF-изображении выше. Как видите, все детали собраны и помещены на стержень посередине. Первые два варианта требуют, чтобы две разные руки робота работали независимо, но их движения должны быть скоординированы, иначе они столкнутся друг с другом. Третий выбор требует совместной работы обеих рук, поскольку деталь слишком тяжелая, чтобы ее можно было поднять без соскальзывания одной рукой. Эта задача была относительно простой, но включала в себя множество проблем координации, с которыми пользователи сталкиваются при программировании роботов.

Полученные результаты

Что ж, после того, как мы попросили 26 человек выполнить задачи, используя наш прототип блочного подхода, и еще 26 человек, используя промышленное программное обеспечение RSOY, мы начали видеть явные различия в их результатах.

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

Если посмотреть на те же данные по тем, кто использовал промышленное программное обеспечение RSOY, мы увидим, что у них были большие трудности. Трое участников не смогли выполнить даже первое задание, а 14 не смогли выполнить все задания.

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

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

«Было очень легко использовать блоки, чтобы попросить робота выполнить действия, соединить блоки вместе и разбить их на части. Также было легко перемещать руки робота». — Участник 3

«Поначалу я не знал, какая рука правая или левая. Еще я не знал, как именно переучить позицию, но через некоторое время у меня это получилось». — Участник 5

Если вас интересуют кровавые подробности, читайте газету! Если нет, вот записи в шпаргалке…

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

Интересно, основываясь на успехе своего проекта Wizard Easy Programming, который позволил использовать блочное программирование для одноруких промышленных роботов, компания ABB вскоре внедрит Duplo для двурукого YuMi?

Привет, ABB, если тебе нужна помощь, я на расстоянии всего лишь одного письма!