add conf templates and full bt example

This commit is contained in:
Игорь Брылёв 2025-03-18 18:28:06 +03:00
parent 7c5ba539c5
commit 2a880bb559
3 changed files with 209 additions and 0 deletions

View file

@ -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**: Повторение действий до определенного условия.
Этот подход обеспечивает четкое разделение логики и позволяет легко масштабировать систему.

38
docs/objects.json Normal file
View file

@ -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", "..."]
}
]

6
docs/tasks.csv Normal file
View file

@ -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
Can't render this file because it has a wrong number of fields in line 5.