cnc-graver-assist/docs/bt_example_with_tasks.md

8.6 KiB
Raw Blame History

Для реализации обработки очереди задач в сценарии, описанном вами, можно использовать Behavior Tree (BT) — дерево поведения. Это мощный инструмент для управления сложными последовательностями действий, особенно в робототехнике и автоматизированных системах. Давайте разберем, как это можно сделать.


Основные компоненты Behavior Tree

  1. Action Node:

    • Выполняет конкретное действие.
    • Например: "Добавить задачу в очередь", "Выполнить гравировку".
  2. Control Node:

    • Управляет выполнением дочерних узлов.
    • Примеры:
      • Sequence: Выполняет дочерние узлы по порядку. Если один узел завершается неудачно, вся последовательность останавливается.
      • Selector: Пытается выполнить дочерние узлы по порядку. Если один узел завершается успешно, остальные игнорируются.
      • Parallel: Выполняет несколько узлов одновременно.
  3. Condition Node:

    • Проверяет условие (например: "Есть ли задачи в очереди?").
    • Возвращает успех или неудачу в зависимости от результата проверки.
  4. Decorator Node:

    • Модифицирует поведение дочернего узла.
    • Например: "Повторять действие, пока условие истинно".

Алгоритм работы системы

  1. Оператор вводит данные в веб-интерфейс, создавая спецификацию задачи.
  2. Спецификация добавляется в очередь задач.
  3. Управляющая программа РТК (роботизированный технологический комплекс) обрабатывает задачи из очереди.
  4. Для каждой задачи выполняется алгоритм гравировки:
    • Подготовка оборудования.
    • Гравировка шильдика.
    • Проверка качества выполнения.

Реализация в Behavior Tree

1. Основная структура дерева

Мы можем разделить процесс на две основные части:

  • Обработка очереди задач.
  • Выполнение гравировки.

2. Control Nodes

  • Selector: Используется для выбора между "обработкой очереди" и "выполнением гравировки".
  • Sequence: Используется для выполнения последовательных шагов внутри каждой задачи.
  • Parallel: Может быть использован, если нужно одновременно мониторить состояние очереди и выполнять текущую задачу.

3. Action Nodes

  • Добавление задачи в очередь: Получает данные из веб-интерфейса и добавляет их в очередь.
  • Проверка очереди: Проверяет, есть ли задачи в очереди.
  • Подготовка оборудования: Настройка оборудования для гравировки.
  • Гравировка: Выполнение гравировки на основе данных задачи.
  • Проверка качества: Проверка результатов гравировки.

4. Condition Nodes

  • Есть ли задачи в очереди?: Возвращает true, если очередь не пуста.
  • Задача выполнена успешно?: Проверяет, завершилась ли гравировка без ошибок.

5. Decorator Nodes

  • Repeat Until Fail: Повторяет проверку очереди, пока она не станет пустой.
  • Retry: Повторяет выполнение гравировки в случае ошибки.

Пример Behavior Tree

Root
│
├── Selector (Выбор между обработкой очереди и выполнением гравировки)
│   ├── Sequence (Обработка очереди задач)
│   │   ├── Condition: Есть ли задачи в очереди?
│   │   └── Action: Добавить задачу в очередь
│   │
│   └── Sequence (Выполнение гравировки)
│       ├── Action: Подготовка оборудования
│       ├── Action: Гравировка
│       ├── Condition: Задача выполнена успешно?
│       └── Action: Проверка качества
│
└── Decorator: Repeat Until Fail (Повторять, пока очередь не пуста)

Пошаговое объяснение работы дерева

  1. Selector:

    • Проверяет, есть ли задачи в очереди.
    • Если очередь пуста, ничего не делает.
    • Если очередь не пуста, переходит к выполнению гравировки.
  2. Sequence (Обработка очереди задач):

    • Убедиться, что задачи есть в очереди.
    • Добавить новую задачу в очередь (если оператор ввел данные).
  3. Sequence (Выполнение гравировки):

    • Подготовить оборудование.
    • Выполнить гравировку.
    • Проверить качество выполнения.
  4. Decorator: Repeat Until Fail:

    • Повторяет весь процесс, пока очередь задач не станет пустой.

Преимущества такого подхода

  1. Модульность: Каждый узел отвечает за конкретную задачу, что упрощает отладку и расширение.
  2. Гибкость: Можно легко добавить новые условия или действия.
  3. Надежность: Дерево может обрабатывать ошибки и повторять действия при необходимости.

Пример кода (псевдокод)

class BehaviorTree:
    def __init__(self):
        self.queue = []

    def check_queue(self):
        return len(self.queue) > 0

    def add_task_to_queue(self, task):
        self.queue.append(task)

    def prepare_equipment(self):
        print("Equipment prepared.")

    def engrave(self, task):
        print(f"Engraving task: {task}")

    def check_quality(self):
        print("Quality check passed.")

    def run(self):
        while True:
            if not self.check_queue():
                print("Queue is empty. Waiting for tasks...")
                break

            task = self.queue.pop(0)
            self.prepare_equipment()
            self.engrave(task)
            self.check_quality()

# Пример использования
bt = BehaviorTree()
bt.add_task_to_queue("Task 1")
bt.add_task_to_queue("Task 2")
bt.run()

Итог

Для реализации обработки очереди задач в вашем сценарии можно использовать следующие узлы:

  • Control Nodes: Selector, Sequence, Parallel.
  • Action Nodes: Добавление задачи, подготовка оборудования, гравировка, проверка качества.
  • Condition Nodes: Проверка наличия задач в очереди, проверка успешности выполнения.
  • Decorator Nodes: Повторение действий до определенного условия.

Этот подход обеспечивает четкое разделение логики и позволяет легко масштабировать систему.