From fcc8d3500dc52f4f1fb137abd33e97ee4d28fdb6 Mon Sep 17 00:00:00 2001 From: movefasta Date: Fri, 3 Mar 2023 16:15:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F=D0=BB=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=81=D1=82=D0=B0=D0=BC=D0=B8=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D1=8B=20PDDL=20=D0=B8=20Plansys2=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=83=D0=B4=D0=BE=D0=B1=D1=81=D1=82=D0=B2=D0=B0?= =?UTF-8?q?=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/technologies/plansys2.md | 146 +++++++++++++++++----------------- 1 file changed, 75 insertions(+), 71 deletions(-) diff --git a/docs/technologies/plansys2.md b/docs/technologies/plansys2.md index a8c4f43..1c09a3a 100644 --- a/docs/technologies/plansys2.md +++ b/docs/technologies/plansys2.md @@ -3,13 +3,79 @@ id: plansys2 title: 'PlanSys2 & PDDL' --- -# ROS2 Planning System (PlanSys2) +Для описания задач (task planning) в фреймворке Робосборщик используется язык PDDL и основанная на нём система планирования и управления задачами Plansys2. + +## Planning Domain Definition Language (PDDL) + +PDDL (Planning Domain Definition Language) - Lisp-подобный язык для логического планирования. PlanSys2 поддерживает PDDL версии 2.1, текущая версия PDDL - 3.1. + +Описание технологического процесса для автоматического планирования на языке PDDL состоит из двух частей: +- Описание предметной области - __Domain__ (какие в принципе существуют типы объектов, условий, функций и действий) +- Описание конкретной задачи - __Problem__ (какие объекты и какие стартовые условия представлены в конкретном техпроцессе - т.е. что у нас есть вообще в сцене/установке/производстве) + +### PDDL Domain + +Согласно [спецификации](https://planning.wiki/ref) PDDL Domain содержит следующие базовые сущности планируемой задачи: + +#### Объекты (Objects) +Какие типы/подтипы объекты фигурируют в технологическом процессе. +Примеры +- Движитель (Подтипы - Робот-манипулятор, поворотный стол, конвеер) +- Приспособление (Подтипы - Захват, Пинцет и т.д.) +- Пробирка (Подтипы - Большая, маленькая и т.д.) +- Посадочный материал (Подтипы - Корешок, листок, черенок) +- Навык робота, программа (Подтипы - Захват, разрез, распознавание) + +#### Условия (Predicates) +Типы условий, при которых начинаются те или иные действия. Это вопросы, подразумевающие ответ Да или Нет. + +Примеры: +- Посадочный материал в пробирке? +- Робот свободен для задачи? +- Объект распознан? +- Посадочный материал поврежён? + +#### Функции (Functions) +Функции похожи на условия - это тоже вопросы. Разница в том, что это вопросы, подразумевающие ответ в виде числа. + +Примеры: +- Какой заряд у аккумуляторной батареи? +- Какая масса у посадочного материала X? + +#### Действия (actions) +Действия, производящиеся в рамках технологического процесса. Состоят из: +- __Параметров__ (parameters) - задействованные объекты +- __Длительности__ (duration) - продолжительность действия +- __Условий__ (condition) - условия, при которых действие начинается/продолжается/завершается +- __Эффектов__ (effect) - результаты после начала и завершения + +Пример: +- Действие _захват-пробирки_ +- Параметры _робот_, _захватное-устройство_, _пробирка_ +- Условия + - начала: _робот-свободен_, _захватное-устройство-подключено_, _пробирка-в-наличии_ + - продолжения - _в-комнате-нет-людей_ + - завершения - _робот-не-движется_, _пробирка-в-захвате_ +- Эффекты + - в начале: _робот-занят_ + - при завершении - _робот-свободен_, _пробирка-захвачена_ + +### PDDL Problem + +Проблема описывает конкретную задачу с исходными условиями на момент начала задачи. Исходных условий может быть много. Problem обычно генерируется автоматически для подбора оптимальной конфигурации. Планировщик сам генерирует план исполнения в зависимости от описания задачи. + +Описание задачи/проблемы выглядит следующим образом +- __Объекты__ (objects) - наличествующие объекты, обязательно должны соответствовать типам из PDDL Domain +- __Начальное состояние__ (init) - текущие значения условий на момент начала +- __Спецификация целей__ (goal) - условия выполнения задания + +## ROS2 Planning System (PlanSys2) [PlanSys2](https://github.com/IntelligentRoboticsLabs/ros2_planning_system) - это система планирования для ROS2 от создателей ROSPlan (система планирования для ROS1). PlanSys2 не ограничивается планированием в рамках одного устройства, а поддерживает распределение задач между _многими взаимодействующими агентами_ в реальном времени. Исполнение планов реализовано на базе _Деревьев поведения_. Видео-презентация [1](https://www.youtube.com/watch?v=SQoN79BBQno), [2](https://www.youtube.com/watch?v=58pvI8rgUvk) -## Архитектура фреймворка PlanSys2 +### Архитектура фреймворка PlanSys2 Архитектура PlanSys2 модульная и каждый отдельный компонент может быть заменён. @@ -30,7 +96,7 @@ title: 'PlanSys2 & PDDL' * Проверяет статус узлов, исполняющих действия. -## Пример сборки автомобиля тремя роботами +### Пример сборки автомобиля тремя роботами Сначала формируется план в PDDL-формате: @@ -78,90 +144,28 @@ title: 'PlanSys2 & PDDL' Пример: ![](img/action_execution_flow_example.png) -## Симуляция и полевые испытания +### Симуляция и полевые испытания PlanSys2 был проверен сначала в симуляции, а потом и на реальной системе, состоящей из 3-ёх роботов. Исходные коды проекта опубликованы на [Github](https://github.com/IntelligentRoboticsLabs/plansys2_cooking_experiment). -# Planning Domain Definition Language (PDDL) +## Другие полезные ссылки - Планы и задачи описываются на Lisp-подобном языке PDDL (Planning Domain Definition Language). PlanSys2 поддерживает PDDL версии 2.1, текущая версия PDDL - 3.1. - -Описание технологического процесса для автоматического планирования на языке PDDL состоит из двух частей: -- Описание предметной области - __Domain__ (какие в принципе существуют типы объектов, условий, функций и действий) -- Описание конкретной задачи - __Problem__ (какие объекты и какие стартовые условия представлены в конкретном техпроцессе - т.е. что у нас есть вообще в сцене/установке/производстве) - -## PDDL Domain - -Согласно [спецификации](https://planning.wiki/ref) PDDL Domain содержит следующие базовые сущности планируемой задачи: - -### Объекты (Objects) -Какие типы/подтипы объекты фигурируют в технологическом процессе. -Примеры -- Движитель (Подтипы - Робот-манипулятор, поворотный стол, конвеер) -- Приспособление (Подтипы - Захват, Пинцет и т.д.) -- Пробирка (Подтипы - Большая, маленькая и т.д.) -- Посадочный материал (Подтипы - Корешок, листок, черенок) -- Навык робота, программа (Подтипы - Захват, разрез, распознавание) - -### Условия (Predicates) -Типы условий, при которых начинаются те или иные действия. Это вопросы, подразумевающие ответ Да или Нет. - -Примеры: -- Посадочный материал в пробирке? -- Робот свободен для задачи? -- Объект распознан? -- Посадочный материал поврежён? - -### Функции (Functions) -Функции похожи на условия - это тоже вопросы. Разница в том, что это вопросы, подразумевающие ответ в виде числа. - -Примеры: -- Какой заряд у аккумуляторной батареи? -- Какая масса у посадочного материала X? - -### Действия (actions) -Действия, производящиеся в рамках технологического процесса. Состоят из: -- __Параметров__ (parameters) - задействованные объекты -- __Длительности__ (duration) - продолжительность действия -- __Условий__ (condition) - условия, при которых действие начинается/продолжается/завершается -- __Эффектов__ (effect) - результаты после начала и завершения - -Пример: -- Действие _захват-пробирки_ -- Параметры _робот_, _захватное-устройство_, _пробирка_ -- Условия - - начала: _робот-свободен_, _захватное-устройство-подключено_, _пробирка-в-наличии_ - - продолжения - _в-комнате-нет-людей_ - - завершения - _робот-не-движется_, _пробирка-в-захвате_ -- Эффекты - - в начале: _робот-занят_ - - при завершении - _робот-свободен_, _пробирка-захвачена_ - -## PDDL Problem - -Проблема описывает конкретную задачу с исходными условиями на момент начала задачи. Исходных условий может быть много. Problem обычно генерируется автоматически для подбора оптимальной конфигурации. Планировщик сам генерирует план исполнения в зависимости от описания задачи. - -Описание задачи/проблемы выглядит следующим образом -- __Объекты__ (objects) - наличествующие объекты, обязательно должны соответствовать типам из PDDL Domain -- __Начальное состояние__ (init) - текущие значения условий на момент начала -- __Спецификация целей__ (goal) - условия выполнения задания - -## Основные классы алгоритмов планирования +### Основные классы алгоритмов планирования ![pddl_planners](img/pddl_planners.jpg) -## Программы для работы с PDDL +### Программы для работы с PDDL * Плагины для редакторов [VSCode](https://github.com/jan-dolejsi/vscode-pddl) ![vscode-pddl](https://img.shields.io/github/stars/jan-dolejsi/vscode-pddl.svg) ([video-tutorial](https://www.youtube.com/watch?v=BFlCz49ETcA&list=PL1Q0jeuU6XppflOPFx1qQVuWbXTcjxevU)), [Sublime Text](https://github.com/Pold87/myPDDL) ![myPDDL](https://img.shields.io/github/stars/Pold87/myPDDL.svg) * [vPlanSim](https://github.com/mastrogiorgis/vPlanSim) - графический интерфейс для визуализации и симуляции PDDL-планирования на базе Python3.7, VTK8.2, PyQt5. ![vPlanSim](https://img.shields.io/github/stars/mastrogiorgis/vPlanSim.svg) * Парсеры PDDL - [Julia](https://github.com/JuliaPlanners/PDDL.jl), [python](https://github.com/pucrs-automated-planning/pddl-parser), [C#](https://github.com/hfoffani/pddl-lib), [Java](https://github.com/gerryai/PDDL4J), [С++](https://github.com/wisdompoet/universal-pddl-parser) * [planutils](https://github.com/AI-Planning/planutils) - библиотека общего назначения для разработки, запуска и оценки планировщиков. ![planutils](https://img.shields.io/github/stars/AI-Planning/planutils.svg) * [blockly-pddl](https://github.com/AI-Planning/blockly-pddl) - транслятор PDDL-файлов в язык Blockly и обратно. ![blockly-pddl](https://img.shields.io/github/stars/AI-Planning/blockly-pddl.svg) -## PDDL-фреймворки +### PDDL-фреймворки * [pddlstream](https://github.com/caelan/pddlstream) - фреймворк для планирования, состоящий из языка действий и набора алгоритмов для AI-планирования при наличии процедур выборки. PDDLStream расширяет PDDL, вводя потоки и декларативные спецификации процедур выборки. Алгоритмы PDDLStream не зависят от предметной области и решают проблемы PDDLStream только с описанием каждого сэмплера как черного ящика. Мотивом появления PDDLStream был Task and Motion Planning (TAMP) - [paper](https://arxiv.org/pdf/1802.08705.pdf). ![pddlstream](https://img.shields.io/github/stars/caelan/pddlstream.svg) * [pddlgym](https://github.com/tomsilver/pddlgym) - фреймворк, который автоматически создает среду OpenAI-Gym из спецификаций PDDL - [paper](https://arxiv.org/pdf/2002.06432.pdf). ![pddlgym](https://img.shields.io/github/stars/tomsilver/pddlgym.svg) * [LAPKT](https://github.com/LAPKT-dev/LAPKT-public) - набор легковесных инструментов для автоматизированного планирования (Lightweight Automated Planning Toolkit). Предлагает независимый от конкретных языков планирования абстрактный интерфейс для расчёта планов. Легко интегрируется с PDDL/STRIPS. * [Fast Downward](https://github.com/aibasel/downward) - система планирования, поддерживающая PDDL. На конкурсе Classical Planing в 2018 году заняла первое место в двух треках ([подробнее](https://ipc2018-classical.bitbucket.io/#results)). -## Расширения PDDL +### Расширения PDDL * [HDDL](https://www.uni-ulm.de/fileadmin/website_uni_ulm/iui.inst.090/Publikationen/2020/Hoeller2020HDDL.pdf) - расширения PDDL для поддержки иерархических задач. Использовался для создания планировщика [PANDA Planning Framework](https://panda-planner-dev.github.io/), где реализован [парсер HDDL](https://github.com/panda-planner-dev/pandaPIparser) * [Universal PDDL Parser - Multiagent Extension](https://github.com/aig-upf/universal-pddl-parser-multiagent) - расширение [universal-pddl-parser](https://github.com/aig-upf/universal-pddl-parser), поддерживающие multi-agent расширение PDDL 3.1 для спецификаций Crosby, Jonsson and Rovatsos, 2014 и Kovacs, 2012. \ No newline at end of file