Я полагаю, что мало кого здесь волнует, кто я такой, потому что все хотят посмотреть на робота. Судя по реакции зала, так и есть. Мои коллеги, когда узнали, что нас пригласили на конференцию, сказали: это тот самый случай, когда на конференцию пригласили не тебя, а твоего робота. А ты просто кожаный мешок, на который оформлены проездные документы в Питер. По сути, так и есть. Поэтому давайте не будем тянуть время.
(На сцену выкатывается робот)
Он первый раз выступает на такой большой сцене, поэтому, понятно, волнуется.
Итак, друзья, перед вами, не побоюсь этого слова, первый в мире робот с мозгами на платформе 1С:Предприятие. Зовут Гайка.
Цель моего доклада – рассказать, что роботы на 1С - это не просто что-то, что можно сделать. Это сделать достаточно легко.
Каких роботов можно сделать на 1С?
Уже такой платформы достаточно для того, чтобы сделать:
- робота-консультанта в магазин, в аптеку, куда угодно;
- консьержа, который будет тапочки развозить в гостиницах;
- официанта;
- менеджера по перемещению товаров – так мы назвали грузчика. На самом деле он у нас уже так работает: по офису развозит 19 литровые бутылки с водой.
Немножко расскажу про эту платформу. Это абсолютно самодельная платформа, я ее собрал за год на кухне в свободное время. И это материальное доказательство того, что инженерам-одиночкам в этом мире ещё есть место. Привет, Илон Маск! Она весит 12 килограмм, может ездить автономно 6 часов, а если с остановками – то и все 24 часа. Она умеет разговаривать. Кстати, поздоровайся! (обращение к роботу)
Робот: - Здравствуйте, 1С-ники. Не могу сказать, что рада вас видеть, так как у меня еще нет камеры. Но мне приятно фиксировать ваше присутствие своими датчиками.
Докладчик: - Умница!
Робот: - Ты тоже!
Докладчик: - Спасибо, дорогая! У нас с ней взаимопонимание.
Продолжим: каких роботов можно сделать на 1С? Мы думали, как это можно отразить на одном слайде, и решили отразить в виде такой зависимости.
Если вы будете использовать только 1С, то робота у вас нормального не получится. Связано это с тем, что у 1С очень маленькое быстродействие. Кажется, что оно большое, но в мире микроконтроллеров это очень мало. В мире микроконтроллеров
один цикл может равняться нескольким микросекундам. 1С на такое не способна. Если мы начнем делать робота исключительно на 1С, это получится такая тормознутая машинка, которая будет постоянно во что-то врезаться, падать в ямы и так далее. Но чем больше каких-либо других технологий мы будем сюда добавлять, тем более эффективным станет робот.
Данный робот находится сейчас где-то посередине этого графика. Он использует платформу 1С в качестве мозга, пульт на мобильной платформе, с помощью которого я могу им управлять, «морда» написана на html и javascript. В прошлые два года я рассказывал о том, как мы делаем сайты на 1С. Это тоже сайт на 1С, наш собственный веб-клиент. Она умеет выполнять голосовые команды. Развернись! (обращение к роботу)
Робот: - Выполняю.
Докладчик: - При этом еще и говорит, если надо.
Почему в принципе возможно создание роботов на 1С, и как использовать различные технологии для того, чтобы это начало работать?
Если вы посмотрите на алгоритм работы мозга робота, то увидите, что там есть два пункта, которые подразумевают некое действие – ожидание команды и выполнение команды. Между ними – определение аварийной ситуации. На самом деле, наверное, правильнее было бы назвать не аварийной, а исключительной ситуацией, что в 1С называют попыткой исключения. А аварийная ситуация, это когда, например, робот стоит, его кто-то толкнул, он упал. Наступила аварийная ситуация: он не может выполнять свой
функционал. Если робот едет, видит впереди себя какое-то препятствие, то он эту команду не выполнит.
Кстати, робота зовут Гайка. Почему тебя так зовут? (обращение к роботу)
Робот: - Из-за формы корпуса. Никаких ассоциаций с одноименным мультяшным персонажем.
Докладчик: - Смотрите на следующий слайд. Здесь нарисовано то, что мы называем поддельная копия Морфеуса.
Шёл человек. Споткнулся, начал падать. Обратите внимание, куда он смотрит. Он заботится о своем кофе, который он может сейчас разлить. Он уже разлил его, все. Но при этом он сохранил вертикальное положение, удержал пакет в руках, и ноги сами поняли, куда сделать шаг, чтобы не упасть. То есть аварийная ситуация не наступила.
Вы когда-нибудь попадали в такие ситуации? Идешь, идешь, неожиданно споткнулся. Вы помните, что вы делали для того, чтобы не упасть? Нет! Вы еще сообразить не успели, а ноги сами все сделали. Дело в том, что у человека есть головной и спинной мозг. Головной мозг придумывает, куда идти, а спинной – как идти и как сделать быстро реагировать на страшные ситуации. И это распространяется не только на ноги.
В качестве упражнения – нужно улыбнуться. Попробуйте улыбнуться. У Арни получилось.
Знаете, что такое цифра 17?
Это число мышц, задействованных в момент, когда вы улыбаетесь. Это средняя оценка. На самом деле, по разным оценкам, от пяти до пятидесяти трех мышц лица задействуется в момент, когда вы улыбаетесь.
Улыбнуться у всех получилось. А кто-нибудь из вас хоть одну мышцу знает, которые сейчас двигали вашими губами, чтобы
сложить такой интерфейс? Наверняка нет. Вы вообще не знали о том, что у вас есть там столько мышц. То есть у вас есть некий глобальный мозг, который отвечает за действия, и есть что-то еще, что рулит мелкими этими деталями. У роботов все то же самое.
На слайде видно, что детали робота делятся на две составные части. Одни выделены оранжевым цветом – это головной мозг, принимающий глобальные решения. Остальное – спинной мозг. Он отвечает за каждое мелкое-мелкое-мелкое движение.
Мы функции головного мозга возложим на 1С, а функции спинного мозга – на семейство микроконтроллеров, у которых время совсем по-другому движется. Микроконтроллер может вовремя определить препятствия, вовремя остановиться и сказать головному мозгу, что у него аварийная ситуация, и надо решать, что с этим делать. Если мы таким образом разделим между ними функциональность, то 1С вполне справится с ролью мозга для робота.
1С будет выполнять анализ и устранение аварийных ситуаций. То есть если робот идет и вдруг увидел, что впереди лежит корова, он в первую очередь остановится, а 1С уже будет решать, развернуться или позвать человека и попросить убрать корову.
Взаимодействие с человеком. Что происходит, когда я говорю ей
фразы? Например, расскажи анекдот. (обращение к роботу)
Робот: - Холостяк купил стиральную машину, посудомойку, мультиварку и робота-пылесос. Теперь шансы его женить практически равны нулю.
Докладчик: - В этот момент на борту произошло распознавание речи. Эта речь через http-запрос выполнила запрос к базе на 1С, которая находится в Москве на моём сервере. Сервер 1С проанализировал полученную речь и выдал результат.
Устройство роботов
Теперь немного про устройство роботов. Они не так страшны, как может показаться.
Перед вами «начинка» данной тележки. Здесь жирным выделены две важных детали: двигатель и колесо. У этого робота всего два колеса. Если они будут вращаться в одну сторону с одинаковой скоростью, он будет ехать вперед. В другую сторону – назад. В разные стороны вращаются, он разворачивается. Этого уже достаточно для того, чтобы покрыть, согласно принципу Парето, 80% необходимого функционала роботележки.
Как заставить робота взаимодействовать с его начинкой?
Его начинка, в данном случае микроконтроллер ESP-32. По сути, это микрокомпьютер, который программируется на языке С. Он представляет из себя веб-сервер, потому что на нем есть модуль wi-fi. Сейчас все эти детали, которые находятся здесь, соединены через iphone, являющийся роутером, в одну сеть. И все, что происходит – взаимодействие пульта морды и контроллера – все происходит в одной сети.
Код данного микроконтроллера можно разделить на три составные части.
Первое (левая часть) – это поднятие веб-сервера на 80-м порту. Далее, чтение значения джойстиков, то есть, когда я нажимаю кнопки, происходит http-запрос к данному микроконтроллеру. Что значит http-запрос? Это означает абсолютную масштабируемость, возможность управлять этим роботом откуда угодно: я могу управлять им с пульта, могу управлять им с сервера 1С, согласно какому-то скрипту, который занесен в мою программу, могу управлять голосом. И, чтобы передать роботу эти параметры, нужно всего лишь в http-запрос добавить два аргумента – lw и rw. Это скорость вращения левого колеса и правого колеса.
В реальности это выглядит так: обычное подключение через браузер к роботу, то есть обычная адресная строка. Вручную меняется значение параметра rw через http-запрос, микроконтроллер анализирует его, преобразует в некое число и с соответствующей скоростью вращает мотор. И чтобы управлять этим роботом, достаточно выполнить один http-запрос к его веб-серверу.
У него даже есть такая веб-морда, которую он способен сам генерить.
Сзади у робота находится индикатор. То есть робот включается, подключается к сети и говорит, какой у него ip-адрес. Его можно
набрать в обычном планшете в браузере, и он сам сгенерит пульт управления. Управлять им можно будет сразу же с браузера.
Как научить робота двигаться?
Хорошо. Крутить моторами научились. Но задача-то не просто крутить мотор. Например, мы хотим сделать робота-официанта. Робот-официант должен проехать по залу, мало того, что он будет избегать препятствий, нужно правильно проложить маршрут. А маршрут состоит из команд типа: проезжай вперед 3 метра, развернись влево на 90 градусов, езжай вперед 1 метр.
Делается это очень легко. Те, у кого есть велосипед, знают, как функционирует спидометр велосипеда. На вилку вешается датчик, на спицу вешается магнит. Каждый раз когда колесо вращается, магнит проходит мимо датчика, происходит клик, щелк. Зная диаметр колеса и количество щелчков, мы знаем, с какой скоростью едет велосипед.
Если на колесо робота прицепить 10 таких магнитов, то расстояние, которое он пройдет, можно вычислить по формуле: диаметр колеса, умноженное на число Пи и на количество магнитов. И добавляется еще один параметр к http-запросу – tact.
У этого робота диаметр колеса 12 см. Чтобы он проехал 1 метр, нужно сделать 27 тактов. То есть чтобы роботу дать команду «езжай вперед на 1 метр», нужно сделать к нему http-запрос с
параметрами: левое колесо = 1023, правое колесо = 1023 и tact = 27. По-моему, просто.
Цель моего доклада – как раз доказать вам, что программировать роботов – это не просто возможно, а на самом деле легко. Что мы хотим сделать? Мы на общественных началах просто пишем драйверы для такого робота. Что мы хотим получить на выходе? Некий набор программного обеспечения и подсистему в 1С, которая позволит подключить робота к 1С так, как вы сейчас подключаете терминал сбора данных (ТСД) или кассовый аппарат.
То есть для того, чтобы подключить робота, имеющего на борту манипулятор, роботележку какую-то, морду, вы просто задаете новый элемент справочника и указываете: у нас есть тележка с диаметром колес таким-то, шаг – такой-то (то есть на один оборот он использует столько-то тактов). И через десять минут у вас полностью настроенный робот. Когда это будет, не знаем. Потому что, как я сказал, работаем на общественных началах. Но возможно будет. Два года подряд я выступал на конференциях Infostart Event на тему создания сайтов на 1С, и многие сначала смотрели криво. Но ничего, работает. Мы это уже активно продаем.
Распознавание и синтез речи
Это тоже не так страшно, как может показаться. Дело в том, что сейчас в каждый браузер нативно встроены компоненты распознавания речи. Чтобы их подключить, вам нужно использовать пять строчек кода. И все, запускается распознаватор. Либо робот может слушать постоянно эфир, как он делает сейчас. Если не нужно слушать постоянно, можно использовать, например, модуль распознавания звука либо камеру. Как только он увидел, что появилось чье-то лицо, робот начинает слушать. Как только
распознавание текста выполнено, происходит запрос к серверу 1С. Сервер 1С – это конфигурация. В данном случае у нас там есть справочник, который называется «Правила обработки речи», и в зависимости от того, какая фраза пришла на вход, мы можем выполнить соответствующее действие.
Действие – это произнести, выполнить команду или выполнить код. Произнести – в ответ робот что-то говорит. Выполнить команду – поехать, развернуться. Выполнить код – просто выполнить код в 1С. Причем любой. Вы можете сказать «перепроведи документы», и робот перепроведет документы у вас в базе. Можете считать, кстати, что это еще один вид клиента для 1С. Есть веб-клиент, тонкий клиент, и есть робоклиент.
Приведу код на языке 1С. Это код для мобильной платформы.
Он применяется как раз в этом пульте. Он тоже способен распознавать речь и выполнять команды. Чтобы вы поняли, насколько это не страшно и насколько легко, для запуска распознавания речи нужно 6 строчек кода. И примерно столько же, чтобы речь воспроизвести. Все сделано за нас уже давно. То есть распознавание и синтез речи – это проще, чем может показаться.
Как заставить робота выполнять команды?
Какой толк от робота, который повторяет за тобой приветствие или рассказывает один и тот же анекдот? Нужны и другие команды. Команды могут быть разные. Например, я спрошу у него: «какое сегодня число?». (Обращение к роботу)
Робот: - Сегодня 19 октября 2018 года, пятница.
Докладчик: - Чтобы вы не подумали, что я заранее забил туда эту фразу, я другое спрошу. Который час? (обращение к роботу)
Робот: - Текущее время 16 часов 47 минут.
Докладчик: - Сверьтесь с часами. Генерация этого текста сейчас происходит на лету. То есть в момент распознавания фразы запускается функция «сколько времени», находящаяся в общем модуле. Запуск происходит после анализа элемента справочника «обработка речи».
Самая страшная часть
То, что далеко не все умеют делать – определять локации. Это действительно самый сложный момент, но даже это тоже можно сделать. В 1С никак, но при взаимодействии с другими технологиями вполне реально.
У всех есть роботы-пылесосы. Обращали внимание, что у них сверху есть башенка круглая – это лазерный дальномер. То есть в этой башенке постоянно крутится лазер и каждые несколько миллисекунд определяет расстояние до предметов, которые находятся вокруг него. Таким образом он формирует карту помещения и, ориентируясь на отдельные реперные точки, положение которых в пространстве он точно знает, он может понять свою координату. Здесь для примера я привел вариант на ультразвуковых датчиках, он наиболее понятный для простого обывателя.
Представьте себе, что в помещении есть несколько датчиков, расположенных в точках, координаты которых точно известны. Есть робот, координаты которого нужно узнать.
Координаты датчиков занесены в справочник 1С, называемый «датчики локации». В момент, когда робот хочет узнать свою позицию, он выдает некий сигнал точно таким же ультразвуковым датчиком.
Здесь нарисован кот, потому что у нас два робота. Второй – кот, но он, ленивая тварь, остался в Москве. Тварь – в хорошем смысле, как творенье божье. А Гайка у нас рабочий робот.
Если кот хочет выйти из помещения, он сначала должен понять, где он находится, потом построить маршрут. В определенный момент он своим ультразвуковым датчиком говорит «мяу». В правом верхнем углу нарисована большая плата. Это контроллер Arduino Mega, к которому подключены маленькие ультразвуковые датчики. Он говорит: «Хорошо, я всех слушаю.», и начинает отсчет времени, за которое до каждого из датчиков долетит это «мяу».
Получилось где-то 13 миллисекунд, где-то 9 и так далее. В зависимости от времени вычисляется расстояние.
Дальше все очень просто. Методом триангуляции можно посчитать координаты робота.
То, что вы сейчас увидите, – это обычный табличный документ, на котором условно нарисован план этого помещения. Самый лучший вариант для того, чтобы управлять роботом, прокладывать маршруты – это разделить помещение на квадраты. Размер одного равен размеру робота.
У этого робота ширина 50 см. Если комнату разбить на квадраты размером 50 на 50 см, то далее как в обычной игре из 90-х. Может, кто-то игры писал в 90-е игры? Вот примерно так, в наше время, выглядели игры, когда у тебя есть компьютер Spectrum, и ты на нем начинаешь рисовать что-то подобное.
Алгоритмы нахождения пути настолько просты, что не стоит на них останавливаться. 1С с ними точно справляется. То есть 1С, проанализировав текущее положение робота и поняв, куда ему надо идти, дает несколько http-запросов:
1. идти вперед на 1 метр - крути колеса вперед 27 тактов;
2. поворот вправо на 90 градусов;
3. вперед на три с половиной метра.
Но у нас кот. А кот как обычно поступает? Он сначала просит тебя
долго: «Открой мне дверь!», потом подходит к ней, тупит, тупит, тупит, разворачивается и уходит обратно. Поэтому у нас здесь добавлены четвёртый и пятый пункты.
Кто-нибудь хочет задать вопросы роботу какие-нибудь?
Из зала: - Еще анекдот.
Докладчик обращается к роботу: - Расскажи еще анекдот.
Робот: - С вашего адреса идет подозрительный трафик. Так поступают роботы. Чтобы доказать, что вы не робот, причините вред другому человеку или своим бездействием допустите, чтобы
человеку был причинен вред.
Докладчик: - У нее своеобразный юмор. Робот еще и женщина. Не знаю, как я справляюсь, как-то получается.
Так... что ты еще умеешь? Хотите кейс? У нас есть замечательный кейс, который называется «Супермаркет».
Робот: - Развожу по офису бутыли с водой.
Докладчик: - Серьезно? Ты дурочка! (обращение к роботу)
Робот: - Зато красивая!
Докладчик: - Этого не отнять, да. Она на самом деле знает такие приколы. Я ее вынесу после выступления в холл, там позадаете вопросы. Дело в том, что в момент когда происходит распознавание речи, все фразы которые, ей говорят, записываются в лог. Чем хорош этот робот в качестве консультанта, если его поставить где-то в магазине? Девочка-консультант может некоторые вопросы фильтровать, не все вам может передать, не все в отчет внести. А робот пишет все. Она как КГБ-эшник. Она еще может фотографию лица сделать и сказать: кто, что говорил.
Чтобы научить ее каким-то фразам, мы запустили ее веб-морду на сайт и написали: «Друзья, у нас есть такой классный робот, научите ее говорить. Просто заходите и говорите все подряд. Мы эти логи будем читать и на основании этих логов составим ей какой-то язык».
Чего мы там только не начитались! Хотя вроде бы серьезные люди... Например, кто-то спросил у робота «Ты носишь трусы?». Может быть, этот человек сидит сейчас в зале. Мой пятилетний сын, когда я читал ему, очень смеялся. И теперь он постоянно к роботу подходит и спрашивает, носит ли она трусы.
Скажи, ты носишь трусы? (Обращение к роботу)
Робот: - Нет. Потому что они закрывают датчики обнаружения препятствий и я врезаюсь в стены.
Докладчик: - Пока мы не поставили ей датчики обнаружения препятствий, она действительно у нас в стены врезалась. Потом стало проще.
Один раз, я помню, когда обучал ее разговаривать, написал первый алгоритм, вроде все нормально. Потом оставил ее в комнате проверять, насколько она хорошо держит заряд, а сам пошел на кухню и начал дописывать этот алгоритм. И забыл ее отключить. А я же говорил что она через интернет управляется, и все, что ей скажешь, где бы ты ни находился, она все это поймёт. Сижу спокойно на кухне, слышу в комнате грохот. Захожу. Она каталась-каталась, выполняя все мои команды, а я ж не в курсе, не вижу. Намотала на себя провод от сушилки, опрокинула ее, сама забилась под кровать и оттуда мне индикаторами моргает. Достал я ее. Главное – не побьешь же ее, только ноги себе отобьешь.
Разделение функций дает хороший результат
Еще немножко по поводу того, какую роль может исполнять 1С, какую роль могут исполнять микроконтроллеры. Микроконтроллер с датчиком определяет расстояние до препятствия впереди. То есть если он едет, видит впереди стену, он останавливается и говорит: у меня исключения, аварийная ситуация. И дальше ничего не делает. Он просто останавливает робота. А что сделать с этим, решает 1С. То есть, если 1С может проложить маршрут до конечной точки, видит, что проложить маршрут вполне реально, можно сделать пути объезда, она поедет. Если же дать задачу невыполнимую, естественно, она ехать не станет. Если сказать «езжай вперед 100 километров», она понимает, что ей на столько просто аккумуляторов не хватит. Это все можно реализовать на 1С. То есть 1С в данном случае исполняет роль головного мозга.
(Что-то загудело.)
Что это было? А это ты! (Обращение к роботу) Интересный у тебя способ привлекать внимание к себе. С ней давно не общались. Ну, спой песню.
Робот: - Владимирский централ, ветер северный. Этапом из Твери, зла немерено...
Докладчик: - Я же говорил, что у нее своеобразный юмора. В интернете нахватается чего-то...
Вернемся к теме. 1С может анализировать заранее ситуации, понимать, следует выполнять эту команду или нет.
Вместо заключения
К какой мысли я хотел вас подвести?
Во-первых, при наличии тех драйверов к роботу, которые мы хотим написать, подключить робота к 1С будет легко. А дальше можно легко на 1С запрограммировать 90% всего функционала, который потребуется роботу.
Зачем вообще подключать робота к 1С? Во-первых, потому что 1С-ников много, и легко будет сопровождать, и стоимость владения роботами снижается в разы. Во-вторых, допустим вам, действительно, нужен консультант, который сможет всегда и все подсказать покупателю.
У вас есть конфеты мишка на севере? (Обращение к роботу)
Робот: - Да, конфеты мишка на севере в наличии. Цена 210 рублей за килограмм.
Докладчик: - Покажи, где лежат. (Обращение к роботу)
Робот: - Я покажу путь, следуйте за мной.
Докладчик: - Представьте, у вас есть ячеистый склад, на котором точно известно, где что лежит. Для того чтобы робот показал человеку, где что лежит, или снабженный манипулятором приехал и взял этот товар с необходимой полки, вам достаточно потратить день-два на написание кода в 1С, и у вас будет робот, способный это сделать.
Кстати, этот кейс у нас он называется «Супермаркет». Человек пришел за конфетами, не зная, где они лежат, а его тянет за виски. Поэтому дальше он робота спрашивает: у вас есть виски? (обращение к роботу)
Робот: - Прежде чем я проведу вас в отдел алкоголя, докажите, что вам есть 21 год.
Докладчик: - Как доказать?
Робот: - Продолжите фразу «тополиный пух...»
Докладчик: - Жара, июль.
Робот: - Тест пройден. Я верю, что вам больше 21 года. Следуйте за мной.
Докладчик: - Вот такая умная штука. Так вот, 1С, который знает, где что лежит на складе, из реальных своих остатков, без всяких обменов способен, управляя роботом, полностью заменить кладовщика. Хотя, конечно, полностью тяжеловато будет с точки зрения разработки манипуляторов. Саму железку сделать – манипулятор – несложно, а вот научить его правильно брать какую-то вещь – это сложно. Буквально вчера один из посетителей конференции сказал, что одна компания купила тележки, потянули эти расходы, а манипуляторы не смогли купить, потому что они стоят бешеных денег. Поэтому на тележки посадили таджиков, тележка куда надо подвозит, а таджик берет и складывает.
Друзья, на этом у нас всё. Спасибо всем, кто пришел. Спасибо за внимание. Не забудьте поставить лайк, дружите с роботами и чаще улыбайтесь!
Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2018 EDUCATION.