работа над модулем сборки (в процессе)

This commit is contained in:
MarkVoltov 2024-11-25 03:16:36 +03:00
parent ee1afe7869
commit a59b3a4775
5 changed files with 60 additions and 3 deletions

View file

@ -0,0 +1,11 @@
Общее руководство работы с планировщиком сборки.
1. Открыть сборку. С помощью команд верстака Robossembler, используя команды "Create Assembly Parameters", "Create fastener set", "Create assembly sequence", произвести разметку элементов сборки. Произвести экспорт настроек с помощью функции
export assembly settings. На выходе получим файл assembly_settings.json
2. Запустить geometric_feasibility_predicate/main.py, указав в env.json значения cadFilePath (путь к сборке) и outPath (путь вывода). Рекомендуется хранить все файлы в одном месте с проектом На выходе получается файл adjacency_matrix.json
3. ( опционально) Запустить файл solve_optimizer , получить упрощенную матрицу смежности в виде reduced_adjacency_matrix.json
4. Произвести расчет последовательности доступным способом, напр. через get_sequences.json или с помощью asp.
5. (Если применено упрощение) Добавить исключенные компоненты с помощью соотв. функции.

View file

@ -8,14 +8,17 @@ import json
def get_adjacency_matrix_from_file(file_path):
with open(file_path, 'r') as f:
adjacency_matrix = np.array(json.load(f))
#print(adjacency_matrix)
return adjacency_matrix
def get_asm_settings(asm_settings_path):
with open(asm_settings_path), 'r') as f:
asm_settings = np.array(json.load(f))
#print(asm_settings)
return asm_settings
def get_parts_with_fasteners(asm_settings):
#def get_parts_with_fasteners(asm_settings):
'''
"Type": "fastener_set",
"Parent": obj.Parent.Label,
@ -23,12 +26,12 @@ def get_parts_with_fasteners(asm_settings):
"Fasteners": fasteners '''
#вероятно, тут нужно создавать список объектов
fastener_set = []
# fastener_set = []
#чтобы это работало, нужно работать с позициями элементов в дереве
#возможно, отработает и через лейблы
return part_names, fasteners
#return part_names, fasteners
def remove_fasteners_from_matrix(adjacency_matrix, part_names, fasteners):
fastener_connections = {}
@ -69,3 +72,41 @@ reduced_matrix, reduced_part_names, fastener_connections = remove_fasteners_from
save_to_json(reduced_matrix.tolist(), 'reduced_adjacency_matrix.json')
save_to_json(reduced_part_names, 'reduced_part_names.json')
save_to_json(fastener_connections, 'fastener_connections.json')
import json
with open('adjacency_matrix.json') as f:
adjacency_matrix = json.load(f)
with open('assembly_settings.json') as f:
assembly_settings = json.load(f)
fasteners_to_exclude = set()
for setting in assembly_settings:
if setting.get('Type') == 'fastener_set':
fasteners_to_exclude.update(setting.get('Fasteners'))
#for fastener in fasteners_to_exclude:
# del adjacency_matrix[fastener]
#здесь должен запуститься файл генерации последовательности сборки
#на вход поступает упрощенная матрица смежности
with open('assembly_sequence.json') as f:
assembly_sequence = json.load(f)
#TODO: сделать в виде функции, вызываемой отдельно
#Добавляем крепежи в посл. сборки
for setting in assembly_settings:
if setting.get('Type') == 'fastener_set':
parent = setting.get('Parent')
child = setting.get('Child')
fasteners = set(setting.get('Fasteners'))
for step in assembly_sequence:
if step.get('Parent') == parent and step.get('Child') == child:
step['Fasteners'] = list(fasteners.intersection(step.get('Fasteners', [])))
break

View file

@ -0,0 +1,5 @@
{
"body_down":["body_up","bolt1", "bolt2", "bolt3", "bolt4","sol_gear","planet_gear"],
"body_up":["body_down","bolt1", "bolt2", "bolt3", "bolt4","sol_gear"],
"body_down":["body_up","bolt1", "bolt2", "bolt3", "bolt4","sol_gear","planet_gear"]
}

Binary file not shown.

0
test_models/env.json Normal file
View file