---
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).

## Заключение

Вряд ли можно сказать, что мы полностью выполнили те задачи, которые ставили. Уж слишком они были амбициозные и объёмные. Тем не менее, каждый компонент нашей системы, хоть и небольшой, но всё-таки вполне работоспособный, а значит фундамент для дальнейших улучшений заложен.


Команда проекта:
- Игорь Брылёв
- Станислав Сгонов
- Алексей Топтун
- Александр Оликевич
- Ярослав Ефремов
- Роман Андрианов
- Илья Ураев
- Марк Вольтов
- Илья Курочкин