12 KiB
id | title |
---|---|
plansys2 | PlanSys2 & PDDL |
PlanSys2 - это система планирования для ROS2 от создателей ROSPlan (система планирования для ROS1). PlanSys2 не ограничивается планированием в рамках одного устройства, а поддерживает распределение задач между многими взаимодействующими агентами в реальном времени. Исполнение планов реализовано на базе Деревьев поведения. Планы и задачи описываются на Lisp-подобном языке PDDL (Planning Domain Definition Language). PlanSys2 поддерживает PDDL версии 2.1, текущая версия PDDL - 3.1.
Архитектура фреймворка
Архитектура PlanSys2 модульная и каждый отдельный компонент может быть заменён.
Описание компонентов
- 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)
Данный план преобразуется в Дерево поведения, где заданы узлы для параллельного и последовательного выполнения задач:
Структура отдельного действия:
При определении порядка исполнения плана используется т.н. Аукцион действий (action auction). Когда наступает очередь для выполнения действия (например, из схемы выше), формируется новая запись ActionPerformerClient в таблице ActionMap.
Протокол работает так:
- Когда ActionPerformerClient запись создана, посылается сообщение-запрос с описанием действия и его параметров
- Ноды, находящиеся в состоянии ожидания и способные выполнить этот запрос, отвечают, подтверждая или отвергая данный запрос
- После подтверждения ноды приступают к исполнению
- Периодически ноды отправляют сообщения с обратной связью о действиях, которые они исполняют.
Симуляция и полевые испытания
PlanSys2 был проверен сначала в симуляции, а потом и на реальной системе, состоящей из 3-ёх роботов. Исходные коды проекта опубликованы на Github.
Planning Domain Definition Language (PDDL)
Согласно спецификации PDDL содержит следующие базовые сущности планируемой задачи:
- Объекты (Objects)
- Свойства (Predicates) объектов (True/False)
- Начальное состояние (Initial state)
- Спецификация целей (Goal specification): то, что мы хотим, чтобы было правдой
- Действия/Операторы (Actions/Operators): способы изменения состояния мира.
Основные классы алгоритмов планирования
Плагины и утилиты для работы с PDDL
- Плагины для редакторов VSCode
(video-tutorial), Sublime Text
- vPlanSim - графический интерфейс для визуализации и симуляции PDDL-планирования на базе Python3.7, VTK8.2, PyQt5.
- Парсеры PDDL - Julia, python, C#, Java, С++
- planutils - библиотека общего назначения для разработки, запуска и оценки планировщиков.
- blockly-pddl - транслятор PDDL-файлов в язык Blockly и обратно.
PDDL-фреймворки
- pddlstream - фреймворк для планирования, состоящий из языка действий и набора алгоритмов для AI-планирования при наличии процедур выборки. PDDLStream расширяет PDDL, вводя потоки и декларативные спецификации процедур выборки. Алгоритмы PDDLStream не зависят от предметной области и решают проблемы PDDLStream только с описанием каждого сэмплера как черного ящика. Мотивом появления PDDLStream был Task and Motion Planning (TAMP) - paper.
- pddlgym - фреймворк, который автоматически создает среду OpenAI-Gym из спецификаций PDDL - paper.
- LAPKT - набор легковесных инструментов для автоматизированного планирования (Lightweight Automated Planning Toolkit). Предлагает независимый от конкретных языков планирования абстрактный интерфейс для расчёта планов. Легко интегрируется с PDDL/STRIPS.
Расширения PDDL
- HDDL - расширения PDDL для поддержки иерархических задач. Использовался для создания планировщика PANDA Planning Framework, где реализован парсер HDDL
- Universal PDDL Parser - Multiagent Extension - расширение universal-pddl-parser, поддерживающие multi-agent расширение PDDL 3.1 для спецификаций Crosby, Jonsson and Rovatsos, 2014 и Kovacs, 2012.