--- id: ASP-overview title: 'Планирование последовательности сборки' --- ## Введение Сборка - узкое место в жизненном цикле многих продуктов. Предполагаемое время сборки занимает 20-50 % от общего времени производства, в то время как стоимость сборки составляет около 20-30 % от общей стоимости (Xu et al., 2012). Планирование последовательности сборки имеет решающее значение для обеспечения успеха продукта, особенно для сложных продуктов, таких как автомобили, корабли и аэрокосмическая продукция (Hou et al., 2018). В данной статье рассмотрены актуальные исследования по автоматическому планированию последовательности сборки (Assembly Sequence Planning, ASP). ## Основные методы На базе статьи __A review on assembly sequence generation and its automation__ - Bahubalendruni, Biswal (India) 2016 Множества и подмножества сборочных последовательностей: * __Liaison-based__ - множества, построенные на графах(матрицах смежности для них) отношений(соединений) деталей. В вершинах графа - детали, в рёбрах - наличие соединения и иногда дополнительная информация о соединении (тип соединения и т.д.) ![](img/liaison-graph.jpg) * __Feasible__ - геометрически доступные множества. Основаны на т.н. `feasible predicate` - условии, при котором выбранная сборка доступна в геометрическом или механическом смысле. Геометрически доступной считается подсборка, все детали которой могут быть соединены без коллизий. К каждой из подсборок liaison-множества применяется некая функция, которая отвечает в формате Да/Нет на вопрос о возможности той или иной сборки. Таким образом из liasion-матрицы формируется interference-матрица, которая отражает наличие или отсутствие коллизий между отдельными деталями. * __Stable__ - множества устойчивых (не разваливающихся) подсборок. Могут разделяться на нестабильные, частично стабильные, полностью стабильные. * __Optimal__ - оптимальные по отношению к целевой функции (стоимость, энергоёмкость, смены инструмента, операции). Часто инженеру нужно выбрать между несколькими допустимыми и стабильными последовательностями сборки, поэтому применяется алгоритм оптимизации. Сущестует множество типов алгоритмов оптимизации (ACO: Ant Colony Optimization, GA: Genetic Algorithm, PSO: Particle Swarm Optimization, MA: Memetic Algorithm, IA: Immune Algorithm, NN: Neural Networks, GSA: Genetic Simulated Annealing, FF: Firefly Algorithm, FW: Fireworks, MILP: Mixed Integer Linear Programming, MIP: Mixed Integer Programming), которые применяются в сочетании с различными входными данными (геометрические отношения, ограничения приоритета, информация о приспособлениях и подсборках) и целевыми функциями. Полная таблица исследований приведена в таблице 3 из работы (_Bahubalendruni, Biswal '2016_). Там же приводится статистика самых популярных: * входных данных - `Liaison` и `Geometrical feasibility` матрицы * алгоритмов оптимизации - Генетические алгоритмы в 40% исследований * целевых функций - минимизация стоимости и количества изменений направлений сборки. Отношения вложенности между указанными выше сборочными последовательностями ![](img/assembly-sequence-sets.jpg) Современные CAD-системы позволяют получать следующие данные: * liaison data - связи между деталями * assembly cutsets - наборы разрезов * questions to generate precedence relations - вопросы для создания отношений приоритета * interference free matrix/interference data - данные о помехах * assembly mating conditions - условия сопряжения сборки * feasible assembly sequence(s) - геометрически допустимые сборочные последовательности * optimal/near optimal feasible assembly sequence - оптимальные и близкие к оптимальным последовательности Большинство методов планирования последовательностей сборки (Assembly Sequence Planning, ASP) основаны на графах. На иллюстрации ниже показаны пример сборки (a) и соответствующие ему `blocking-граф` (b), `AND/OR-граф` или [and-or tree](https://en.wikipedia.org/wiki/And%E2%80%93or_tree) (c), `liaison-граф` (d). Граф Liaison часто применяется как входной в ASP-систем. ![](img/assembly_graph_types.jpg) ## Обзор актуальных исследований ### 3D Model-Based Assembly Sequence Optimization using Insertionable Properties of Parts - 2020 Kento Tariki, Takuya Kiyokawa, Gustavo Alfonso Garcia Ricardez, Jun Takamatsu, Tsukasa Ogasawara (Japan) http://dx.doi.org/10.1109/SII46433.2020.9026210 __Исходные данные__: 3D-модель в формате STEP __Алгоритм__: генетический алгоритм с двумя типами функций оценки (Fitness Functions). Также применяется Insertion Matrix (матрица вставки, IM), где подразделяются детали по признаку папа/мама. Insertion Matrix вычисляется из CAD-модели с помощью функций библиотеки `PythonOCC`: * Функция `BRepAdaptor_Surface` извлекает информацию о поверхности детали и показывает её тип (плоскость, цилиндр, конус) * Деталь классифицируется по признаку мама/папа * В координате центра отверстия детали типа "мама" создаётся маленький куб и если какая-либо деталь имеет с ней общую точку (это вычисляется с помощью функции `BRepAlgoAPI_Common`), то она помещается в IM * Функция `brepgprop_VolumeProperties` используется, чтобы определить, что общий объём больше нуля. И если она возвращает True, то деталь помещается в IM. На рисунке ниже показан пример создания IM. Красная деталь типа "мама", зелёный куб находится в координате центра отверстия детали типа "мама", жёлтая деталь типа "папа". ![](img/insertion_matrix_gen.jpg) __Полевые испытания__: использовались робот COBOTTA и ROS/MoveIt. Для примера использовалась в том числе модель из `World Robot Summit Assembly Challenge 2018`. ### Assembly Sequence Planning for Motion Planning - 2016 Weiwei Wan, Kensuke Harada, Kazuyuki Nagata https://arxiv.org/pdf/1609.03108.pdf __Исходные данные__: mesh-модель манипулятора, mesh-модели деталей, относительные позиции между деталями в сборке, целевая позиция сборки __Алгоритм__: формируются все возможные подсборки и для каждой вычисляются: * стабильность (stability) * хватабельность (graspability) - число доступных способов захвата данным приспособлением * собираемость (assemblability). ![](img/wan_ASP_algorithm.jpg) Алгоритм позволяет найти некоторые оптимальные порядки и направления сборки, которые 1. Стабильны после окончания каждого этапа сборки 2. Имеют множество доступных захватов и гибки к кинематическим ограничениям роботов 3. Устойчивы к ошибкам сборки. __Результат__: * Порядок сборки (Assembly order): Какие детали собирать первыми * Направление сборки (Assembly direction): Как накладывать или вставлять детали * Доступные способы захвата (Accessible grasps): Как захватывать объекты в ходе сборки __Полевые испытания__: собрали промышленный переключатель (switch). ### Optimal assembly sequence based on design for assembly (DFA) rules - 2020 Ine Melckenbeeckb, Sofie Burggraevea, Bart Van Donincka, Jeroen Vancraena, Albert Rosicha (EU) __Исходные данные__: STEP-модель __Алгоритм__: совместно применяются `AND/OR` и `liaison` графы в сочетании с практиками `Design for Assembly` (DFA). Для измерения DFA используется метод оценки локального (_local motion_) и глобального (_global or extended motion_) движения. Локальное движение рассматривает зону физического контакта детали; глобальное движение оценивает также пересечения с деталями, не находящимися в зоне контакта, поэтому более трудоёмкое для вычислений. В алгоритме предложен метод двух-этапной оценки возможностей сборки - сначала оценивается локальное движение, а затем для направлений, в которых гарантируется локальное движение, оценивается глобальное движение. 1. Оценка локальных движений (`S-local` DFA score, %) производится с помощью `функций геометрического ядра CAD`, исходя из геометрических свойств деталей. 2. Оценка глобальных движений (`S-global` DFA score, %) производится с помощью рендеринга в `игровом движке Unity 3D`. Алгоритм получает на входе перечень возможных направлений, выявленных в ходе оценки локального движения. Из локальной и глобальной возможности сборки выводится оценка для использования при генерации последовательности сборки. Результатом проверки локального движения является `пространство допустимых направлений`. Объем этого пространства представляет собой количество возможных направлений сборки и, следовательно, является показателем простоты сборки. Чтобы использовать это значение в качестве оценки, нормализованный объем подается в непрерывную функцию оценки так, что невозможные сборки приравниваются к 0%, а неограниченная ничем сборка - 100%. С другой стороны, глобальная возможность сборки равна либо 0, либо 1, в которой 1 является сборкой, а 0 - нет. Общее значение оценки `C-alg` вычисляется как `1/(S-local * S-global)`. Порядок определения последовательности сборки: 1. STEP-файл 2. Программно генерируется `liaison`-граф, как пространство вершин разных деталей, расстояние между которыми ниже определённого значения (tolerance value) 3. Частичный AND/OR граф 4. Оценка DFA (возможен возврат к п.3). Для уменьшения количество обращений к DFA, разработаны три специальных ad-hoc правила: * Локальная оценка возможности сборки на определённом шаге не меняется, если добавляемая к подсборке деталь или другая подсборка не соприкасаются с ней. К примеру, мы собрали две подсборки вместе, определив для них local score. Далее, если мы добавим к одной из подсборок деталь, которая не имеет соприкосновений с другой подсборкой, то на данном local score это не отразится; * Невыполнимый этап сборки никогда не станет выполнимым путем добавления деталей в любой из узлов сборки * (инверсия предыдущего правила) Выполнимый этап сборки никогда не станет невыполнимым при удалении деталей из любого узла сборки. 5. Последовательность сборки Пункты 3-4 формируют т.н. алгоритм поиска оптимальной последовательности. __Полевые испытания__: не проводились ### A System Architecture for Constraint-Based Robotic Assembly with CAD Information - 2018 Mathias Hauan Arbo, Yudha Pane†, Erwin Aertbeliën† and Wilm Decré (EU) http://dx.doi.org/10.1109/COASE.2018.8560450 __Исходные данные__: CAD-модель с пользовательскими метаданными, в работе не было задачи автоматизации генерации последовательности сборки __Архитектура__: ![](img/constrained_based_sequence_planner_architecture.jpg) * `Application Layer` - для `FreeCAD` создана `Task Library`, где имплементированы классы `Положить`, `Вставить`, `Вкрутить`, которые сопоставляются рёбрам `liaison-графа` * `Process Layer` - `Tasks` (задачи) сопоставляются с `Skills` (навыками). Навыки делятся на `Composed` и `Atomic`. В итоге каждой детали сопоставляются тип задачи из Application Layer, навык (например, `grasp_and_insert`), набор атомарных навыков (move_cartesian gripper, guarded_cartesian, cylinder_insert) и инструмент (gripper). В контексте работы Task - это задача, а Skill - это возможность производства. * `Control Layer` - реализован на базе [eTaSL](https://etasl.pages.gitlab.kuleuven.be/intro.html) - язык спецификации задач для реактивного управления роботами + [Orocos](https://docs.orocos.org/) - [ROS-совместимый](https://github.com/orocos/rtt_ros2_integration) набор инструментов для управления роботами. __Полевые испытания__: Собран компрессор с помощью 7-DOF KUKA LBR iiwa 14, pneumatic SCHUNK RH940 parallel gripper. ### Flexible Assembly through Integrated Assembly Sequence Planning and Grasp Planning - 2015 Ulrike Thomas, Theodoros Stouraitis, Maximo A. Roa (Germany) __Исходные данные__: CAD-модель + база данных захватов для каждой детали в сборке __Алгоритм__: ![](img/integrated_ASP_and_Grasp_Planning.jpg) Сначала создаются карты для тестирования геометрической осуществимости (maps for the geometric feasibility tests) или `disassembly maps` по методу `Stereographical Projections of C-Space Obstacles` (стереографических проекций пространственных ограничений) автора U.Thomas, изложенному в [статье](https://ieeexplore.ieee.org/document/1217194) и уже применённой в исследовании 2010 года. Далее генерируются три типа графов: connectivity(liaison), force, hierarchy, из которых выводится AND/OR-граф. Далее `Grasp Planner` использует заранее подготовленную __базу данных захватов для каждой отдельной детали__ и фильтрует те вершины и рёбра `AND/OR-графа`, которые отсутствуют в доступных позициях захвата. __Полевые испытания__: не проводились. Для симуляций применялся фреймворк `OpenRave` и конструкции из профилей. ### A novel Geometric feasibility method to perform assembly sequence planning through oblique orientations - 2021 Gulivindala Anil Kumar, M.V.A.Raju Bahubalendruni, V.S.S. Vara Prasad, Dara Ashok, K. Sankaranarayanasamy (India) __Исходные данные__: CAD-модель __Алгоритм__: акцент делается на методе получения матрицы геометрической доступности после liaison и stability матриц. Алгоритм называется `NASPM`: ![](img/geometric-feasibility-method-2012.jpg) __Полевые испытания__: нет данных ### ASPW-DRL: assembly sequence planning for workpieces via a deep reinforcement learning approach - 2018 Minghui Zhao, Xian Guo, Xuebo Zhang and Yongchun Fang (China) По мнению авторов часто используемые классы алгоритмов имеют следующие недостатки: * Graph search - AND/OR - комбинаторный взрыв по мере увеличения количества деталей, специфичны к задаче и плохо обобщаются * Knowledge-based - Domain/Problem Ontology - чувствительны к качеству базы знаний, плохо обобщаются * Heuristic intelligent methods - Simulated annealing, Genetic algorithms, Neural nets - плохо обобщаются __Исходные данные__: Подготовленная сцена в Gazebo __Алгоритм__: ![](img/ASPW-DRL.jpg) __Полевые испытания__: нет данных. Игрушечные модели в Gazebo ### Optimizing assembly sequence planning using precedence graph-based assembly subsets prediction method - 2019 Nan Zhang, Zhenyu Liu and Chan Qiu, Weifei Hu, Jianrong Tan (China) В работе хорошее введение истории решения проблемы со ссылками. __Исходные данные__: CAD-модель + `precedence graph` (граф приоритета), который как-то составляется инженером и задаёт приоритеты в порядке сборки деталей; подробности о precedence-графах изложены в работе Yong Wang, De Tian "[A weighted assembly precedence graph for assembly sequence planning](https://link.springer.com/article/10.1007/s00170-015-7565-5)" __Алгоритм__: [Fireworks](https://en.wikipedia.org/wiki/Fireworks_algorithm) __Полевые испытания__: нет данных. Замер эффективности алгоритма проводился по модели промышленного образца. ## Доступные программные реализации ASP https://github.com/atulmishrachdi/AutomatedAssemblyPlanner