3.9.5 Настройка поведения с помощью декораторов (мета - поведения)

Из предыдущего параграфа мы убедились в том, что селекторов и последовательностей не всегда достаточно, чтобы получить от нашего робота то поведение, которое нам нужно. Существует несколько способов добавить большую гибкость к дереву поведения, включая использование так называемых «декораторов». Мы будем использовать термин «декоратор» или «мета-поведение» довольно свободно для обозначения поведения или функции, единственная роль которых заключается в изменении результата другого поведения или задачи.

Для нашего первого примера рассмотрим мета-поведение «Игнорировать неудачу», которое изменяет свое дочернее поведение(-я), возвращая «УСПЕХ», даже если исходный результат – «НЕУДАЧА». Мета-поведение «Игнорировать неудачу» — это как раз то, что нам нужно, чтобы наша последовательность патрулей работала так, как мы хотим, используя ее для изменения каждой навигационной задачи. Наше дерево поведения теперь выглядит так:

  • ПОВЕДЕНИЕ

  • СТОЯТЬ СПОКОЙНО

  • ПРОВЕРИТЬ БАТАРЕЮ

  • ЗАРЯЖАТЬСЯ

  • НАПРАВИТЬСЯ К ДОК-СТАНЦИИ

  • ЗАРЯДИТЬСЯ

  • ПАТРУЛИРОВАТЬ

  • ИГНОРИРОВАТЬ НЕУДАЧУ

  • ТОЧКА МАРШРУТА_0

  • ИГНОРИРОВАТЬ НЕУДАЧУ

  • ТОЧКА МАРШРУТА_1

  • ИГНОРИРОВАТЬ НЕУДАЧУ

  • ТОЧКА МАРШРУТА_2

  • ИГНОРИРОВАТЬ НЕУДАЧУ

  • ТОЧКА МАРШРУТА_3

Или в форме графа:

Иной способ перебора последовательности действий при игнорировании сбоев — это просто определить новый тип последовательности со встроенным свойством игнорировать сбой. Библиотека «pi_trees» включает в себя Итератор составного поведения (Iterator), которое делает именно это.

Другим часто используемым мета-поведением является Декоратор цикла (Loop decorator), который принимает один параметр, указывающий количество итераций, и выполняет свое дочернее поведение(-я) заданное количество раз перед завершением. Мы могли бы использовать декоратор цикла вокруг нашего поведения «ПАТРУЛИРОВАТЬ», чтобы ограничить количество патрулей до определенного числа.

Ничто не мешает Вам создавать любое количество мета-поведений для использования в Вашем дереве поведения. Некоторые примеры включают в себя:

  • Ограничение количества запускаемых действий;

  • Ограничение частоты, с которой поведение может быть запущено с помощью таймера;

  • Временная деактивация поведения;

  • Селектор, который пробует дочерние задачи в случайном порядке.

Last updated