robossembler.org/blog/2022-04-22-1st-year-summary.md
2022-10-23 16:07:13 +03:00

119 lines
No EOL
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
slug: robossembler-1st-year-summary
title: Итоги первого года
author: Игорь Брылёв
author_title: Team Lead @ Robossembler
author_url: https://gitlab.com/movefasta
author_image_url: https://gitlab.com/uploads/-/system/user/avatar/4249760/avatar.png
tags: [robossembler, milestone, summary]
---
[Видео-версия](https://www.youtube.com/watch?v=AFROcGW73j0)
[Обзор всех репозиториев проекта](https://robossembler.gitlab.io/docs/)
Итак, миновал год с момента начала проекта и наступает время отметить данное событие подведением итогов.
В самом начале мы ставили главной задачей проектирование полностью автоматической и частично самовоспроизводящейся линии для роботов манипуляторов. Исследовав все существующие открытые конструкции роботов-манипуляторов, мы пришли к выводу, что все они не годятся для автоматической сборки. В них присутствовало, как правило, большое количество проводных соединений, которые обладают сложным недетерминированным поведением, сложно проектируются и симулируются, а также разнообразный крепеж очень широкой номенклатуры, использование которого при помощи автоматизированных средств затруднительно (знаменитая задача peg in the hole, для эффективного решения которой бьются учёные-робототехники многие годы). А значит они не подходят для частичного самовоспроизводства. Мы поняли, что придётся разработать собственные аппаратные решения, адаптированные для автоматической сборки и сосредоточились на этом.
## Аппаратное обеспечение
Мы проработали два заметно отличающихся друг от друга технических решения, каждое из которых по-своему решало поставленную задачу.
Первое решение базировалось на идее изготавливать роботов-манипуляторов с помощью технологии литья под давлением. Для данного концепта были разработаны соответствующая модульная конструкция звеньев, прессформа, с помощью которой звенья будут последовательно отливаться, и приспособление для подачи компаунда, так как по нашей идее литьё под давлением осуществлялось тем же самым манипулятором.
![](img/molded-link.png)
Решение очень эффективно с точки зрения удобства сборки - мы полностью отказываемся от крепежа и каких-либо механических соединений. Нужно всего-лишь правильно позиционировать моторы в пресс-форме и обеспечить процесс литья. Однако, такая технология потребовала от нас более глубоких исследований свойств полимеров, ведь для разных звеньев требовались разные прочностные характеристики, а значит и разный состав смеси. А ещё идея имела высокую степень неопределённости конечного результата, связанную с герметичностью соединений, с обслуживанием литьевых машин и приспособлений. Мы поняли, что в ближайшее время такую систему прототипировать будет сложно и это побудило нас рассматривать другие технологические решения.
Также на базе этой версии манипулятора также была проработана концепция масштабируемых шестигранных рабочих мест, к каждому из которых (а всего у такого рабочего стола шесть слотов для подключения), можно подключать другое рабочее место, нового робота-манипулятора или транспортный модуль, превращающий данное рабочее место в передвижную платформу.
![](img/workspaces.jpg)
Комбинируя рабочие столы, манипуляторы и оснастку, можно перестраивать конфигурацию производственной линии под каждую конкретную задачу, делая производство гибким и устойчивым к изменению спроса.
Следующим шагом в развитии стала проработка такого робота-манипулятора, который можно было бы напечатать на трёх-мерном принтере с использованием серийно производимых и доступных к покупке в настоящее время компонентов.
![](img/roboarm-diy.jpg)
В нём также, как и в первом, отсутствует какой-либо специальный крепёж - винты, заклёпки, гайки. Сами конструктивные элементы манипулятора выполняют роль крепежа и разработаны таким образом, чтобы обеспечить сборку без использования ручного труда. Практически все они, кроме печатных плат, катушек и электронных компонентов, могут быть изготовлены методом трёх-мерной печати, что с одной стороны делает возможным самостоятельное изготовление манипулятора в обычной среднестатистической мастерской, а с другой стороны оставляет возможность массового серийного автоматического производства, ведь для этого почти всё предусмотрено.
![](img/roboarm-inside.png)
Сначала мы запроектировали манипулятор с китайскими моторами для стабилизации камер для фото и видео-съёмки, но потом поняли, что с ними автоматическая сборка будет затруднительна - ведь такой мотор сложно захватить и правильно позиционировать. В общем, пришлось разработать собственный электродвигатель, который роботу будет удобно собирать, хватать и встраивать в манипулятор, а также электрическую схему и плату для его управления. В итоге получился почти полный комплект конструкторской документации для робота-манипулятора, по которому можно изготовить прототип и отлаживать встроенное программное обеспечение.
Как и в случае с первым вариантом манипулятора, была проработана и соответствующая оснастка, необходимая для создания и масштабирования роботизированных ячеек. На этот раз мы попытались обеспечить возможность более гибкого монтажа манипуляторов. Теперь, благодаря специальным модулям стало возможным установить манипулятор почти в любом месте (сбоку, сверху) и использовать объём всего доступного пространства, что весьма полезно в случаях, когда мы не располагаем просторными площадями и вынуждены расти, что называется, вверх. Модули, подобно кубикам в конструкторе LEGO позволяют создавать разные конфигурации роботизированных ячеек, обеспечивают жёсткость конструкции и электрическую связность компонентов. Сами пластины или основания манипулятора предполагают несколько исполнений - для монтажа манипулятора или приспособления, для установки туда вычислительного узла или просто в качестве поверхности рабочего стола.
![](img/roboarm-works.png)
Параллельно велась работа по разработке оснастки - разнообразным приспособлениям для выполнения специфических технологических задач - механического захвата, сварки, пайки, печати пластиком, подачи компаунда, сканирования. Самое жизненно-важное для решения задачи приспособление для захвата было проработано лучше всего; оно претерпело ряд существенных изменений и сейчас почти готово к изготовлению прототипа.
![](img/grip-tool-02.jpg)
В механическом захвате используется тот же самый мотор и плата управления, что и в самом манипуляторе. Остальные приспособления проработаны на уровне эскизов и будут дорабатываться по мере появления прикладных задач.
## Программное обеспечение
Программное обеспечение долго отставало от аппаратного по причине отсутствия разработчиков. Но мы не простаивали зря и пытались как можно глубже изучить актуальные научные исследования по проблемам, связанным с автоматизированной сборкой промышленных изделий, какие уже существуют проекты с открытым кодом, реализующие в какой-то степени данный функционал, а также пытались моделировать поведение самовоспроизводящихся систем на самом высоком уровне.
Научные исследования:
- Автоматическое планирование последовательности сборки
- Методы машинного обучения в промышленной робототехнике
- Применение блокчейн-технологий в управлении кибер-физическими системами
- Совмещённое планирование движений и задач
Все исследования были тщательно отобраны и размещены на портале документации. Некоторые исследования были переведены полностью, по некоторым были составлены краткие описания.
Со временем программисты нашлись и мы взялись за интеграцию тех программных компонентов, которые были найдены нами в ходе исследований. Самые основные из которых - это планировщик движений MoveIt, планировщик операций PlanSys и симулятор Gazebo.
Также, при разработке архитектуры, мы перенимали лучший мировой опыт в области роботизированной сборки, в чём нам очень сильно помог конкурс на Всемирном саммите по робототехнике, который проходит в Японии с 2017 года. Это такой конкурс, где команды из разных университетов и компаний мира выполняют задание по автоматической сборке роботами специально подготовленного стенда и соревнуются в скорости, точности и безопасности. Так вот - по имеющимся в публичном доступе материалам конкурса мы сделали подробный обзор работ двух команд и попытались учесть извлечённые ими уроки при проектировании архитектуры программного обеспечения. Некоторые выводы подтвердили правильность избранных нами решений. Например, выводы исследователей из университета Сан-Хосе подтвердили правильность выбора второй версии ROS, которая лучше подходит для использования в системах жёсткого реального времени, а ROS первой версии показал себя не очень хорошо в соревнованиях; а опыт команды O2AC подтвердил правильность нашего подхода сборочно-ориентированного дизайна - когда конструктор изначально проектирует изделие с учётом удобства захвата и сборки, а не с учётом своих представлений об эстетике и эргономике, что, в общем-то говоря, не очень актуально для автономных систем.
Есть и ряд наших оригинальных решений. Например, мы архитектурно предусмотрели возможности управления уровнями восприятия среды, ведь, помимо реальности, для робота есть и виртуальность, где он также, пользуясь возможностями физического движка может отлаживаться управляющая программа. Так вот мы разделили фазы восприятия на три условных уровня:
* когда робот знает всё о состоянии мира - положение всех объектов в симуляции
* когда робот знает о состоянии мира неполную информацию - получает информацию от только виртуальных датчиков
* когда робот знает только о состоянии тех датчиков, которые подключены к нему в реальной кибер-физической установке.
![](img/3-layer-arch.png)
Возможность управлять уровнями восприятия делает удобным постепенную адаптацию управляющих программ к физическому миру с возможностью доучиться в виртуальных средах. Например, робот, прежде чем приступить к выполнению задачи в реальном мире, может внутри себя переключить уровень восприятия на один из двух виртуальных и отладить работу там. При этом сама управляющая программа работает одна и та же - она просто меняет поставщика данных о состоянии среды.
Итоговая архитектура программного фреймворка Робосборщик представляет собой набор компонентов, которые пытаются реализовать процесс подготовки производства в автоматическом режиме.
![](img/robossembler_architecture.png)
Все эти компоненты можно подразделить на основные категории, каждая из которых отвечает за свою часть работы.
1. Первая категория (Assembly Preparation) - это комплекс подготовки изделий для автоматизированной сборки и необходимых данных для удобства симуляции. Ключевой компонент здесь - это плагин ARBench, существенно нами дополненный, который служит для разметки геометрических примитивов, формирования последовательности сборки, задания позиций захвата вручную и экспорта моделей в виде поддерживаемых симулятором пакетов. Плагин может работать как через графический интерфейс FreeCAD, что удобно для разметки моделей конструктором, так и через консоль, что удобно для автоматической генерации пакетов в системе непрерывной интеграции Gitlab. Далее пакеты могут быть помещены в базу данных, из которой уже подгружаться в симулятор.
2. Вторая категория (ROS2) - то, что исполняется непосредственно на вычислительном узле робота. Это набор пакетов ROS2, включающий планировщики движений и задач, конфигурацию робота, пакеты для взаимодействия с узлами Робономики и симулятором.
3. И, наконец третья категория (Simulation & Learning) - это программное обеспечение для виртуальных сред исполнения - игровых движков, симуляторов, а также модули поддержки машинного обучения, генерации наборов данных и виртуальных датчиков. Здесь ключевым компонентом является наш модуль управления восприятием среды, упомянутый выше.
По нашей задумке такая модульная архитектура позволит в будущем пробовать применять различные алгоритмы генерации последовательности сборки, обучения с подкреплением, системы распознавания, планировщики движений и задач, не затрагивая остальные компоненты системы.
А ещё мы постарались сделать этот комплекс из компонентов с открытым кодом и, кажется, что у нас это получилось.
## Интеграция с Robonomics
Ну и нельзя не отметить, что на протяжении всего этого времени, мы думали о том как можно взаимно усилить разработки Робосборщика и те возможности, которые предоставляет сеть Робономики.
Поначалу пришлось хорошенько подумать над тем "а что в принципе может заставить пользователей подключать их роботов к блокчейн-сети?". Я сам по опыту работу из мира АСУТП и это, конечно, в каком-то смысле консервативная отрасль - ведь на кону безопасность людей и подключать автоматические системы критически важной инфраструктуры к интернету без особой необходимости мало кто рискует - и без того полно дыр. Ну и самое главное - зачем? В этом нет какой-то особой выгоды. Что ж, пришлось эту выгоду поискать... и мы её нашли. Во многом благодаря тому, что ранее погрузились в машинное обучение роботов и поняли, что эффективность обучения в существенной степени будет зависеть от объёма и качества входных данных. Чем больше данных, тем лучше. Вот, например, Google в одном из первых своих исследований по теме привлекли 14 роботов-манипуляторов с их помощью совершили более 800 тысяч операций захвата, чтобы получить достаточное количество данных для обучения! Разумеется, мало у каких компаний есть такие возможности. Но тут мы вспоминаем о нашей сети Робономики, которая создаёт предпосылки для безопасного взаимодействия роботов через интернет, а значит можно собрать такой же стенд как у Google, но только из роботов, разнесённых между собой географически! Тут замечательно сочетаются идеи и блокчейна, и робототехники, и открытого кода, ведь пользователи могут собирать информацию и для того, чтобы вносить изменения в его конструкцию, улучшать железо и софт. И даже есть возможность совместно обучать роботов, не раскрывая конфиденциальности благодаря методике федеративного обучения, когда агенты обмениваются не самими данными, а своими предобученными моделями, которые в дальнейшем собираются и как-то усредняются, чтобы получить итоговую модель.
Ну что ж, уже намного лучше. Но остаётся ещё одна загвоздка - на каждом производстве робот выполняет специфичные для данного производства операции и даже если остановиться только на операции сборки, то в каждом конкретном случае роботы будут собирать разное. А значит теряется смысл кооперации роботов. Нет общего навыка - нет смысла совместно его обучать. И тут в очередной раз на помощь приходят новшества их мира машинного обучения, а именно такая методология как мета-обучение. Это подход, при котором робот учится не работать непосредственно, а учится учиться, то есть формирует не очень специализированный мета-навык. Например, вместо того, чтобы обучаться вставлять конкретный разъём - скажем, USB - он обучается быстро осваивать операцию вставки в общем виде, а под конкретную операцию доучиваться в гораздо меньшем объёме. И это решение позволяет устранить ту самую специализированность роботов. Мы можем дать возможность роботам собирать огромные массивы данных, обучать на них мета-навыки, передавать мета-навыки обратно роботам в виде награды и далее, на базе этих мета-навыков, осваивать прикладные операция для отдельных производств. Пазл сошёлся.
Именно эта идея легла в основу идеи так называемого рынка навыков, где роботы могли бы извлекать пользу из взаимодействия друг с другом за счёт сетевых эффектов.
Напоследок мы интегрировали наш ROS2 проект в Робономику классическим методом - с помощью передачи плана исполнения в блокчейне через команду launch и записали поясняющее этот процесс [видео](https://youtu.be/J3m5hXf-cro).
## Заключение
Вряд ли можно сказать, что мы полностью выполнили те задачи, которые ставили. Уж слишком они были амбициозные и объёмные. Тем не менее, каждый компонент нашей системы, хоть и небольшой, но всё-таки вполне работоспособный, а значит фундамент для дальнейших улучшений заложен.
Команда проекта:
- Игорь Брылёв
- Станислав Сгонов
- Алексей Топтун
- Александр Оликевич
- Ярослав Ефремов
- Роман Андрианов
- Илья Ураев
- Марк Вольтов
- Илья Курочкин