diff --git a/docs/technologies/img/action.png b/docs/technologies/img/action.png new file mode 100644 index 0000000..3540d66 Binary files /dev/null and b/docs/technologies/img/action.png differ diff --git a/docs/technologies/img/action_execution_flow.png b/docs/technologies/img/action_execution_flow.png new file mode 100644 index 0000000..e05aca3 Binary files /dev/null and b/docs/technologies/img/action_execution_flow.png differ diff --git a/docs/technologies/img/action_execution_flow_example.png b/docs/technologies/img/action_execution_flow_example.png new file mode 100644 index 0000000..9eed49e Binary files /dev/null and b/docs/technologies/img/action_execution_flow_example.png differ diff --git a/docs/technologies/img/behaviour_tree_from_pddl.png b/docs/technologies/img/behaviour_tree_from_pddl.png new file mode 100644 index 0000000..0c02d4e Binary files /dev/null and b/docs/technologies/img/behaviour_tree_from_pddl.png differ diff --git a/docs/technologies/img/plansys2_architecture.png b/docs/technologies/img/plansys2_architecture.png new file mode 100644 index 0000000..343b873 Binary files /dev/null and b/docs/technologies/img/plansys2_architecture.png differ diff --git a/docs/technologies/plansys2.md b/docs/technologies/plansys2.md new file mode 100644 index 0000000..106d366 --- /dev/null +++ b/docs/technologies/plansys2.md @@ -0,0 +1,88 @@ +--- +id: plansys2 +title: 'PlanSys2' +--- + +PlanSys2 - это система планирования для ROS2 от создателей ROSPlan (система планирования для ROS1). PlanSys2 не ограничивается планированием в рамках одного устройства, а поддерживает распределение задач между _многими взаимодействующими агентами_ в реальном времени. Исполнение планов реализовано на базе _Деревьев поведения_. + +Планы и задачи описываются на Lisp-подобном языке PDDL (Planning Domain Definition Language). Согласно спецификации PDDL содержит следующие базовые сущности планируемой задачи: +* __Объекты__ (Objects) +* __Свойства__ (Predicates) объектов (True/False). +* __Начальное состояние__ (Initial state) +* __Спецификация целей__ (Goal specification): то, что мы хотим, чтобы было правдой +* __Действия/Операторы__ (Actions/Operators): способы изменения состояния мира. + +PlanSys2 поддерживает PDDL версии 2.1, тогда как последняя версия PDDL - 3.1. + +## Архитектура фреймворка + +Архитектура PlanSys2 модульная и каждый отдельный компонент может быть заменён. + +![](img/plansys2_architecture.png) + +Описание компонентов +* __Planner Node__ - основной узел. Содержит алгоритм планирования и использует разные т.н. plan solvers - POPF, TFD. При генерации планов Planner Node обращается к узлам Domain Expert и Problem Expert, содержащими описания соответствующих предметным областям в формате PDDL. +* __Domain Expert__ считывает PDDL-файлы и размещает их во внутренней памяти. Этот компонент содержит общее описание предметной области. +* __Problem Expert__ содержит описание проблемы(задачи), которую нужно решить, включая конкретные экземпляры классов, предикаты, функции и цели, которые валидируются Domain Expert. то есть Problem Expert содержит динамическое знание приложения. Этот узел создаёт описания задач для Planner Node в формате PDDL. +* __Executor Node__ запрашивает у Planner Node план и, если тот существует, то выполняет его. План превращается в _Дерево поведения (Behaviour Tree)_. Для исполнения действий используется протокол аукциона, который выбирает наиболее подходящий узел, реализующий выполняемое действие. +* __Applications__ - приложения роботов, использующие PlanSys2. Содержат узлы, реализующие действия(__Actions__), и модель PDDL, которая их реализует. Любое приложение также включает в себя узел Controller Node, который +обращается к знаниям Problem Expert для консультаций и установления экземпляров, предикатов и целей. Этот контроллер также запрашивает Executor Node для выполнения или отмены планов. +* __Terminal__ - среда исполнения команд для управления и мониторинга PlanSys2. + * Визуализирует структуру сущностей PDDL и информацию Problem Expert. + * Показывает подробности о свойствах и действиях в терминах PDDL. + * Устанавливает и удаляет экземпляры, свойства, функции и цели. + * Визуализирует, исполняет и отслеживает планы. + * Проверяет статус узлов, исполняющих действия. + + +## Пример сборки автомобиля тремя роботами + +Сначала формируется план в PDDL-формате: + +``` +0 (move rb1 assembly_zone body_car_zone) +0 (move rb2 assembly_zone steerwheel_zone) +0 (move rb3 assembly_zone wheels_zone) +5.001 (transport rb1 bc_1 body_car_zone assembly_zone) +5.001 (transport rb2 stwhl_1 steerwheel_zone assembly_zone) +5.001 (transport rb3 whl_1 wheels_zone assembly_zone) +10.002 (assemble rb1 assembly_zone whl_1 bc_1 stwhl_1 car_1) +10.002 (move rb2 assembly_zone body_car_zone) +10.002 (move rb3 assembly_zone steerwheel_zone) +15.003 (move rb1 assembly_zone wheels_zone) +15.003 (transport rb2 bc_2 body_car_zone assembly_zone) +15.003 (transport rb3 stwhl_2 steerwheel_zone assembly_zone) +20.004 (transport rb1 whl_2 wheels_zone assembly_zone) +20.004 (move rb3 assembly_zone body_car_zone) +25.005 (assemble rb2 assembly_zone whl_2 bc_2 stwhl_2 car_2) +25.005 (move rb1 assembly_zone steerwheel_zone) +25.005 (transport rb3 bc_3 body_car_zone assembly_zone) +30.006 (move rb2 assembly_zone wheels_zone) +30.006 (transport rb1 stwhl_3 steerwheel_zone assembly_zone) +35.007 (transport rb2 whl_3 wheels_zone assembly_zone) +40.008 (assemble rb1 assembly_zone whl_3 bc_3 stwhl_3 car_3) +``` +Данный план преобразуется в Дерево поведения, где заданы узлы для параллельного и последовательного выполнения задач: + +![](img/behaviour_tree_from_pddl.png) + +Структура отдельного действия: + +![](img/action.png) + +При определении порядка исполнения плана используется т.н. _Аукцион действий (action auction)_. Когда наступает очередь для выполнения действия (например, из схемы выше), формируется новая запись _ActionPerformerClient_ в таблице _ActionMap_. + +![](img/action_execution_flow.png) + +Протокол работает так: +* Когда ActionPerformerClient запись создана, посылается сообщение-запрос с описанием действия и его параметров +* Ноды, находящиеся в состоянии ожидания и способные выполнить этот запрос, отвечают, подтверждая или отвергая данный запрос +* После подтверждения ноды приступают к исполнению +* Периодически ноды отправляют сообщения с обратной связью о действиях, которые они исполняют. + +Пример: +![](img/action_execution_flow_example.png) + +## Симуляция и полевые испытания + +PlanSys2 был проверен сначала в симуляции, а потом и на реальной системе, состоящей из 3-ёх роботов. Исходные коды проекта опубликованы на [Github](https://github.com/IntelligentRoboticsLabs/plansys2_cooking_experiment). \ No newline at end of file diff --git a/sidebars.js b/sidebars.js index 621b2ac..03ad4c5 100644 --- a/sidebars.js +++ b/sidebars.js @@ -29,7 +29,8 @@ 'technologies/photopolymer', 'technologies/wood', 'technologies/machine-learning-in-robotics', - 'technologies/gripper-tools-research' + 'technologies/gripper-tools-research', + 'technologies/plansys2' ], }, {