Поменял местами разделы PDDL и Plansys2 для удобства чтения
This commit is contained in:
parent
037f72559f
commit
fcc8d3500d
1 changed files with 75 additions and 71 deletions
|
@ -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'
|
|||
Пример:
|
||||

|
||||
|
||||
## Симуляция и полевые испытания
|
||||
### Симуляция и полевые испытания
|
||||
|
||||
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
|
||||
### Программы для работы с PDDL
|
||||
* Плагины для редакторов [VSCode](https://github.com/jan-dolejsi/vscode-pddl)  ([video-tutorial](https://www.youtube.com/watch?v=BFlCz49ETcA&list=PL1Q0jeuU6XppflOPFx1qQVuWbXTcjxevU)), [Sublime Text](https://github.com/Pold87/myPDDL) 
|
||||
* [vPlanSim](https://github.com/mastrogiorgis/vPlanSim) - графический интерфейс для визуализации и симуляции PDDL-планирования на базе Python3.7, VTK8.2, PyQt5. 
|
||||
* Парсеры 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) - библиотека общего назначения для разработки, запуска и оценки планировщиков. 
|
||||
* [blockly-pddl](https://github.com/AI-Planning/blockly-pddl) - транслятор PDDL-файлов в язык Blockly и обратно. 
|
||||
|
||||
## 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). 
|
||||
* [pddlgym](https://github.com/tomsilver/pddlgym) - фреймворк, который автоматически создает среду OpenAI-Gym из спецификаций PDDL - [paper](https://arxiv.org/pdf/2002.06432.pdf). 
|
||||
* [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.
|
Loading…
Add table
Add a link
Reference in a new issue