Files
project/tool/УСТАНОВКА.md
T

7.8 KiB
Raw Blame History

Инструмент реверса RECADA — установка (FreeCAD НЕ нужен)

Инструмент работает на ядре OpenCASCADE через библиотеку OCP — это то же ядро, что внутри FreeCAD, но отдельная библиотека. FreeCAD не требуется ни для чего.

1. Python

Поставьте Python 3.12 с python.org (3.13/3.14 пока без готовых колёс OCP). При установке отметьте «Add python.exe to PATH».

Проверка в PowerShell:

python --version

2. Папка и окружение

mkdir C:\CAD\recada-tool
cd C:\CAD\recada-tool
# положить сюда recada.py
python -m venv .venv
.\.venv\Scripts\Activate.ps1

Если PowerShell ругается на политику:

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

3. Библиотеки (~700 МБ, 5–10 минут)

pip install cadquery-ocp build123d networkx numpy scipy streamlit

4. Запуск браузерного интерфейса

streamlit run recada.py

Откроется http://localhost:8501

Вкладки

Вкладка Что делает
Обмер детали STEP → толщина, гибы (оба угла), отверстия, разгрузки, припуски развёртки, measurements.json
Генерация кода STEP → обмер → подбор неизвестных параметров петлёй → готовый параметрический Python-код + params.json
Приёмка два STEP → % точек в допуске, вердикт
Справка как устроен алгоритм

Командная строка (без браузера)

python recada.py probe  деталь.step     # обмер
python recada.py fit    деталь.step     # подбор параметров + код
python recada.py metro  эталон.step кандидат.step
python recada.py unfold деталь.step

Как достигается «100 % повторение»

По методике из документа (раздел «Критерий 100% копии»):

  1. Обмер даёт скелет: толщина, радиусы, углы, оси, отверстия.
  2. Генератор строит деталь из параметров.
  3. Двусторонняя метрология (эталон→кандидат И кандидат→эталон) считает невязку.
  4. Оптимизатор Powell/CMA подбирает неизвестные параметры до нулевой невязки.
  5. Приёмка: ≥ 99.9 % точек в допуске + Δ объёма < 1 %.

Проверено: на эталонной детали с известными параметрами (40 / 60 / 25 / ширина 80) петля восстановила их точно: RMS 0.00000 мм, 100 % точек, Δ объёма 0.0000 %.

Важные уроки, встроенные в инструмент

  • Односторонняя метрология обманывает. Первый прогон дал RMS 0 и 100 % точек при детали ДЛИННЕЕ эталона на 1.8 мм — точки эталона лежали на кандидате, а лишний металл не был виден. Поэтому невязка двусторонняя.
  • Объём — не критерий. Сдвиг детали на 0.3 мм даёт Δ объёма 0.0000 %.
  • Два угла гиба. Поворот (развёртка цилиндра) и двугранный (180 − поворот). Старый Unfolder V1 показывал 45° и 80.6° там, где истина 135° и 99.39°.

Ограничения

  • Автоподбор работает для деталей с параллельными осями гибов (одна цепочка). Для пространственных (как Defender LRDE-2BR1, 3 направления осей) выдаётся скелет кода с группировкой по осям и TODO — сборка цепочек вручную.
  • Отверстия попадают в код комментариями с координатами; перенос в hole_array() с привязкой к базам (datums) — ручной шаг.
  • Разгрузки распознаются, но генерируются правилом (features.py), а не копируются.

Обновление от 01.09 (важные исправления)

1. Метрология мерила до тела, а не до поверхности. distToShape до солида возвращает 0 для точек ВНУТРИ материала — значит «толстый» кандидат мог пройти приёмку. Теперь замер идёт до оболочки (surface_of). Разница на проверке: сдвиг детали на 0.3 мм давал 74 % точек в допуске, теперь 29.8 %. Изменение толщины 3 → 4 мм тоже ловится (29.8 %), раньше могло проскочить.

2. Дубли отверстий. Центры окружностей склеиваются с допуском 0.05 мм. На Defender было «7 отверстий», стало правильные 6 (одно D20 двоилось).

3. Развёртка в DXF — кнопка на вкладке обмера и команда:

python recada.py dxf деталь.step unfold.dxf

Контур заготовки + линии гиба на слое BEND с подписями «R3 90°».

4. Скелет кода для пространственных деталей содержит упорядоченную цепочку гибов: ось, точка прохождения, угол, пометка разгрузки.

Что НЕ получилось (честный статус)

Автоматическая сборка пространственных деталей (как Defender LRDE-2BR1 — три направления осей гибов) требует расщепления детали на две оболочки. Пробовали три алгоритма:

  • по габаритам граней (торец = узкая полоса) — нашёл 18 из ~120 торцов;
  • по эквидистантным партнёрам (плоскость-плоскость на t, цилиндры с ΔR = t) — 67 граней из 187, граф не развалился надвое;
  • виртуальным щупом (точка − нормаль × t должна лежать на поверхности) — 38 граней, критерий слишком строг на скруглениях и малых гранях.

Причина: топология реальной детали сложнее канонического листа — одной грани с одной стороны соответствует несколько с другой, есть места прямого смыкания. Следующий подход: обход графа от базовой грани с локальным замером толщины и мягким критерием (доля точек, а не все), плюс отдельная обработка мелких скруглений контура. Оценка: 1–2 дня работы.

До этого пространственные детали проходят обмер, развёртку по гибам и метрологию, но код выдаётся скелетом с TODO, а не готовым.