Repository navigation
RU codex docs document model v10
Документ v10 обновляет независимый граф сборки с v1 до v2, добавляя массив mates. При чтении более ранние документы мигрируют в памяти; экземпляры, источники и преобразования v9, а также оболочка проекта v1 не меняются. Изменения используют существующую Command System с блокировкой и атомарной проверкой ревизии, включая MCP cadyx_execute_command и Agent API POST /api/v1/agent/projects/{id}/commands.
{
"id": "mate:<uuid>",
"name": "Шарнир вала",
"kind": "revolute",
"a_instance_id": "instance:<uuid>",
"b_instance_id": "instance:<uuid>",
"frame_a": {"translation": [0, 0, 0], "rotation": [1, 0, 0, 0]},
"frame_b": {"translation": [0, 0, 0], "rotation": [1, 0, 0, 0]},
"angle_deg": 30,
"offset_mm": 0,
"orientation": [1, 0, 0, 0]
}Сопряжение соединяет два разных экземпляра-соседа с одинаковым parent_id. Системы координат frame_a и frame_b локальны для каждого экземпляра; ось Z сопряжения является осью сочленения. Координаты задаются в мм и градусах; нормализованные кватернионы имеют порядок [w,x,y,z]. Значения по умолчанию: единичные системы координат, нулевые угол/смещение и единичная ориентация. После нормализации все поля сохраняются как обязательные. Исходная B-rep не копируется и булевой операцией с другой деталью не объединяется.
Кинематический смысл и число свободных относительных степеней свободы (DOF):
| Тип | Отношение сопрягаемых систем координат | DOF |
|---|---|---|
fixed |
Системы координат совпадают и по положению, и по ориентации | 0 |
coincident |
Совпадают начала координат; свободную ориентацию задаёт orientation
|
3 |
coaxial |
Совпадают оси Z; осевое смещение и поворот вокруг оси свободны | 2 |
revolute |
Системы совпадают, кроме поворота вокруг Z angle_deg
|
1 |
slider |
Системы совпадают, кроме осевого смещения offset_mm
|
1 |
cylindrical |
Явно задаются осевое смещение и поворот вокруг Z | 2 |
coaxial и cylindrical имеют одинаковые мгновенные геометрические DOF. cylindrical обозначает сочленение с двумя явно управляемыми координатами, coaxial — сопряжение по соосности. Динамика не выводится. Для coincident свободное вращательное положение выбирает только orientation. Неиспользуемые поля движения должны быть равны нулю; для других видов, кроме coincident, ориентация должна быть единичной.
Точное жёсткое соотношение для каждого сопряжения:
world(A) * frame_a * motion = world(B) * frame_b
motion — поворот вокруг Z и/или перенос для заданного вида сопряжения. Преобразования world выражены относительно общей родительской подсборки; при отображении по-прежнему составляются жёсткие преобразования вложенных подсборок.
-
add_assembly_mate: обязательныkind,a_instance_id,b_instance_id; необязательныname,frame_a,frame_b,angle_deg,offset_mm,orientation. После добавления пересчитывает положение связанных экземпляров. -
set_assembly_mate: обязательныmate_idи хотя бы одно изменяемое поле из необязательных параметров выше. Решает систему, закрепляя экземпляр A. -
remove_assembly_mate: обязателенmate_id; последние положения экземпляров сохраняются. -
solve_assembly_mates: необязателенanchor_instance_id; повторно рассчитывает все связанные положения и возвращает диагностику сочленений и компонент. -
transform_assembly_instance: если экземпляр участвует в сопряжении, он становится опорным, связанная компонента перемещается согласованно. -
remove_assembly_instance: завершается ошибкой, пока на экземпляр ссылаются сопряжения.
Стандартная read-only инспекция проекта включает assembly_kinematics, рассчитанную по той же сохранённой ревизии документа. Поля: instance_poses, anchor_instance_ids, component_count, global_dof, internal_dof, redundant_mate_ids, status и допуски переноса/поворота.
Каждая несвязанная компонента имеет шесть глобальных степеней свободы, если она не закреплена. internal_dof — сумма свобод сочленений остовного дерева. Поэтому fully_mated означает ноль относительных свобод, а не закрепление в мировых координатах. underconstrained означает, что остаются относительные движения либо несколько независимых компонент могут перемещаться отдельно. overconstrained обозначает согласованные избыточные связи по циклу. Отчёт DOF считает свободы в дереве и не доказывает ранг якобиана для произвольного замкнутого механизма.
Решатель обходит рёбра сопряжений детерминированно, по ID, закрепляет запрошенный экземпляр либо стабильный корень каждой несвязанной компоненты и проверяет замыкание остальных рёбер. Циклический граф отклоняется с указанием конфликтующих ID сопряжений/экземпляров, если сохранённые преобразования расходятся более чем на 1e-6 мм и 1e-6 радиан. Отклонённая команда не сохраняет промежуточные положения: Core использует изолированную транзакцию. Инспекция сохранённых несогласованных сопряжений тоже завершается ошибкой, а не возвращает правдоподобное на вид положение. Перестроение общей исходной детали не сдвигает системы координат сопряжений и не пересчитывает её дорогую исходную геометрию.
Ограничения: одновременное нелинейное решение замкнутого механизма не выполняется. «Переопределённость» означает избыточность в выбранной модели жёстких связей, а не полный кинематический анализ на основе ранга. Не поддерживаются автоматическое определение контакта B-rep, привязка сопряжения к грани элемента, сопряжения экземпляров с разными родителями, анализ движения по траектории, динамическая симуляция, глобальное закрепление в мире, перевод единиц, доказательство столкновений/зазора и редактирование в браузере человеком. Для исходного добавления в репозитории есть регрессионное покрытие уровня исходников; локальный запуск намеренно пропускался, совместимость нативной среды/CI на целевой платформе тогда не была подтверждена.
Последующие изменения: документ v11 добавил материалы деталей. Отдельные проверки массы/инерции и помех в дискретных положениях доступны с привязкой к ревизии, только для чтения. Сам решатель сопряжений по-прежнему не проверяет непрерывную траекторию контакта или столкновений.