216 lines
35 KiB
Markdown
216 lines
35 KiB
Markdown
|
---
|
|||
|
slug: 2nd-year-summary
|
|||
|
title: Итоги 2023 года
|
|||
|
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://youtu.be/vWpaZ8DRftI)
|
|||
|
|
|||
|
В этом обзоре мы расскажем о разработках в рамках проекта Робосборщик в 2022-2023 годах.
|
|||
|
|
|||
|
## Аппаратное обеспечение
|
|||
|
|
|||
|
### Robossembler Arm и его двигатели
|
|||
|
|
|||
|
Самая главная аппаратная разработка этих полутора лет — рука Робосборщика или [Robossembler Arm](https://gitlab.com/robossembler/roboarm-diy-version).
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Это шести-осевой робот манипулятор, который существенно изменился - сокращены габаритные размеры, вес, снижено общее количество деталей и крепежа.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Всего в конструкции теперь 66 деталей и 32 соединителя, которые достаточно крупные, чтобы вставлять их вручную, без помощи вспомогательного инструмента, или даже автоматически - разработанным нами захватным устройством. Все детали содержат специальные пазы для удобства захвата.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Конструкция робота предполагает возможность гибко менять количество степеней свободы под задачу.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Одной из ключевых особенностей робота является [симметричный стыковочный интерфейс](https://gitlab.com/robossembler/arm-tools/connection-tool), который позволяет роботу перемещаться между совместимыми с ним посадочными местами и, тем самым, расширять доступную для работы зону.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Стыковочный интерфейс претерпел уже 8 модификаций, прошёл первичные испытания на прочность соединения и готов к интеграционным испытаниям с остальной частью робота.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Мы его упростили, облегчили, при этом сохранив его достаточно жёстким; конструкция препятствует повреждению контактов при ручной установке.
|
|||
|
|
|||
|
Ключевым узлом робота является разработанный нами с нуля серводвигатель. На данный момент изготовлен его прототип вместе с контроллерами и ведётся разработка программного обеспечения для управления.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Изначально мы разработали две модификации серводвигателя - один для создания крутящего момента на звене манипулятора, второй - для монтажа рабочего органа или монтажа самого манипулятора к опорному каркасу, но со временем заменили их на один универсальный контроллер для всех версий привода, что позволит ещё больше сократить номенклатуру компонентов и, соответственно, уменьшить себестоимость изделия.
|
|||
|
|
|||
|

|
|||
|

|
|||
|
|
|||
|
Изменения в серводвигателях коснулись в основном системы вентиляции обмоток и подшипникового узла, который на данный момент может быть использован как радиально-упорный подшипник скольжения, изготовленный методом печати, так и на его место может быть установлен стандартный набор из двух подшипников качения. Улучшено крепление магнитов к ротору с целью уменьшения магнитного зазора. На данный момент испытано семь вариантов печатных роторов и найден оптимальный механизм крепления магнитов.
|
|||
|
|
|||
|

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

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

|
|||
|
|
|||
|
Датчик реализован на кондуктометрическом принципе и обладает чрезвычайно низкой себестоимостью.
|
|||
|
|
|||
|
### Опорный каркас
|
|||
|
|
|||
|
[Опорный каркас](https://gitlab.com/robossembler/cnc/cubic-modular-workspace), который мы показывали в прошлый раз, тоже претерпел большие изменения. Мы убрали дополнительные соединители и теперь весь каркас состоит из практически одних и тех же универсальных сборочных единиц - опорных пластин. Пластины могут быть двух типов.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Первый тип — это пластины с симметричным стыковочным интерфейсом. К ним подключается активное оборудование - роботы или рабочие органы. Другие пластины - пассивные, в них вместо стыковочного интерфейса установлена заглушка. Они выполняют функции передатчиков сигналов и обеспечивают жесткость всей конструкции.
|
|||
|
|
|||
|

|
|||
|
|
|||
|

|
|||
|
|
|||
|
### Источик питания
|
|||
|
|
|||
|
Также разработан совместимый с опорным каркасом [источник питания](https://gitlab.com/robossembler/arm-tools/power-supply-box) от сети переменного тока.
|
|||
|
|
|||
|
### Оснастка для производства
|
|||
|
|
|||
|
Мы стремимся сделать робота максимально простым в изготовлении, поэтому помимо конструктивных решений для удобства сборки, разрабатываем и вспомогательную оснастку для автоматизации производства. Мы активно разрабатываем [станок для намотки катушек индуктивности двигателя](https://gitlab.com/robossembler/cnc/motor-wire-winder).
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Опробованы два варианта намоточного станка - ручной и полуавтоматический, сейчас разрабатывается третий вариант. Станок позволит нам обеспечить серийное производство моторов и сервоприводов. Как и во всех остальных случаях, конструкторская документация на станок будет открыта.
|
|||
|
|
|||
|
### Приспособление для захвата
|
|||
|
|
|||
|
Существенно изменена конструкция [приспособления для захвата](https://gitlab.com/robossembler/arm-tools/grip-tool), в котором теперь используются те же самые узлы, что и в манипуляторе - двигатель с контроллером, стыковочный интерфейс.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
В новой версии улучшены передаточные механизмы, добавлены редукторы, изменён корпус. Новая конструкция позволяет вращать пальцы на угол 360 градусов, а новая форма пальцев - "захватывать" объекты внешней стороной.
|
|||
|
|
|||
|
## Программные решения
|
|||
|
|
|||
|
### Robonomics Bridge
|
|||
|
|
|||
|
В 2022 году нашей командой разработан [мост между Робономикой и ROS2](https://gitlab.com/robossembler/robonomics_bridge), который решает проблему взаимодействия различных кибер-физических систем через публичную сеть интернет.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Фреймворк ROS2 основан на протоколе под названием DDS или Data Distrubution Service, который обеспечивает взаимодействие узлов ROS друг с другом. Этот протокол ориентирован на работу в локальной сети, в нём заложены механизмы автоматического обнаружения устройств и очень интенсивное взаимодействие между ними. Однако, в случах когда требуется обеспечить работу отдельных узлов ROS с каким-то внешним сервисом или системой, то возникает проблема безопасности - получив доступ к одному узлу, сторонний сервис получает доступ и ко всем остальным - он может полностью прослушивать весь внутренний трафик DDS.
|
|||
|
|
|||
|
Чтобы решить проблему доступа узлов друг к другу можно использовать пакет ROS2 Security, который настраивает политики доступа к данным. Однако, этот подход обладает большим минусом - весь трафик в системе шифруется, что может сказаться на быстродействии при той нагрузке на сеть, которую создаёт DDS. Другое решение заключается в создании так называемых шлюзов, которые публикуют нужные данные, сохраняя всё остальное приватным. Как правило, это достигается при помощи тоннелей VPN или SSH между взаимодействующими узлами. Такой подход применён в таких проектах как Husarnet, Integration Service и Zenoh, но и он не лишён недостатков. В этом случае вам нужно создать защищённый канал связи, который жёстко привязан к IP-адресу или доменному имени контрагента, а они имеют свойство меняться, блокироваться и подвергаться атакам.
|
|||
|
|
|||
|
Проблему можно обойти с помощью технологий p2p, на которых построен блокчейн [Robonomics](https://robonomics.network/). По сути блокчейн может являться в этом случае очень защищённой таблицей маршрутизации, адресами контрагентов в которой являются публичные ключи узлов. Вам нужен локальный узел блокчейна и знание о том какой публичный ключ у вашего контрагента, чтобы далее не зависеть от системы DNS и блокировок IP-адресов. Библиотека libp2p, на которой построен блокчейн Робономики, может использовать разные транспортные протоколы для доставки сообщений. Однако, это не все возможности, которые может дать блокчейн. Помимо простого коммутирования потоков сообщений, в блокчейне в будущем может быть реализована и более сложная логика на смарт-контрактах, подразумевающая взаимодействие большого количества агентов. Например, принятие решение о запуске производства какого-то продукта может быть привязано к голосованию в организации потенциальных потребителей этого продукта, с учётом экономической целесообразности. Сейчас решение о запуске какого-либо производства принимается с помощью механизма инвестиций, когда инвесторы, получив информацию о потенциальном спросе, могут приобретать акции отдельных компаний, которые этот спрос смогут в будущем удовлетворить. То есть инвесторы являются лишним передаточным звеном между потребителями и производителями. Если потребители смогут более активно участвовать в разработке и ценообразовании новых продуктов, то мы сможем в перспективе перейти на такую схему работы, когда производство будет автоматически перестраиваться на удовлетворение спроса по данным, предоставляемым в блокчейн потребителями.
|
|||
|
|
|||
|
### Robossembler Framework
|
|||
|
|
|||
|
Основной разработкой проекта по-прежнему является Фреймворк Робосборщик, в котором можно выделить два основных блока - Offline и Online.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
[Оффлайн-часть](https://gitlab.com/robossembler/framework) связана с подготовкой моделей для симуляции, машинному обучению, взаимодействию с системами контроля версий и непрерывной интеграции. По сути она представляет собой конвейер подготовки трёхмерных моделей и инструменты анализа статической структуры изделия. Одним из важнейших узлов в этом конвейере является разработанный нами планировщик сборки или планировщик последовательности сборки — Assembly Sequence Planner.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Этот программный компонент анализирует сборку в формате STEP, проверяет наличие дефектов в геометрии, которые делают проблематичным подготовку моделей в формат пригодный для симуляции. Также он проверяет требуемые допуски между деталями и строит так называемую матрицу смежности, которая содержит полную информацию о сопряжениях между деталями. Чтобы построить всю последовательность сборки. Дальше сформированные подсборки проверяются на стабильность в гравитационном поле и алгоритм генерирует подходящие варианты для отладки в симуляции. В 2023 году мы дополнили нашу [коллекцию исследований](https://robossembler.org/docs/technologies/ASP-overview) по генерации последовательности сборки. Найдены новые исследователи, работающие в направлении автоматизации планирования сборки - в частности, доктор технических наук Божко Аркадий Николаевич, преподаватель из Бауманского университета, с достаточно оригинальным подходом к решению задачи через использование гипер-графов, который мы планируем поддержать в нашей программной части.
|
|||
|
|
|||
|
Далее работу принимает часть конвейера, отвечающая за компьютерную графику.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Детали, входящие в сборки, преобразовываются в так называемые ассеты компьютерной графики разной степени полигональности. Для преобразования ассетов используется свободный редактор компьютерной графики Blender и разработанный нами аддон. Аддон формирует три типа ассетов. Высоко-полигональные модели содержат много деталей и могут использоваться для качественной визуализации. Для симуляции требуется обратное - чтобы количество полигонов было как можно меньшим. Поэтому производится оптимизация полигональной сети и в некоторых случаях склейка отдельных компонентов в монолитный кусок. Также аддон, используя информацию об материалах деталей из CAD, генерирует так называемые физически реалистичные текстуры, производит так называемое запекание текстур. Чтобы познакомиться с конвейером компьютерной графики подробнее, рекомендую прочесть статью на нашем сайте.
|
|||
|
|
|||
|
Онлайн-часть или рантайм [Robossembler ROS2](https://gitlab.com/robossembler/robossembler-ros2) непосредственно выполняется на железе в момент работы робота. За прошедший год мы перевели проект с ROS2 Foxy, поддержка которой была прекращена в 2023 году, на ROS 2 Humble. ROS2 Humble является так называемым долгоживущим релизом или LTS, который будет поддерживаться еще три года.
|
|||
|
|
|||
|
### Архитектура runtime
|
|||
|
|
|||
|
В рантайме у нас реализована архитектура из нескольких разных уровней планирования.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Самый верхний уровень стека - уровень миссии. Там происходит по сути планирование производственных заданий, подобно ERP-системе, где определяется сколько чего мы производим. Далее следует уровень планирования задач - разбиение процесса сборки отдельного изделия на кванты - логические операции, которые, в свою очередь, опираются на уровень поведения, где работают соответствующие задаче комбинации навыков в виде деревьев поведения. Это поведение стоится на базе атомарных навыков, например, движение к точке, движение по траектории, различные типы восприятия изображений, из которых собирается более сложное поведение. Атомарные навыки работают с аппаратным слоем, то есть с железом, через драйвера устройств. Там решается как именно мы получаем данные, через какие интерфейсы, топики или сервисы, как сигналы преобразовываем и куда передаем.
|
|||
|
|
|||
|
### Деревья поведения и управление жизненным циклом навыков
|
|||
|
|
|||
|
В основе рантайма у нас лежат деревья поведения. Изначально деревья поведения появились в сфере разработки компьютерных игр для того, чтобы программировать персонажей NPC. Однако, со временем данный подход был предложен также для использования и в робототехнике, в частности Петером Оргеном, который популяризирует и всячески пытается приладить к задачам робототехники. Очень хорошо данный подход себя зарекомендовал себя в области мобильной робототехники - это разнообразная навигация по помещениям. В основе популярнейшего пакета ROS Navigation лежат именно деревья поведения. Мы увидели преимущества этого подхода прежде всего в модульности. Мы заранее не знаем какие именно методы подойдут лучше всего для тех или иных задач, поэтому от фреймворка требуется обеспечить изменяемость - чтобы не надо было менять всю остальную программу при изменениях в отдельном навыке или дереве поведения. Также этому подходу присуща и нужная для производства отказоустойчивость.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
В проекте Robossembler ROS2 разработан BT-executor, в котором реализованы первые узлы или навыки - в частности, движения к точке пространства через решение обратной задачи кинематики, обнаружение объектов в сцене - Object Detection, а также оценка 6D позиции объектов - Pose Estimation для распознавания положения деталей в пространстве перед захватом и сборкой.
|
|||
|
|
|||
|
Помимо деревьев поведения, нами также внедрён один из важных концептов, появившихся в ROS2 под названием Lifecycle Nodes или Managed Nodes. Это такой тип узлов ROS2, который позволяет их включать, выключать, конфигурировать, когда надо убирать, добавлять. Это делает удобным подмену, конфигурацию и запуск отдельных навыков в ходе исполнения программы.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Например, навык Object Detection у нас используется в нескольких вариантах. В ходе работы программы часто возникает ситуация, когда нужно переключиться на другую реализацию навыка, если текущая не сработала. Разумеется, мы не можем держать всех их в памяти одновременно. Особенно это актуально когда для работы навыка требуется много ресурсов, что часто бывает с нейронными сетями. Здесь на помощь приходят Lifecycle Nodes. Почти все имеющиеся на данный момент навыки в фреймворке реализованы в виде Lifecycle Nodes.
|
|||
|
|
|||
|
### Управление виртуальными средами
|
|||
|
|
|||
|
Одним из нововведений, которые мы сделали в фреймворке, является Environment Manager или менеджер управления виртуальными средами. Это модуль, который соединяет рантайм с разнообразными средами - как виртуальными, так и не очень. Виртуальной средой может быть игровой движок или симулятор.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Environment Manager реализует абстрактный интерфейс, который позволяет соединять рантайм, его драйвера с виртуальной средой. Например, мы можем получать изображение от реальной камеры через какой-то топик, а в этот же топик Environment Manager может нам в дальнейшем, когда мы переключимся на режим симуляции, передавать данные не с камеры, а с симулятора. В этом случае сама программа останется прежней, ничего переписывать не надо. В качестве первой среды мы выбрали симулятор Gazebo, архитектура которого предусматривает разбиение на отдельные компоненты, которые реализовывают физику, рендеринг и многое другое, что делает удобными применение нашего подхода. По нашей задумке Environment Manager должен оказать большое влияние на сам подход к разработке управляющих программ роботов, делая более простым и доступным обучение с подкреплением.
|
|||
|
|
|||
|
## Прикладные решения
|
|||
|
|
|||
|
### Растениеводство
|
|||
|
|
|||
|
Продвигается и разработка прикладных решений на базе наших модулей. Одним из таких решений является роботизированный комплекс для размножения растений методом микроклонирования, который разрабатывается вместе с нашими коллегами из компании [Фито Слим](https://agrostab.ru/).
|
|||
|
|
|||
|

|
|||
|
|
|||
|
На данный момент микроклонирование представляет собой комплекс сложных операций, каждая из которых требует большого объёма рутинного ручного труда, а качество результата очень чувствительно к чистоте и стерильности помещений. Любой случайно привнесенный вирус может означать гибель всех организмов на той стадии, когда они еще очень слабы и не могут этому вирусу сопротивляться. Роботы потенциально могут решить эти проблемы. В рамках концептуального проектирования разработано специальное приспособление для манипулирования растениями в пробирках.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
Форма нашего робота хорошо подошла для оперировавания в таких стеснённых пространствах как ламинатор.
|
|||
|
|
|||
|
В рамках смежного направления также разработана концепция использования манипуляторов для черенкования, не столь требовательная к самим помещениям, но требовательная к стерильности инструментов. Мы разработали эскиз линии или аппаратный комплекс для отладки исследовательских программ черенкования.
|
|||
|
|
|||
|

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

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

|
|||
|
|
|||
|
## Вместо заключения
|
|||
|
|
|||
|
В заключение хотелось бы отметить, что мы кардинально изменили наш статус - открыли предприятие. Теперь Робосборщик — это не только кружок или клуб единомышленников, а полноценная организация с юридическим статусом. Организация оформлена после победы в конкурсе соискателей финансирования для открытых проектов библиотек программного обеспечения под названием «Код цифровые технологии», организованного Фондом содействия инновациям.
|
|||
|
|
|||
|
В 2024 году мы планируем завершить разработку программного обеспечения контроллера серводвигателя, запустить манипулятор и испытать его вместе с нашим рантайм модулем. Параллельно этой работе будет вестись и проект фреймворка для отладки программ через симуляцию.
|
|||
|
|
|||
|
Подписывайтесь на наши каналы в [Telegram](https://t.me/robossembler_ru) и [Youtube](https://www.youtube.com/channel/UC32Xgbsw9XQlN1QH59pe8HA). Если у Вас есть идеи как можно помочь проекту, то Вы можете непосредственно зайти в [GitLab](https://gitlab.com/robossembler), выбрать нужный подпроект и просто написать там issue, где поделиться своими мыслями.
|
|||
|
|
|||
|
## Команда
|
|||
|
|
|||
|
В работе участвовали:
|
|||
|
|
|||
|
- Игорь Брылёв
|
|||
|
- Станислав Сгонов
|
|||
|
- Алексей Топтун
|
|||
|
- Александр Оликевич
|
|||
|
- Роман Андрианов
|
|||
|
- Илья Ураев
|
|||
|
- Марк Вольтов
|
|||
|
- Илья Курочкин
|
|||
|
- Никита Молканов
|
|||
|
- Андрей Ермаков
|
|||
|
- Вячеслав Македонский
|
|||
|
- Александр Шевеленко
|
|||
|
- Иван Ершов
|
|||
|
- Михаил Якушкин
|
|||
|
- Степан Воронов
|