Skip to main content

PlanSys2 & PDDL

Для описания задач (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

Согласно спецификации PDDL Domain содержит следующие базовые сущности планируемой задачи:

Объекты (Objects)

Какие типы/подтипы объекты фигурируют в технологическом процессе. Примеры

  • Движитель (Подтипы - Робот-манипулятор, поворотный стол, конвеер)
  • Приспособление (Подтипы - Захват, Пинцет и т.д.)
  • Пробирка (Подтипы - Большая, маленькая и т.д.)
  • Посадочный материал (Подтипы - Корешок, листок, черенок)
  • Навык робота, программа (Подтипы - Захват, разрез, распознавание)

Условия (Predicates)

Типы условий, при которых начинаются те или иные действия. Это вопросы, подразумевающие ответ Да или Нет.

Примеры:

  • Посадочный материал в пробирке?
  • Робот свободен для задачи?
  • Объект распознан?
  • Посадочный материал поврежён?

Функции (Functions)

Функции похожи на условия - это тоже вопросы. Разница в том, что это вопросы, подразумевающие ответ в виде числа.

Примеры:

  • Какой заряд у аккумуляторной батареи?
  • Какая масса у посадочного материала X?

Действия (actions)

Действия, производящиеся в рамках технологического процесса. Состоят из:

  • Параметров (parameters) - задействованные объекты
  • Длительности (duration) - продолжительность действия
  • Условий (condition) - условия, при которых действие начинается/продолжается/завершается
  • Эффектов (effect) - результаты после начала и завершения

Пример:

  • Действие захват-пробирки
  • Параметры робот, захватное-устройство, пробирка
  • Условия
    • начала: робот-свободен, захватное-устройство-подключено, пробирка-в-наличии
    • продолжения - в-комнате-нет-людей
    • завершения - робот-не-движется, пробирка-в-захвате
  • Эффекты
    • в начале: робот-занят
    • при завершении - робот-свободен, пробирка-захвачена

PDDL Problem

Проблема описывает конкретную задачу с исходными условиями на момент начала задачи. Исходных условий может быть много. Problem обычно генерируется автоматически для подбора оптимальной конфигурации. Планировщик сам генерирует план исполнения в зависимости от описания задачи.

Описание задачи/проблемы выглядит следующим образом

  • Объекты (objects) - наличествующие объекты, обязательно должны соответствовать типам из PDDL Domain
  • Начальное состояние (init) - текущие значения условий на момент начала
  • Спецификация целей (goal) - условия выполнения задания

ROS2 Planning System (PlanSys2)

PlanSys2 - это система планирования для ROS2 от создателей ROSPlan (система планирования для ROS1). PlanSys2 не ограничивается планированием в рамках одного устройства, а поддерживает распределение задач между многими взаимодействующими агентами в реальном времени. Исполнение планов реализовано на базе Деревьев поведения.

Видео-презентация 1, 2

Архитектура фреймворка PlanSys2

Архитектура 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.

Другие полезные ссылки

Основные классы алгоритмов планирования

pddl_planners

Программы для работы с PDDL

  • Плагины для редакторов VSCode vscode-pddl (video-tutorial), Sublime Text myPDDL
  • vPlanSim - графический интерфейс для визуализации и симуляции PDDL-планирования на базе Python3.7, VTK8.2, PyQt5. vPlanSim
  • Парсеры PDDL - Julia, python, C#, Java, С++
  • planutils - библиотека общего назначения для разработки, запуска и оценки планировщиков. planutils
  • blockly-pddl - транслятор PDDL-файлов в язык Blockly и обратно. blockly-pddl

PDDL-фреймворки

  • pddlstream - фреймворк для планирования, состоящий из языка действий и набора алгоритмов для AI-планирования при наличии процедур выборки. PDDLStream расширяет PDDL, вводя потоки и декларативные спецификации процедур выборки. Алгоритмы PDDLStream не зависят от предметной области и решают проблемы PDDLStream только с описанием каждого сэмплера как черного ящика. Мотивом появления PDDLStream был Task and Motion Planning (TAMP) - paper. pddlstream
  • pddlgym - фреймворк, который автоматически создает среду OpenAI-Gym из спецификаций PDDL - paper. pddlgym
  • LAPKT - набор легковесных инструментов для автоматизированного планирования (Lightweight Automated Planning Toolkit). Предлагает независимый от конкретных языков планирования абстрактный интерфейс для расчёта планов. Легко интегрируется с PDDL/STRIPS.
  • Fast Downward - система планирования, поддерживающая PDDL. На конкурсе Classical Planing в 2018 году заняла первое место в двух треках (подробнее).

Расширения PDDL