Робототехника – конструирование или программирование? А как быть с наладкой и эксплуатацией?
Первый звонок для меня прозвенел со словами главного эксперта на национальном чемпионате рабочих профессий по стандартам WorldSkills Russia в мае 2015 года. Звучал он примерно так: «Я главный эксперт – я знаю, что робототехника – это программирование».
Состязание проводились на удивительных учебных робототехнических платформах «Robotino» от компании FESTO Didactic. Роботы перемещались по площадке, что-то перевозили, загорались и гасли светофоры. На рабочих местах участников стояли ноутбуки – действительно было похоже, что идёт разработка серьезного программного обеспечения для управления мобильными роботами.
«Ладно,» - подумал я и побрёл к своим студентам, ожесточённо собирающим робота для выполнения задания WorldSkills Competition 2015 «Автоматизация офиса продаж» из конструктора Tetrix, - «в конце концов робототехника на равных объединяет в себе два начала – конструирование и программирование».
Действительно, взглянув на тестовый проект национального чемпионата 2015 можно увидеть довольно сложные алгоритмические задания по ориентированию роботов и использованию технического зрения, то есть уровень соревновательных задач был сравним с WRO. Можно было надеяться, что победители будут готовы решать задачи любой сложности, по крайней мере в программировании роботов.
Однако лишь спустя год в обсуждениях заданий нынешнего чемпионата выяснилось, что:
а) большинство экспертов не представляло себе, как решить те задания, поскольку они отличались от привычных задач, пригодных для выполнения на Robotino (об этом позже);
б) ни одна из команд не справилась с заданием полностью.
При этом нужно понимать, что система критериев для компетенции «Мобильная робототехника», в отличие от многих других компетенций, изначально предполагает возможность полного выполнения задания с получением максимума оценочных баллов и построена на фиксации прохождения роботом пунктов задания. Фактически, команда может либо совсем не понимать, как выполняется задание (но что она тогда делает на чемпионате), либо не успеет настроить параметры в программе управления, либо вмешаются какие-нибудь случайные факторы, например, разрядятся аккумуляторы робота.
Необычной также является методика проведения зачётной попытки. В любой момент в тренировочное время (а контрольное тоже, фактически, тренировочное) команда может провести «контрольную попытку», эксперты просмотрят «прокат» и поставят оценки. Формально обе зачётные попытки может разделять несколько часов, это даже могут быть две совершенно разные программы – время на создание обеих есть. А по окончании зачётных попыток команды может приступить к работе над заданием следующего дня. Хотя это и вызывает сомнение в плане удовлетворения тезиса о равенстве возможностей.
Но давайте сначала выясним, какие проблемы могут возникнуть при выполнении заданий тестового проекта чемпионата WorldSkills по компетенции «Мобильная робототехника» на оборудовании FESTO Didactic.
Техномагия Robotino
Истинное волшебство учебной роботизированной системы «Robotino» от FESTO Didactic вовсе не в блестящей инженерии, больших возможностях подключения дополнительных устройств и даже не в удобной и наглядной системе программирования. Истинное чудо платформы – это встроенная функция «пространственной» одометрии, прозрачно интегрированная в язык программирования.
В отличие создателей от прочих робототехнических систем, доступных в качестве учебных платформ, инженеры FESTO смогли воспользоваться фиксированной конфигурацией всенаправленного привода Robotino (три омни-колеса, расположенные на серединах граней равностороннего треугольника) и внедрили в систему управления роботом возможность задавать требуемое положение и ориентацию робота через указание двумерных координат в метрической системе. То есть достаточно «сказать» роботу: «Ты здесь, а я хочу, чтобы ты был вот здесь» и робот самостоятельно выполнит все расчёты и совершит нужное перемещение.
В Robotino реализована не только назначения конечной точки перемещения, но и явная одометрия – можно переместить робота в ручную и зафиксировать текущие координаты робота. Есть интересный побочный эффект у этого свойства – если робота переместить (перекатить) «случайно», то при выполнении программы он постарается вернуться к старому положению и продолжить движение оттуда. Одним из следствий этого свойства стало разделение труда между участниками команды – более крупный участник занимается роботом на поле и часто переносит его с места на место, чтобы не сбивать настройки положения.
Система позиционирования по одометрии у Robotino крайне эффективна – всего несколько миллиметров погрешности на условный метр перемещения и всего несколько градусов отклонения после полного объезда площадки. Фактически такая точность означает, что роботу в большинстве случаев не нужны больше вообще никакие иные средства навигации, его лишь нужно «верно выставить» на стартовую позицию. Опытные участники соревнований понимают это и изобретают свои способы установки. Хотя никакого секрета здесь нет – например, линия сварки корпуса размещена строго на оси симметрии робота сзади.
Можно сказать, что на плоской гладкой площадке с нескользящим покрытием даже при отсутствии других датчиков кроме колёсных энкодеров, Robotino эквивалентен по возможности выполнения заданий роботам, использующим внешние статические навигационные объекты, такие как маршрутные линии и пространственные маркеры.
Однако, у Robotino есть и оптические датчики линии, и набор из 8 дальномеров «по-кругу», и даже пара детекторов электромагнитной индукции (металлодетекторы). А кроме всего прочего, к системе может быть подключено некоторое количество цифровых камер, не считая специального дополнительного навесного оборудования.
Завершает базовое оснащение платформы контактный бампер, который работает как ненаправленный сенсор касания. Благодаря ему совершенно несложно встроить в программное обеспечение робота систему аварийной остановки с сигнализацией о необходимости вмешательства оператора.
И при всём при этом, несмотря на заявленную поддержку программирования на C++, MatLab и LabView, Robotino остаётся учебной платформой, предназначенной для освоения основных принципов робототехники. Точнее даже для демонстрации общих подходов к управлению роботами. По крайней мере в России.
В России Robotino досталась роль «продвинутой черепашки Logo» для больших мальчиков – студентов средних специальных учебных заведений – техникумов и колледжей. Студенты и преподаватели вузов практически не получили доступ к этой платформе. О возможных причинах этого – чуть ниже.
Немного истории или «Победа оправдывает любые затраты»
Как сообщает историческая справка на сайте FESTO, после длительного и упорного обсуждения экспертным сообществом, по результатам голосования в качестве базовой платформы в компетенции «Мобильная робототехника» на чемпионате WorldSkills в японском городе Сидзуоке в 2007 году, была выбрана система Robotino. С тех пор и по декабрь 2014 года, когда была объявлена смена концепции оценивания компетенции и представлен официальный конструктор от компании Studica, освоение Robotino было обязательным условием участия в чемпионатах WorldSkills. Но вплоть до конца весны 2016 года компетенция «Мобильная робототехника» в России всё ещё проводится на этом оборудовании, а главное – на учебных задачах. Но о заданиях – чуть позже.
Совершенно очевидно, что высококлассные специализированное оборудование не может быть дешёвым. Особенно если оно, фактически, штучной. И более того, если его создание сопровождается разработкой учебно-методических материалов. В Российских реалиях средства, необходимые на закупку Роботино и дополнительного оснащения для учебного курса превышают годовой бюджет на закупки некоторых институтов.
Компания FESTO Didactic, добившись утверждения Robotino в качестве платформы – необходимого оборудования для проведения состязаний, заняла специфическую позицию, переведя робота в состав тулбокса, фактически признавая робота расходными материалом или ручным инструментом. И не смотря на то, что среда разработки и симулятор (виртуальный мир) доступны бесплатно [как учебное пособие].
К сожалению, базовый уровень использования и программирования робота (Robotino View) значительно «проще», чем «исследовательский» - выполняемый на профессиональном программном обеспечении (MatLab, C++ и прочее). Есть ли хоть одно учебное заведение в России, где Robotino используют иначе, чем на «ознакомительном» уровне, неизвестно.
Серьёзный (полноценный) учебный курс по мобильной робототехнике должен включать лабораторный практикум, в котором нужно задействовать одного робота на каждую пару студентов. Даже в ситуации работы по подгруппам, это означает комплектацию лаборатории 7 – 8 комплектами Robotino. При существующих ценах стоимость такого класса будет сопоставима с оснащением примерно 10 компьютерных классов. Закупка же одного-двух роботов целесообразна либо для ознакомительных курсов, либо для участия в каких-нибудь внеучебных мероприятиях, например – в соревнованиях.
Конечно, участие в соревнованиях WorldSkills для руководства образовательных учреждений может быть мотивирующим фактором. Однако победителями становятся немногие. И, поскольку, даже региональный чемпионат требует минимум трёх участников, приобретение робота можно считать «рентабельным», если организация станет после этого третьей в регионе, Федеральном Округе или стране. На настоящий момент, можно сказать, что насыщение достигнуто. Несколько Федеральных Округов имеют по 1 – 3 команд, а победителей окружных чемпионатов достаточно для наполнения заявочного листа Национального чемпионата.
В последнее время проявилась ещё одна проблема – в России нет возможности отремонтировать этих роботов без серьёзных финансовых вложений. А в большинстве своём эксплуатационные затраты не заложены в финансовые планы образовательных организаций.
Иными словами, для дальнейшего распространения Robotino нужно что-нибудь вроде кардинального снижения цены, на учебный робототехнический комплекс. Так, чтобы стала доступной закупка сразу целого комплекта роботов.
Программируй ЭТО…
Что бы не декларировало техническое описание, программирование автономной работы Robotino практически всеми осуществляется в среде графического программирования Robotino View. Но, в отличие от LabView, структура кода гораздо более алгоритмична. Внутренняя уникальность подсистем робота по «базовому назначению» и провоцирует «пошаговый» стиль мышления разработчика.
Конечно, программа – это последовательность действий, выполняемых друг за другом. Но это определение – совершеннейшая банальность из школьного курса «Информатики». Только очень-очень короткие – «элементарные» алгоритмы строятся на таком «однопоточном» принципе. Системы управления всегда многопоточны. И, к тому же, зачастую существенно гетерогенны по структуре аппаратных компонент.
Давайте посмотрим на типового робота для состязаний RoboRacers / RoboTraffic. Головной компьютер Raspberry Pi на ARM, контроллер периферии Arduino на AVR ATMega, драйвер двигателей и разнообразные датчики со встроенной логикой. И это ещё не считая системы связи, имитирующей UART «поверх» USB или Bluetooth. Все эти компоненты работают независимо, а также ограничены «логикой» физических принципов, лежащих в основе реализации исполнительных устройств. Например, мотор не выключается сразу, а датчики расстояния всегда имеют случайные погрешности в измерениях. В то же время «выключённость» мотора колеса вовсе не означает, что робот неподвижен – он может кататься по инерции. А ещё робот может буксовать.
Для освобождения центрального процессора от логики формирования управляющих сигналов и обработки потоков «сырых» данных применяются контроллеры периферии. Они встроены даже в самые «примитивные» датчики вроде дальномеров, в которых, к примеру, преобразуют временную задержку в уровень напряжения выходного сигнала. Все контроллеры имеют разное быстродействие и «завязаны» на особенности оборудования. Но и сам головной модуль современного робота – это полноценный компьютер с операционной системой и большим списком запущенных служебных приложений.
Для «начинающих робототехников» программное окружение разработчика создаётся с прицелом на синхронный режим, когда программа ждёт заверения каждой операции перед выполнением следующей. В том числе, создаются специальные блоки на «движения до события», скрывающие сложность своей реализации. Ранее уже упоминались программный блок «ехать на позицию» из Robotino View, который скрывает сложную математику управления трёхколёсной омни-платформой.
Буквально откровением для многих новичков является многопоточность и совпадать с нею могут только единицы. И то рассматривая её применение лишь в служебных задачах вроде стабилизации или ПИД-регулировании. Хотя именно эти методы практически гарантируют потерю однозначности поведения робота.
Разработка системы управления, работающей в асинхронном режиме, обычно ограничивается реализацией своей версии алгоритма «ехать до». Например, если нужно отследить срабатывание сразу двух датчиков. Самое плохое, что этому ещё и не учат.
В итоге, программа выполнения задания строится из отдельных блоков с обязательными задержками на завершение всех вспомогательных действий. Среда Robotino View очень удобна для реализации такого подхода, особенно с учётом «блок-схёмного» характера программирования: «Переместить в точку X, повернись, определи цвет». Причём определение цвета тоже строится по последовательному алгоритму, как последовательное сравнение изображения с камеры с некоторым эталоном, записанным чуть ранее.
Понятно, что в ситуации, когда в распоряжении такого разработчика окажутся лишь «сырые» данные с датчиков и задание с более-менее произвольной формулировкой, то наступает коллапс. Он просто не будет понимать с какой стороны подступиться к заданию. А ведь нужно не просто «решить» задание, а обеспечить воспроизводимость его выполнения. Иначе на решающей попытке какая-нибудь случайность приведет к отказу.
Можно сколь угодно долго говорить, что призёр состязаний по «Мобильной робототехники» сможет переучиться на использование другого программного обучения, но IT-специалистам известна простая истина, что почти всегда программист использует те методы проектирования кода, которые освоил со своим первым языком программирования. То есть «сишник» всегда будет «рисовать» на LabView привычные ему блок-схемы последовательной обработки данных.
В качестве эксперимента, участникам соревнований на полуфинале была предложена имитация задания WSC 2015 первого дня – доставка одного товара клиенту. «Последовательное» выполнение задания заняло у робота больше 5 минут, и это без взятие паллеты! А лучшие команды мира выполняют ПОЛНОЕ задание за это же время! На секундочку, это доставка трёх заказов трем клиентам...
Фактически, центрам подготовки участников состязаний нужно поменять практически всё в обучении конструировании и программировании роботов для соревнований. Но готовы ли они к этому? Ведь в колледжах «Робототехника» преподаётся всего нескольких занятий и развивать образовательные программы просто нет смысла (и материальной базы тоже).
Особенности соревновательных заданий
Очевидно, что разработка заданий, которые ни один из участников не сможет выполнить, нецелесообразна. Более того, задание должно быть выполнимо частично даже при невысоком уровне подготовки. Причём должна быть возможность менять сложность заданий без серьёзной модификации их содержания.
Низкий порог вхождения провоцирует использование базовых элементов учебного курса в качестве основы для конструирования заданий. Такими элементами являются: движение по определённой траектории с использованием одометрии, захват и перенос стандартных объектов с позиционирование по индуктивному датчику, распознавание цвета или символа с сигнализацией о результате. Обычно для сигнализации используются стандартные светофоры из учебного набора, а результаты распознавания цвета могут использоваться для сортировки переносимых объектов. Как правило, составление базового алгоритма (вместе с внесением в среду разработки) занимает примерно 20 минут, а остальное время участники тратят на подбор параметров и исправление ошибок.
Например, задание второго дня национального чемпионата WorldSkills Russia 2016 заключалось в проезде по определённому маршруту с узнаванием дорожных знаков расположенных на известных позициях (сами знаки тасовались) и сигнализацией о результате распознавания. Учитывая возможности Robotino по позиционированию, расчёт был сделан на то, что большинство участников не разберётся с системой технического зрения. Либо будут испытывать явные трудности в настройке алгоритмов.
По крайней мере на полуфинальном чемпионате Центрального Федерального Округа нестабильная освещённость, связанная с переменной облачность, делала результаты заездов непредсказуемым.
Система оценивания тоже предельно лаконично – оценки ставятся за факт выполнения этапа задания, например, за выезд из зоны старта по зелёному сигналу светофора.
Наверное, за исключением «промышленного» дизайна роботов и их значительного веса, решение указанных задач по «Мобильной робототехники» на оборудовании FESTO Didactic могут выполнять участники соревнований WRO младшей группы. И это опять таки подтверждает высокий образовательный потенциал Robotino, но не его пригодность для проверки квалификации специалиста по робототехники.
Путь развития компетенции
Основу компетенции «Мобильная робототехники» составляет решение сервисных задач малого бизнеса, когда использование средств традиционной автоматизации неоправданно в первую очередь своей ценой. Использование промышленных манипуляционных роботов, в большинстве случаев также затруднительно, поскольку предлагаемые задачи гораздо более вариабельны. Например, задание WSC 2015 предлагает выполнить автоматизацию склада небольшой торговой точки. При этом имитируется ситуация, что заказчик может выдвинуть собственные условия по используемому оборудованию, а, кроме того, его ещё необходимо убедить в том, что предложенное решение будет его устраивать. В том числе и по цене. То есть, что цена не завышена необоснованно.
Нужно также учитывать, что «упрощения» заданий связаны вовсе не с особенностями конструкции роботов и их программного обеспечения, а со временем, отпущенным на выполнение конкретного задания.
Фактически, смысл компетенции меняется чуть меньше, чем полностью.
А самое главное, что серьёзно возрастает объём необходимой подготовительной работы.
Участники должны провести конструирование и программирование робота, а также испытания его базовой функциональности, разработать стратегию выполнения заданий, отработать всю процедуру сборки робота из базового конструктора и подготовить подробное техническое описание процесса разработки (что, как и почему делалось).
По приезду на площадку команда должна собрать робота из конструктора и в кратчайшие сроки приступить к его наладке. При этом модификацию задания (обязательные 30% изменений) они узнают на брифинге в первый соревновательный день. Можно сказать, что всё время состязания участники занимаются адаптацией домашней заготовки к конкретным условиям площадки.
Равенство участников обеспечивается свободой в организации подготовительной работы и оцениванием работы участников на соревновательной площадке. Результаты выполнения самого задания играют существенную, но не определяющую роль. И общая тенденция сводится к отказу от оценивания выполнения элементов задания в пользу оценивания качества выполненных работ. Сам факт выполнения задания считается очевидным требованием.