diff --git a/docs/bt_example_with_tasks.md b/docs/bt_example_with_tasks.md new file mode 100644 index 0000000..4c7bf22 --- /dev/null +++ b/docs/bt_example_with_tasks.md @@ -0,0 +1,165 @@ +Для реализации обработки очереди задач в сценарии, описанном вами, можно использовать **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** + +```plaintext +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. **Надежность**: Дерево может обрабатывать ошибки и повторять действия при необходимости. + +--- + +### **Пример кода (псевдокод)** + +```python +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**: Повторение действий до определенного условия. + +Этот подход обеспечивает четкое разделение логики и позволяет легко масштабировать систему. \ No newline at end of file diff --git a/docs/objects.json b/docs/objects.json new file mode 100644 index 0000000..d32b612 --- /dev/null +++ b/docs/objects.json @@ -0,0 +1,38 @@ +[ + { + "obj_id": 1, + "place_name": "bunker_1", + "place_aruco": 21, + "place_pos": "{pose}", + "graver_template": "{file}", + "dimensions": "{X,Y,Z}", + "skills": ["sid", "..."] + }, + { + "obj_id": 2, + "place_name": "bunker_2", + "place_aruco": 22, + "place_pos": "{pose}", + "graver_template": "{file}", + "dimensions": "{X,Y,Z}", + "skills": ["sid", "..."] + }, + { + "obj_id": 3, + "place_name": "bunker_3", + "place_aruco": 23, + "place_pos": "{pose}", + "graver_template": "{file}", + "dimensions": "{X,Y,Z}", + "skills": ["sid", "..."] + }, + { + "obj_id": 4, + "place_name": "bunker_4", + "place_aruco": 24, + "place_pos": "{pose}", + "graver_template": "{file}", + "dimensions": "{X,Y,Z}", + "skills": ["sid", "..."] + } +] \ No newline at end of file diff --git a/docs/tasks.csv b/docs/tasks.csv new file mode 100644 index 0000000..ff85111 --- /dev/null +++ b/docs/tasks.csv @@ -0,0 +1,6 @@ +Object ID,Тип устройства,Наименование,"Q - подача, м³/ч",n - частота оборотов,"H - напор, м",m - масса,P2 - мощность,T - диапазон температур,Дата производства,Заводской номер,Диапазон ta в градусах цельсия,Кол-во насосов,Iоб,Iсум,IP,Кол-во электродвигателей +1,Насос общепромышленный,,50,1450 об/мин,30,200.0 кг,15.0 кВт,-10...+80°C,01-15-23,SN12345,,,,,, +2,Насос взрывозащищённый (Ex),"КММ-ХА 80-50-200б/2/18,5-Е-55Т/BBQV-HC-У3",30 м³/ч,1450 об/мин,25,180.0 кг,10.0 кВт,-20...+60°C,02-10-23,SN12346,-40...+85°C,,,,, +3,Насосная установка,,100 м³/ч,,50,500.0 кг,30.0 кВт,,03-01-23,SN12347,2,,,55,4, +4,Шкаф управления,,,,,,,,04-05-23,SN12348,,,,30.0A,50.0A,IP54,3 +5