add conf templates and full bt example
This commit is contained in:
parent
7c5ba539c5
commit
2a880bb559
3 changed files with 209 additions and 0 deletions
165
docs/bt_example_with_tasks.md
Normal file
165
docs/bt_example_with_tasks.md
Normal 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
38
docs/objects.json
Normal 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
6
docs/tasks.csv
Normal 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.
|
Loading…
Add table
Add a link
Reference in a new issue