📊
ros by example vol 2 indigo
  • Титульная страница
  • 3.9 Деревья поведения
  • 3.9.1 Деревья поведения в сравнении с иерархическими машинами состояния
  • 3.9.2 Основные свойства деревьев поведения
  • 3.9.3 Построение дерева поведения
  • 3.9.4 Селекторы и последовательности
  • 3.9.5 Настройка поведения с помощью декораторов (мета - поведения)
  • 3.10 Программирование с использованием деревьев поведения и ROS
  • 3.10.1 Установка библиотеки pi_trees
  • 3.10.2 Основные компоненты библиотеки pi_trees
  • 3.10.3 Классы дерева поведения, специфичные для ROS
  • 3.10.4 Пример патрульного бота с использованием деревьев поведения
  • 3.10.5 Робот для очистки дома с использованием деревьев поведения.
  • 3.10.6 Параллельные задачи
  • 3.10.7 Добавление и удаление задач
  • Термины
Powered by GitBook
On this page

3.9.3 Построение дерева поведения

Previous3.9.2 Основные свойства деревьев поведенияNext3.9.4 Селекторы и последовательности

Last updated 5 years ago

Was this helpful?

CtrlK

Was this helpful?

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

Для примера патрульного бота корневой узел будет иметь два составных дочерних поведения: «СТОЯТЬ СПОКОЙНО» и «ПАТРУЛИРОВАТЬ». Используя маркированный список, мы можем представить наше дерево так:

  • ПОВЕДЕНИЕ (корневой)

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

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

Метка ПОВЕДЕНИЕ использована для корневого узла.

Обратите внимание, что приоритет дочернего поведения определяется его порядком в списке, так как мы всегда будем проходить через дочерние узлы в порядке списка. Таким образом, в этом случае поведение «СТОЯТЬ СПОКОЙНО» имеет более высокий приоритет, чем поведение «ПАТРУЛИРОВАТЬ». В конце концов, если мы позволим батарее разрядиться, робот не сможет продолжать свое патрулирование.

Далее, давайте конкретизируем эти два высокоуровневых поведения. Задача «СТОЯТЬ СПОКОЙНО» будет состоять из двух дочерних задач: «ПРОВЕРЯТЬ БАТАРЕЮ» и «ЗАРЯЖАТЬСЯ». Это также может включать проверку сервоприводов на перегрев или наблюдение за чрезмерным током приводных двигателей (возможно, робот застрял на чем-то). Задача «ПАТРУЛИРОВАТЬ» будет перемещать по четырем углам квадрата с помощью четырех дочерних задач. Итак, дерево поведения теперь выглядит следующим образом:

  • ПОВЕДЕНИЕ

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

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

  • ЗАРЯЖАТЬСЯ

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

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

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

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

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

Еще раз, порядок списков очень важен. Например, мы хотим проверить батарею, прежде чем решим ее зарядить, и мы хотим патрулировать углы квадрата в определенном порядке.

Наконец, задача «ЗАРЯЖАТЬСЯ» состоит из двух дочерних моделей поведения: навигации к док-станции и подзарядки робота. Итак, наше финальное дерево поведения выглядит следующим образом:

  • ПОВЕДЕНИЕ;

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

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

  • ЗАРЯЖАТЬСЯ;

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

  • ЗАРЯДИТЬСЯ;

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

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

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

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

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

При наличии нашей базовой древовидной структуры все, что нам остается - описать отношения между слоями в дереве, то есть между иерархическими задачами разного уровня. Давайте перейдем к этому дальше.