Skip to content

RU codex docs document model v10

rkfsociety edited this page Oct 21, 2026 · 1 revision

Модель документа CADYX 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 добавил материалы деталей. Отдельные проверки массы/инерции и помех в дискретных положениях доступны с привязкой к ревизии, только для чтения. Сам решатель сопряжений по-прежнему не проверяет непрерывную траекторию контакта или столкновений.

Clone this wiki locally