

# Модуль технологической подготовки

На вход: - step-модель описываемого оборудования. 

1. Описание имеющихся сущностей:
   - Мы можем создать описание действий со станком и его состояниями для связи с окружающим миром нужен некий обобщенный объект
   его свойством будет возможность воздействовать на состояния, но сам он будет любым. Думаю, нужно описать сами рычаги, а не того, кто будет их нажимать.

   - Описать объекты можно созданием зон вокруг них и/или созданием призрака геометрии оборудования (может быть сложно и избыточно).
   - Для этого возможно создать параллелепипед/цилиндр, сопоставимый по габаритам с рассматриваемой зоной. С помощью инструментов верстака Part создается объект, имеющий желаемое название (Станок, рабочая зона, etc). Эта зона с помощью отношений parent привязана к геометрии станка.

2. Описание действий
   - Создается папка actions, в которую сохраняются создаваемые действия
   - Интерфейс создания действий аналогичен интерфейсу задания других сущностей. Через него мы задаем ссылки на существующие действия и элементы и указываем их тип: триггеры, рабочие органы, конечные состояния, начальные состояния. Указываем их статус (выбор "да/нет")
   - Указываем ссылки на привязываемую к этим действиям геометрию. (катушки, статоры, расходники и тд) Для этого их геометрия должна быть импортирована в модель. Ссылка будет указывать на конкретный импортированный файл. Если существует идентификатор детали, можно ссылаться на него.

3. Задание состояний и переменных
   - Переменные задаются средствами параметризации FreeCAD, инструменты для этого можно взять из ASM4, используя функционал переменных (Variables) и панели конфигураций. 
   - Для состояний переменных аналогично создается (в ASM4 уже имеется при создании модели) отдельная директория.
  
4. Результатом описания будет модель, имеющая дерево объектов, в свойствах которых мы имеем всю необходимую информацию. Геометрические характеристики мы сохраняем как json и отправляем в среды, работающие с геометрией и физикой. Действия и геометрия подставляются в шаблон pddl в соответствующие абзацы. 

## Пример описания объекта

Action - "Заправка 3д-принтера пластиком"
   
   - |- Объекты: 
   - - 3d-принтер [printer_id]  /прямоугольная зона по габаритам принтера. Зона привязана к геометрии оборудования
     - Workzone [printer_id] / прямоугольная зона. Указание на объект workzone, который содержит в себе габариты и позиционирование рабочей зоны относительно 3d-принтера.
     - Wirenest [printer_id] /цилиндрическая зона. Указание на объект wirenest (цилиндр), хранящий информацию об ориентации и положении гнезда для катушки с пластиком
     - Filament [filament_id] /катушка с пластиком требуемой модели, формы и габаритов. 
     - Observer [observer_id] / некая сущность(манипулятор, человек, камера), к которой обращается станок, чтобы с ним провели внешние манипуляции
   - |- Длительность действия, с
   

   - |- Стартовые состояния:
     - Пластика достаточно (нет)
     - Наблюдатель свободен (да)
   - |- Во время действия:
     - Наблюдатель[observer_id] свободен (нет)
     - Катушка пластика установлена (нет)
   - |- После окончания:
     - Катушка пластика установлена (да)
     - Наблюдатель [observer_id] свободен (да)
     - Пластика достаточно (да)


--В раздел Variables мы можем (должны ли?) полуавтоматически/автоматически указать подобные состояния, привязанные к значениям да/нет.-- (Указывать стартовые значения по умолчанию?)


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




Пример размеченной модели:

![Разметка](img/qXX7sBMbsvA.jpg)