работа над модулем сборки (в процессе)
This commit is contained in:
parent
ee1afe7869
commit
a59b3a4775
5 changed files with 60 additions and 3 deletions
11
freecad_workbench/freecad/robossembler/README.md
Normal file
11
freecad_workbench/freecad/robossembler/README.md
Normal 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. (Если применено упрощение) Добавить исключенные компоненты с помощью соотв. функции.
|
|
@ -8,14 +8,17 @@ import json
|
||||||
def get_adjacency_matrix_from_file(file_path):
|
def get_adjacency_matrix_from_file(file_path):
|
||||||
with open(file_path, 'r') as f:
|
with open(file_path, 'r') as f:
|
||||||
adjacency_matrix = np.array(json.load(f))
|
adjacency_matrix = np.array(json.load(f))
|
||||||
|
#print(adjacency_matrix)
|
||||||
return adjacency_matrix
|
return adjacency_matrix
|
||||||
|
|
||||||
|
|
||||||
def get_asm_settings(asm_settings_path):
|
def get_asm_settings(asm_settings_path):
|
||||||
with open(asm_settings_path), 'r') as f:
|
with open(asm_settings_path), 'r') as f:
|
||||||
asm_settings = np.array(json.load(f))
|
asm_settings = np.array(json.load(f))
|
||||||
|
#print(asm_settings)
|
||||||
return asm_settings
|
return asm_settings
|
||||||
|
|
||||||
def get_parts_with_fasteners(asm_settings):
|
#def get_parts_with_fasteners(asm_settings):
|
||||||
'''
|
'''
|
||||||
"Type": "fastener_set",
|
"Type": "fastener_set",
|
||||||
"Parent": obj.Parent.Label,
|
"Parent": obj.Parent.Label,
|
||||||
|
@ -23,12 +26,12 @@ def get_parts_with_fasteners(asm_settings):
|
||||||
"Fasteners": fasteners '''
|
"Fasteners": fasteners '''
|
||||||
#вероятно, тут нужно создавать список объектов
|
#вероятно, тут нужно создавать список объектов
|
||||||
|
|
||||||
fastener_set = []
|
# fastener_set = []
|
||||||
#чтобы это работало, нужно работать с позициями элементов в дереве
|
#чтобы это работало, нужно работать с позициями элементов в дереве
|
||||||
#возможно, отработает и через лейблы
|
#возможно, отработает и через лейблы
|
||||||
|
|
||||||
|
|
||||||
return part_names, fasteners
|
#return part_names, fasteners
|
||||||
|
|
||||||
def remove_fasteners_from_matrix(adjacency_matrix, part_names, fasteners):
|
def remove_fasteners_from_matrix(adjacency_matrix, part_names, fasteners):
|
||||||
fastener_connections = {}
|
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_matrix.tolist(), 'reduced_adjacency_matrix.json')
|
||||||
save_to_json(reduced_part_names, 'reduced_part_names.json')
|
save_to_json(reduced_part_names, 'reduced_part_names.json')
|
||||||
save_to_json(fastener_connections, 'fastener_connections.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
|
||||||
|
|
5
test_models/ ajacency_matrix.json
Normal file
5
test_models/ ajacency_matrix.json
Normal 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
0
test_models/env.json
Normal file
Loading…
Add table
Add a link
Reference in a new issue