From fe245d1e4947e1b1333dc054471fc1597a5d8bdb Mon Sep 17 00:00:00 2001 From: Igor Brylev Date: Wed, 11 Dec 2024 20:13:55 +0000 Subject: [PATCH] Software use cases page --- docs/robossembler-framework.md | 21 +- .../img/rbs_imitation_learning_usecase.jpg | Bin 0 -> 180233 bytes docs/software/ros2.md | 113 +-------- docs/software/ros2/installation.md | 83 +++++-- .../shalenikol_commits_4th_milestone.md | 230 ------------------ docs/software/usecases.md | 142 +++++++++++ sidebars.js | 5 + 7 files changed, 232 insertions(+), 362 deletions(-) create mode 100644 docs/software/img/rbs_imitation_learning_usecase.jpg delete mode 100644 docs/software/shalenikol_commits_4th_milestone.md create mode 100644 docs/software/usecases.md diff --git a/docs/robossembler-framework.md b/docs/robossembler-framework.md index b182f9e..69e52c5 100755 --- a/docs/robossembler-framework.md +++ b/docs/robossembler-framework.md @@ -67,4 +67,23 @@ title: Фреймворк Робосборщик - Не поддерживает ROS2 - Не поддерживает алгоритмы машинного обучения. -__AutoAssembly__. Разрабатывается командой робототехников из компании Arrival, известного производителя электромобилей с R&D командой из Санкт-Петербурга. Фреймворк предназначен для автоматической роботизированной сборки напрямую из CAD. В научной публикации с описанием фреймворка представлена практическая реализация на примере двух манипуляторов Universal Robotics. Исходный код проекта не публикуется; многие технические решения (спецификации, схемы данных, описания языков, тип базы данных) неизвестны. Более подробный обзор см. по [ссылке](/docs/papers/auto-assembly). \ No newline at end of file +__AutoAssembly__. Разрабатывается командой робототехников из компании Arrival, известного производителя электромобилей с R&D командой из Санкт-Петербурга. Фреймворк предназначен для автоматической роботизированной сборки напрямую из CAD. В научной публикации с описанием фреймворка представлена практическая реализация на примере двух манипуляторов Universal Robotics. Исходный код проекта не публикуется; многие технические решения (спецификации, схемы данных, описания языков, тип базы данных) неизвестны. Более подробный обзор см. по [ссылке](/docs/papers/auto-assembly). + +## Минимальные технические требования + +Минимальные системные требования для запуска модуля исполнения планов: + +1. **Важно!** Совместимо только с операционной системой Ubuntu 22.04. +2. Процессор: 64-разрядный процессор с поддержкой SSE4.2 (например, Intel Core i3 или AMD Ryzen 3). +3. Оперативная память: не менее 8 ГБ RAM. +4. Свободное место на диске: не менее 50 ГБ свободного места на диске. +5. Графический процессор: не требуется, но рекомендуется для визуализации и симуляции; для ускорения инференса моделей весов искусственных нейронных сетей может быть использован графический ускоритель. +6. ROS 2 версия: Humble. + +Минимальные системные требования для запуска остальных модулей: + +1. Операционная система: Ubuntu 18.04 (Bionic Beaver) или более новая версия, либо Windows 10 или более новая версия. +2. Процессор: 64-разрядный процессор с поддержкой SSE4.2 (например, Intel Core i5 или AMD Ryzen 5). +3. Оперативная память: не менее 16 ГБ RAM. +4. Свободное место на диске: не менее 150 ГБ свободного места на диске. +5. Графический процессор: NVIDIA GeForce RTX 2060 Super с поддержкой CUDA 10.0 или более новой версии. \ No newline at end of file diff --git a/docs/software/img/rbs_imitation_learning_usecase.jpg b/docs/software/img/rbs_imitation_learning_usecase.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e9fca250cc627602b014ef82b6d97d9a9217890 GIT binary patch literal 180233 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 K1oPzo-vj{W%y`oP literal 0 HcmV?d00001 diff --git a/docs/software/ros2.md b/docs/software/ros2.md index 3255dcf..046a313 100644 --- a/docs/software/ros2.md +++ b/docs/software/ros2.md @@ -13,7 +13,7 @@ title: Модуль исполнения планов - **`env_manager`** - менеджер виртуальных сред: - **`env_manager`** - управление объектами в сцене симуляции Gazebo. - **`env_manager_interfaces`** - ROS 2 интерфейсы для конфигурации, загрузки, активации и выгрузки сред. - - **`rbs_gym`** - модуль обучения с подкреплением: управление обучением, создание симуляционных сред, управление пространствами действий и наблюдений, утилиты. + - **`rbs_gym`** - модуль обучения с подкреплением: управление обучением, создание симуляционных сред, управление пространствами действий и наблюдений, утилиты. Предназначен для реализации среды обучения с подкреплением для роботов-манипуляторов. Он активно использует возможности пакета **env_manager**, упрощая управление сценой и настройку среды. Подробнее о нём в разделе [Сценарии использования](usecases). - **`rbs_runtime`** - запуск основного рантайма с использованием `env_manager`. - **`rbs_bringup`** - запуск сценариев: симуляция, реальный робот, многороботные конфигурации. - **`rbs_bt_executor`** - выполнение деревьев поведения с Behavior Tree CPP v4. @@ -30,117 +30,6 @@ title: Модуль исполнения планов Модуль **rbs_runtime** предназначен для управления симуляцией в режиме реального времени. Если **env_manager** отвечает за конфигурирование сцены, а **rbs_gym** связывает обучаемых агентов с ROS2, то **rbs_runtime** используется для стандартного запуска симуляции без ограничения по времени. Этот модуль представляет собой обёртку для запуска **env_manager** как ROS2-ноды и реализует базовые сервисы управления средой. На данный момент доступен сервис сброса симуляции в начальное состояние. При этом, если для объектов сцены установлены параметры рандомизации, они будут пересчитаны и применены при каждом сбросе. Модуль обеспечивает интеграцию конфигураций среды в инфраструктуру ROS2 и позволяет легко запускать симуляцию, оставляя её гибкой для последующего расширения или взаимодействия. -## rbs_gym - -Модуль **rbs_gym** предназначен для реализации среды обучения с подкреплением для роботов-манипуляторов. Он активно использует возможности пакета **env_manager**, упрощая управление сценой и настройку среды. - -Основные компоненты модуля обеспечивают: -- получение пространства наблюдения, -- передачу управляющих сигналов агенту, -- рандомизацию параметров среды, -- настройку задач, определяющих награды и условия для агента. - -### Пространства наблюдения и действий - -**Пространство наблюдения** включает: -- скорость на эффекторе робота, -- положения суставов робота, -- изображения с камеры (глубина, цвет или облака точек). - -**Пространство действий** позволяет: -- отправлять управляющие сигналы в виде усилий или скоростей в пространстве задач робота, -- управлять положением захватного устройства, -- задавать усилия в конфигурационном пространстве робота. - -### Гибкая настройка агентов - -В составе модуля реализован класс **ExperimentManager**, который управляет предварительной настройкой агентов обучения. Конфигурации описываются в формате YAML. Пример гиперпараметров для алгоритма TD3 доступен [здесь](https://git.robossembler.org/nodes/seed.robossembler.org/rad:z46gtVRpXaXrGQM7Fxiqu7pLy7kip/tree/env_manager/rbs_gym/hyperparams/td3.yml). - -Поддерживаются следующие алгоритмы обучения: -- [TD3](https://arxiv.org/abs/1802.09477) -- [SAC](https://arxiv.org/abs/1801.01290) -- [TQC](https://arxiv.org/abs/2005.04269) - -### Общая структура и примеры - -Общий вид среды обучения для задачи достиженая точки пространства представлен на изображении: - -![rbs_gym_env_view](./img/env.jpg) - -_Общий вид среды для задачи "достижения точки" в **rbs_gym**_ - -На рисунке точка отмечена зеленым шаром. Каждую эпоху обучения выбираются разные позиции для робота в конфигурационном пространстве, а также позиция объекта выбирается случайным образом. - -Диаграмма классов на примере задачи Reach детализирует архитектуру модуля: - -![rbs_gym_class_diagram](./img/rbs_gym_class_diagram.png) -*Диаграмма классов для задачи Reach* - -Агент использует усилия в пространстве задач для достижения до точки. - -**Управляющие сигналы**: - -$$ -\bm{W} = \begin{bmatrix} f_x & f_y & f_z & 0 & 0 & 0 \end{bmatrix}^T -$$ - -где $f$ — компоненты силы. - -**Пространство наблюдения**: - -$$ -\bm{O} = \begin{bmatrix} \bm{p}_e & \bm{p}_o & \bm{v}_e \end{bmatrix}^T -$$ - -где: -- $\bm{p}_e = [x, y, z]^T$ — положение эффектора робота, -- $\bm{p}_o = [x, y, z]^T$ — положение цели, -- $\bm{v}_e$ — пространственный вектор скорости эффектора. - -**Функция наград**: - -1. **За уменьшение дистанции до цели**: - -$$ -R_d = \sum_{t=0}^{T-1} \Delta D_t \cdot 10 -$$ - -где $T$ — число шагов, $D_t$ — расстояние до цели, $\Delta D_t = D_{t} - D_{t-1}$. - -2. **За коллизии**: - -$$ -R_c = \sum_{t=0}^{T-1} \begin{cases} --10, & \text{если } q_t \in C_o, \\ -0, & \text{иначе} -\end{cases} -$$ - -где $C_o$ — пространство коллизий. - -3. **Штраф за медленное выполнение задачи**: - -$$ -R_q = \sum_{t=0}^{T-1} -0.01 -$$ - -4. **Бонус за достижение цели**: - -$$ -R_s = \begin{cases} -100, & \text{если } D_t < 0.05, \\ -0, & \text{иначе.} -\end{cases} -$$ - -**Результирующая награда**: - -$$ -R = R_c + R_d + R_q + R_s -$$ - -Агент считается обученным, если $R = 100 \pm 10$ за эпизод. - ## rbs_assets_library **rbs_assets_library** представляет собой инструмент для интеграции трёхмерных объектов в симуляцию. Она содержит все необходимые ресурсы, включая возможность автоматического расчета инерциальных параметров на основе геометрии объекта. Это достигается благодаря использованию библиотеки **trimesh**, которая анализирует предоставленные модели и генерирует данные, необходимые для корректного воспроизведения физики объекта в симуляторе. diff --git a/docs/software/ros2/installation.md b/docs/software/ros2/installation.md index 55d2446..2ffcd33 100644 --- a/docs/software/ros2/installation.md +++ b/docs/software/ros2/installation.md @@ -1,32 +1,77 @@ # Инструкция по установке фреймворка -Первым делом необходимо установить [ROS2 Humble](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html). Рекомендуется минимальная установка. +## Шаг 1: Установка ROS2 Humble -Вторым делом надо собрать [`ros2_control`](https://github.com/ros-controls/ros2_control) из исходников из этого [форка](https://github.com/solid-sinusoid/ros2_control/tree/gz-ros2-cartesian-controllers) стоит отметить, что также существует альтернативная установка с использованием [`vsctool`](https://github.com/dirk-thomas/vcstool) который поставляется с базовыми пакетами ROS2. +Для начала установите [ROS2 Humble](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html). +Рекомендуется минимальная установка `ros-humble-ros-base`, а также пакет `ros-dev-tools`. -Если устанавливать через `vcstool` тогда необходимые пакеты будут клонированы в тоже рабочее пространство, что и сам фреймворк. Сама команда будет выглядеть так +## Шаг 2: Проверка среды ROS2 + +Перед продолжением убедитесь, что среда ROS2 активирована. Для этого выполните: ```sh -vcs import . < robossembler-ros2/repos/all-deps.repos +source /opt/ros/humble/setup.bash ``` -Заодно можно выполнить команду для установки всех требуемых библиотек Python -```shell -pip insatll -r robossembler-ros2/repos/requirements.txt +## Шаг 3: Если Вы этого не делали то сделайте +```sh +sudo rosdep init +rosdep update ``` -При этом команду надо выполнять в директории `{robossembler_ws}/src/` +## Шаг 4: Установка фреймворка -Более четкая последовательность команд кому лень: ```sh cd -mkdir -p robossembler-ros2/src && cd robossembler-ros2 -git clone git clone https://seed.robossembler.org/z46gtVRpXaXrGQM7Fxiqu7pLy7kip.git robossembler-ros2 -# Или если вы предпочитаете radicle -rad clone rad:z46gtVRpXaXrGQM7Fxiqu7pLy7kip -cd src -vcs import . < robossembler-ros2/repos/all-deps.repos -pip insatll -r robossembler-ros2/repos/requirements.txt -cd .. -rosdep install --from-paths src -y --ignore-src -colcon build --symlink-install +mkdir -p robossembler-ws/src && cd robossembler-ws/src +git clone --recurse-submodules https://gitlab.com/robossembler/robossembler-ros2.git ``` + +Далее необходимо собрать [`ros2_control`](https://github.com/ros-controls/ros2_control) из исходников, используя этот [форк](https://github.com/solid-sinusoid/ros2_control/tree/gz-ros2-cartesian-controllers). +Также доступна альтернатива с использованием [`vsctool`](https://github.com/dirk-thomas/vcstool), который входит в состав базовых пакетов ROS2. + +Если вы решили использовать `vcstool`, нужные пакеты будут клонированы в тоже рабочее пространство, что и сам фреймворк. Команда для этого выглядит следующим образом: +```sh +vcs import . < robossembler-ros2/repos/all-deps.repos +``` + +Вы также можете установить все необходимые библиотеки Python, выполнив команду: +```shell +pip install -r robossembler-ros2/repos/requirements.txt +# Если Вы получили ошибку с установкой Shapely +sudo apt install libgeos-dev +``` + +> **[!ВНИМАНИЕ]** +> Убедитесь, что у вас установлен `git lfs`. В файле `requirements.txt` указан модуль `rbs_assets_library`, который содержит большие файлы и устанавливается как Python-модуль. + +Эти команды нужно выполнять в директории `robossembler-ws/src/`. + +Установка зависимостей при помощи `rosdep` +```sh +cd ~/robossembler-ws +rosdep install --from-paths src -y --ignore-src --rosdistro ${ROS_DISTRO} +``` + +Сборка фреймворка при помощи `colcon` +```sh +colcon build +``` + +## Полная последовательность команд + +Ниже приведён полный набор команд для настройки фреймворка: +```sh +cd +mkdir -p robossembler-ws/src && cd robossembler-ws/src +git clone --recurse-submodules https://gitlab.com/robossembler/robossembler-ros2.git +# Или, если вы предпочитаете Radicle: +git clone --recurse-submodules https://seed.robossembler.org/z46gtVRpXaXrGQM7Fxiqu7pLy7kip.git robossembler-ros2 +rad clone rad:z46gtVRpXaXrGQM7Fxiqu7pLy7kip + +vcs import . < robossembler-ros2/repos/all-deps.repos +pip install -r robossembler-ros2/repos/requirements.txt +cd .. +rosdep install --from-paths src -y --ignore-src --rosdistro ${ROS_DISTRO} +colcon build +``` + diff --git a/docs/software/shalenikol_commits_4th_milestone.md b/docs/software/shalenikol_commits_4th_milestone.md deleted file mode 100644 index 0b1e470..0000000 --- a/docs/software/shalenikol_commits_4th_milestone.md +++ /dev/null @@ -1,230 +0,0 @@ ---- -id: report4part -title: work for the 4 reporting period ---- - -## Общий список работ - 1) перевод навыков компьютерного зрения на работу через интерфейсную ноду (Object Detection, Pose Estimation) - 2) тестирование и отладка интерфейсов веб-сервиса для создания деревьев поведения - - добавление новых деталей в проект - - разработка новой схемы описания зависимостей, основанной на применении топиков ROS2 - - использование цифровых двойников (Digital Twins) - - получение интерфейсов ROS2: GetInterfaces - - переход на новую версию деревьев поведения (с 3 на 4) - - добавление условий в деревья поведения (Condition) - - сохранение и использование файла описания навыков, используемых в BT (json) - - тестирование форм-билдера - универсального web-модуля ввода параметров и зависимостей пользователем - 3) разработка навыка BT для записи демонстрации rosbag во время симуляции действий робота - 4) модуль конвертации файлов rosbag в формат обучения lerobot - 5) разработка пользовательского навыка BT (клиента) движения робота в заданную точку (move to pose) - - для cartesian-контроллера - - для MoveIt - 6) рефакторинг: - - перенос интерфейсного узла в пакет запуска деревьев поведения - - выделение навыков компьютерного зрения в отдельные пакеты (rbss_objectdetection, rbss_poseestimation) - - -## Перевод навыков компьютерного зрения на работу через интерфейсную ноду (Object Detection, Pose Estimation) -При разработке интерфейсной ноды, которая позволила упростить обмен данными между испольнительной системой деревьев поведения и конкретными навыками, появилась потребность в адаптации навыков компьютерного зрения для работы с новым API. -В имплементации навыка Object Detection для YoloV8 теперь необходимо все параметры для его работы сохранить в json-описании до его использования с деревом поведения, а зависимости (такие как наименование объекта распознавания, веса модели, имя топика получаемого изображения), задаваемые в узле дерева поведения, встроить в вышеуказанное json-описание. При выполнении дерева поведения для активации распознавания необходимо передать lifecycle-узлу навыка всё json-описание одним пакетом через интерфейсную ноду. -Схожим образом была настроена работа навыка Pose Estimation (методом DOPE). - - -## Тестирование и отладка интерфейсов веб-сервиса для создания деревьев поведения -Для того, чтобы полноценно разрабатывать алгоритмы поведения робота в различных сценариях использования, нам потребовалось создать механизм создания, редактирования и запуска деревьев поведения, основанный на управляющей программе веб-сервиса. Веб-сервис, в свою очередь, должен взаимодействовать с пакетами ROS2, реализующими конкретные навыки управления роботом (в режиме симуляции, а также в реальной обстановке) для их запуска и получения обратной связи. -Для этого мы разработали стандарт описания пользовательских навыков в виде json. -[Пример описания навыка](https://gitlab.com/robossembler/robossembler-ros2/-/blob/main/rbss_movetopose/rbs_package.json?ref_type=heads): -```json -{ - "SkillPackage": { "name": "Robossembler", "version": "1.0", "format": "1" }, - "Module": { "name": "MoveToPose", "description": "Move to Pose skill with cartesian controllers", "node_name": "mtp_cartesian" }, - "Launch": { "package": "rbss_movetopose", "executable": "mtp_cartesian.py" }, - "BTAction": [ - { - "name": "move", - "type": "action", - "param": [ - { - "type": "move_to_pose", - "dependency": { "robot_name": "arm0", - "pose": { "position": {"x":0.0, "y":0.0, "z":0.0}, "orientation": {"x":0.0, "y":0.0, "z":0.0, "w": 1.0} } } - } - ] - } - ], - "Settings": { - "result": "{\n  \"params\": \\${ITEM:Array:[]}\n}", - "context": "type ITEM = {\n\"name\": \\${NAME:string:default},\n\"value\": \\${VALUE:string:default}\n};", - "form": [ - "{\"name\":\"ITEM\",\"type\":\"Array\",\"id\":\"767a59ff-3d25-4c34-84a2-fa5baf074394\"}" - ], - "output": { - "params": [ - { - "name": "server_name", - "value": "cartesian_move_to_pose" - }, - { - "name": "end_effector_velocity", - "value": "1.0" - }, - { - "name": "end_effector_acceleration", - "value": "1.0" - } - ] - }, - "type": "formBuilder" - } -} -``` - -### добавление новых деталей в проект -### разработка новой схемы описания зависимостей, основанной на применении топиков ROS2 -### использование цифровых двойников (Digital Twins) -### получение интерфейсов ROS2: GetInterfaces -### переход на новую версию деревьев поведения (с 3 на 4) -### добавление условий в деревья поведения (Condition) -Условия в деревьях поведения (Condition) отличаются от действий лишь тем, что возвращают, по итогу, булево значение - true / false. -Для наших целей мы установили, что такие функции должны быть достаточно быстрыми и выполняться в синхронном режиме вопрос-ответ. Поэтому для их реализации в интерфейсной ноде мы их выделили в отдельный класс RbsCondition, а их обработчик - в виде сервиса. По итогам отладки пришли к выводу, что такой подход упрощает проектирование навыков и уменьшает накладные расходы при реализации нашего API. - -### сохранение и использование файла описания навыков, используемых в BT (json) -### тестирование форм-билдера - универсального web-модуля ввода параметров и зависимостей пользователем - - -## Разработка навыка BT для записи демонстрации rosbag во время симуляции действий робота - -Положение робота определяется положением его составляющих частей, что в ROS2 описывается сообщениями типа "sensor_msgs/msg/JointState". Если к ним добавить изображения с камер, имеющихся в сцене с роботом, то мы получим полное представление о том, что происходило при прохождении заданного деревом поведения сценария. Поэтому решено было в целях демонстрации, а также в целях получения датасетов для обучения робота создать навык, позволяющий включать и выключать запись таких данных в формат rosbag. - -Пример реализации такого навыка в дереве поведения: -```xml - - - - - - - - - - - - - - - - -``` -* skills.json (файл описания навыков, используемых в дереве поведения) -```json -{ - "skills": [ - { - "sid": "a", - "SkillPackage": { "name": "Robossembler", "version": "1.0", "format": "1" }, - "Module": { "name": "RecordingDemo", "description": "Recording a demo via RosBag", "node_name": "lc_record_demo" }, - "Launch": { "package": "rbs_utils", "executable": "recording_demo_via_rosbag.py" }, - "BTAction": [ - { - "name": "rdConfigure", - "type_action": "action", - "type": "run", - "param": [], - "result":[] - }, - { "name": "rdStop", "type_action": "action", "type": "stop", "param": [], "result": [] } - ], - "Settings": [ - { "name": "output_path", "value": "rbs_testbag" } - ] - }, - { - "sid": "c", - "SkillPackage": { "name": "Robossembler", "version": "1.0", "format": "1" }, - "Module": { "name": "MoveToPose", "description": "Move to Pose skill with cartesian controllers", "node_name": "mtp_cartesian" }, - "Launch": { "package": "rbss_movetopose", "executable": "mtp_cartesian.py" }, - "BTAction": [ - { - "name": "move", - "type_action": "action", - "type": "action", - "param": [ - { - "type": "move_to_pose", - "dependency": { "robot_name": "arm0", - "pose": { "position": {"x":0.1, "y":0.1, "z":0.9}, "orientation": {"x":0.55, "y":0.0, "z":0.45, "w": 1.0} } } - } - ] - } - ], - "Settings": [ - { "name": "server_name", "value": "cartesian_move_to_pose" }, - { "name": "end_effector_velocity", "value": 1.0 }, - { "name": "end_effector_acceleration", "value": 1.0 } - ] - } - ] -} -``` -В процессе отладки навыка выяснилось, что в используемой нами версии ROS2 - Humble в питоновских нодах не работает функция writer.close(), закрывающая текущий сеанс записи. Выяснили, что этот bug исправлен в последующих релизах (в частности, в Jazzy). Пока вышли из ситуации перезапуском ноды навыка. - -## модуль конвертации файлов rosbag в формат обучения lerobot -С целью облегчить внедрение роботов нами принято решение создать подход, использующий имитационное обучение и обучение с покреплением, который можно применять даже не имея реального робота, а в имитационной среде. Для этого мы воспользовались актуальным на данный момент, довольно широко поддерживаемым решением [lerobot](https://github.com/huggingface/lerobot), которое предполагает использование стандарта создания и публикации датасетов для этих целей. -Нами была разработана, протестирована и добавлена конвертации исходного формата "rbs_ros2bag" в lerobot-датасет - см. `lerobot/common/datasets/push_dataset_to_hub/rbs_ros2bag_format.py`. - -Пример команды: -```bash -python push_dataset_to_hub.py \ - --raw-dir /home/user/rbs_bag_to_lerobot \ - --local-dir data/lerobot/rbs_tst_episode \ - --repo-id lerobot/rbs_tst_episode \ - --raw-format rbs_ros2bag \ - --push-to-hub 0 \ - --video 0 \ - --force-override 1 -``` -## разработка пользовательского навыка BT (клиента) движения робота в заданную точку (move to pose) - - для cartesian-контроллера - - для MoveIt - -## Рефакторинг. -### Перенос интерфейсного узла в пакет запуска деревьев поведения -Интерфейсная нода выполняет 3 основных задачи: - - парсинг зависимостей дерева поведения при старте интерфейсного узла для выделения списка навыков и их запуск, - - передача параметров и зависимостей при выполнении узлов дерева поведения нужным навыкам, - - синхронизация выполнения узлов дерева поведения исполнительной системой behaviortree_cpp и выполнением этих операций через пользовательские навыки в ROS2. - -Остановимся подробнее на описании этих функций в интерфейсной ноде. -При создании дерева поведения в редакторе веб-сервиса (bt.xml) каждому узлу присваивается уникальный идентификатор (sid), который позволяет связать эти узлы при выполнении с их описанием (включающим параметры, вводимые пользователем, статичные настройки навыков и зависимости, указывающие на объекты и артефакты среды): skills.json. -Эти данные передаются в качестве параметров при старте интерфейсной ноды (в виде пути к вышеуказанным файлам). -Пример команды запуска интерфейсной ноды: -```bash -ros2 launch rbs_bt_executor interface.launch.py bt_path:=/path/to/bt&skills -``` -Модуль запуска также парсит файл skills.json, составляя список пользовательских навыков и передавая его для запуска в ROS2. -Интерфейсная нода при создании создаёт сервер действий (ActionServer) для выполнения узлов действий (RbsAction) дерева поведения и сервис для проверки условий (RbsCondition). -Затем возможно выполнение команды запуска дерева поведения: -```bash -ros2 launch rbs_bt_executor rbs_bt_web.launch.py bt_path:=/path/to/bt&skills -``` -Рассмотрим стандартный алгоритм исполнения одного узла дерева поведения на примере RbsAction (т.е. действия). -Вначале в интерфейсную ноду через обратный вызов сервера действий приходит запрос с целью, в которой указан конкретный идентификатор (sid) узла BT, наименование запрашиваемой у навыка команды и её тип. Интерфейсная нода находит в описании параметров дерева нужный блок с этим sid, записывает этот блок в параметр ноды навыка с заранее предопределённым именем (имя ноды навыка + суффикс "_cfg"). В случае с lifecycle-нодой навыка производится процедура конфигурирования и активации этой ноды, либо обратная процедура деактивации и очистки состояния. -Нода навыка, получив нужный параметр, выполняет заданное действие, а интерфейсная нода ожидает выполнения для передачи ответа в исполняющую систему BT. -Аналогично происходит процесс выполнения проверки условия RbsCondition, с той лишь разницей, что происходят обратные вызовы сервиса интерфейсной ноды. - -Нужно обратить внимание, что параметр, передаваемый навыку, представляет собой json-строку, в которой передаются все установки и зависимости, необходимые для выполнения запрашиваемого действия или проверки заданного условия. - -Таким образом, схема построения пользовательского навыка выглядит следующим образом: - - для lifecycle-узла: обработка вызовов конфигурирования, активации, деактивации и очистки состояния с использованием данных, передаваемых через предопределённый параметр, - - для обычного узла: обработка обратного вызова установки предопределённого параметра, соответственно, с выполнением операций, определяемых этим параметром. - -### выделение навыков компьютерного зрения в отдельные пакеты (rbss_objectdetection, rbss_poseestimation) - - -## Имплементация средств контроля используемых ресурсов -Весьма значительное время и ресурсы компьтерного оборудования используются в процессе подготовки и использования нейросетевых моделей. Мы решили для целей оптимизации и профилирования этих процессов внедрить оценку на основе пакета [TensorBoard](https://www.tensorflow.org/tensorboard?hl=ru) для сбора данных и их представления в веб-сервисе. -При отладке этого модуля выявили некоторые особенности, влияющие на работоспособность данного пакета. - -Сбор данных о потреблении ресурсов компьютера следует производить отдельно от сбора данных непосредственно об метриках обучения. -Необходимо ограничить запуск шагов обучения 5-ю эпохами (первая - пропускается, вторая - сбор данных производится, но результаты отбрасываются, три последующих - происходит накопление и сохранение данных). При увеличении количества шагов, при которых накапливается информация о производительности, рост затрат на этот процесс не позволяет ему завершиться и, чаще всего, приводит к сбоям в работе и зависанию компьютера. - diff --git a/docs/software/usecases.md b/docs/software/usecases.md new file mode 100644 index 0000000..d0416a8 --- /dev/null +++ b/docs/software/usecases.md @@ -0,0 +1,142 @@ +--- +title: Сценарии использования +--- + +Фреймворк может найти достаточно широкое распространение. Несмотря на то, что основной задачей фреймворка являлась автоматизация процесса разработки программ роботизированной сборки, программное обеспечение может применяться также и для других задач. + +В частности, +- веб-сервис с модулями генерации датасетов и интерфейсом создания новых навыков может применяться для запуска любых других поддерживающих API навыков, не связанным напрямую с задачей сборки изделий; +- модуль исполнения программ ROS 2 включает в себя довольно гибкую систему управления исполнением с помощью деревьев поведения и может быть применён к любым задачам планирования, требующих модульности и реактивности; +- для студентов, исследователей и инженеров фреймворк может упростить разработку и отладку программного обеспечения за счёт использования функций высокого уровня абстракции при решении задач манипулирования. + +Ниже рассмотрены сценарии использования, которые были разработаны командой Robossembler. + +## Обучение с подкреплением - rbs_gym + +Модуль **rbs_gym** предназначен для реализации среды обучения с подкреплением для роботов-манипуляторов. Он активно использует возможности открытой библиотеки Робосборщик, упрощая управление сценой и настройку среды. + +Основные компоненты модуля обеспечивают: +- получение пространства наблюдения, +- передачу управляющих сигналов агенту, +- рандомизацию параметров среды, +- настройку задач, определяющих награды и условия для агента. + +### Пространства наблюдения и действий + +**Пространство наблюдения** включает: +- скорость на эффекторе робота, +- положения суставов робота, +- изображения с камеры (глубина, цвет или облака точек). + +**Пространство действий** позволяет: +- отправлять управляющие сигналы в виде усилий или скоростей в пространстве задач робота, +- управлять положением захватного устройства, +- задавать усилия в конфигурационном пространстве робота. + +### Гибкая настройка агентов + +В составе модуля реализован класс **ExperimentManager**, который управляет предварительной настройкой агентов обучения. Конфигурации описываются в формате YAML. Пример гиперпараметров для алгоритма TD3 доступен [здесь](https://git.robossembler.org/nodes/seed.robossembler.org/rad:z46gtVRpXaXrGQM7Fxiqu7pLy7kip/tree/env_manager/rbs_gym/hyperparams/td3.yml). + +Поддерживаются следующие алгоритмы обучения: +- [TD3](https://arxiv.org/abs/1802.09477) +- [SAC](https://arxiv.org/abs/1801.01290) +- [TQC](https://arxiv.org/abs/2005.04269) + +### Общая структура и примеры + +Общий вид среды обучения для задачи достиженая точки пространства представлен на изображении: + +![rbs_gym_env_view](img/env.jpg) + +_Общий вид среды для задачи "достижения точки" в **rbs_gym**_ + +На рисунке точка отмечена зеленым шаром. Каждую эпоху обучения выбираются разные позиции для робота в конфигурационном пространстве, а также позиция объекта выбирается случайным образом. + +Диаграмма классов на примере задачи Reach детализирует архитектуру модуля: + +![rbs_gym_class_diagram](img/rbs_gym_class_diagram.png) +*Диаграмма классов для задачи Reach* + +Агент использует усилия в пространстве задач для достижения до точки. + +**Управляющие сигналы**: + +$$ +\bm{W} = \begin{bmatrix} f_x & f_y & f_z & 0 & 0 & 0 \end{bmatrix}^T +$$ + +где $f$ — компоненты силы. + +**Пространство наблюдения**: + +$$ +\bm{O} = \begin{bmatrix} \bm{p}_e & \bm{p}_o & \bm{v}_e \end{bmatrix}^T +$$ + +где: +- $\bm{p}_e = [x, y, z]^T$ — положение эффектора робота, +- $\bm{p}_o = [x, y, z]^T$ — положение цели, +- $\bm{v}_e$ — пространственный вектор скорости эффектора. + +**Функция наград**: + +1. **За уменьшение дистанции до цели**: + +$$ +R_d = \sum_{t=0}^{T-1} \Delta D_t \cdot 10 +$$ + +где $T$ — число шагов, $D_t$ — расстояние до цели, $\Delta D_t = D_{t} - D_{t-1}$. + +2. **За коллизии**: + +$$ +R_c = \sum_{t=0}^{T-1} \begin{cases} +-10, & \text{если } q_t \in C_o, \\ +0, & \text{иначе} +\end{cases} +$$ + +где $C_o$ — пространство коллизий. + +3. **Штраф за медленное выполнение задачи**: + +$$ +R_q = \sum_{t=0}^{T-1} -0.01 +$$ + +4. **Бонус за достижение цели**: + +$$ +R_s = \begin{cases} +100, & \text{если } D_t < 0.05, \\ +0, & \text{иначе.} +\end{cases} +$$ + +**Результирующая награда**: + +$$ +R = R_c + R_d + R_q + R_s +$$ + +Агент считается обученным, если $R = 100 \pm 10$ за эпизод. + +### Тестирование и результаты + +На графике представлены результаты обучения: + +![train_metrics](img/train_metrics-1.jpg) +*Графики обучения. Допустимая область (100 ± 10) показывает диапазон, при котором агент считается обученным.* + +### Самостоятельный запуск обучения + +Для самостоятельно запуска этого примера следуйте [инструкции](https://gitlab.com/solid-sinusoid/env_manager/-/blob/main/docs/getting_started/getting_started.ru.md). + +## Имитационное обучение с помощью деревьев поведения + +Описанный выше модуль `rbs_gym` также можно использовать для более специфических сценариев применения - в частности, для имитационного обучения, где обучение с подкреплением дополняется демонстрациями, полученными в симуляторе или с помощью устройств телеуправления роботом. Ниже приведена диаграмма ориентировочной реализации такого сценария, на которой отражены основные модули системы и их взаимосвязи. + +![robossembler imitation learning](img/rbs_imitation_learning_usecase.jpg) + +На диаграмме показано каким образом программные модули фреймворка `bt_executor`, `scene_builder`, `rbs_runtime`, `env_manager` интегрируются со сторонними библиотеками - в частности, с библиотекой [lerobot](https://github.com/huggingface/lerobot), из которой используются модули для формирования `Policy`, обучения и конвертации датасета. На диаграмме также выделены примитивы дерева поведения, среди которых можно отметить RecordEpisode, осуществляющий запись демонстраций в runtime в цикле. \ No newline at end of file diff --git a/sidebars.js b/sidebars.js index 6ca905b..cd3bebc 100644 --- a/sidebars.js +++ b/sidebars.js @@ -84,6 +84,11 @@ module.exports = { id: 'software/webservice', label: 'Веб-интерфейс', }, + { + type: 'doc', + id: 'software/usecases', + label: 'Сценарии использования', + }, ], }, /* {