122 lines
7.8 KiB
Markdown
122 lines
7.8 KiB
Markdown
# Инструмент реверса RECADA — установка (FreeCAD НЕ нужен)
|
||||
|
|
|
|||
|
|
Инструмент работает на ядре OpenCASCADE через библиотеку OCP — это то же ядро,
|
|||
|
|
что внутри FreeCAD, но отдельная библиотека. **FreeCAD не требуется ни для чего.**
|
|||
|
|
|
|||
|
|
## 1. Python
|
|||
|
|
Поставьте **Python 3.12** с python.org (3.13/3.14 пока без готовых колёс OCP).
|
|||
|
|
При установке отметьте **«Add python.exe to PATH»**.
|
|||
|
|
|
|||
|
|
Проверка в PowerShell:
|
|||
|
|
```powershell
|
|||
|
|
python --version
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 2. Папка и окружение
|
|||
|
|
```powershell
|
|||
|
|
mkdir C:\CAD\recada-tool
|
|||
|
|
cd C:\CAD\recada-tool
|
|||
|
|
# положить сюда recada.py
|
|||
|
|
python -m venv .venv
|
|||
|
|
.\.venv\Scripts\Activate.ps1
|
|||
|
|
```
|
|||
|
|
Если PowerShell ругается на политику:
|
|||
|
|
```powershell
|
|||
|
|
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 3. Библиотеки (~700 МБ, 5–10 минут)
|
|||
|
|
```powershell
|
|||
|
|
pip install cadquery-ocp build123d networkx numpy scipy streamlit
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 4. Запуск браузерного интерфейса
|
|||
|
|
```powershell
|
|||
|
|
streamlit run recada.py
|
|||
|
|
```
|
|||
|
|
Откроется http://localhost:8501
|
|||
|
|
|
|||
|
|
## Вкладки
|
|||
|
|
| Вкладка | Что делает |
|
|||
|
|
|---|---|
|
|||
|
|
| **Обмер детали** | STEP → толщина, гибы (оба угла), отверстия, разгрузки, припуски развёртки, measurements.json |
|
|||
|
|
| **Генерация кода** | STEP → обмер → подбор неизвестных параметров петлёй → готовый параметрический Python-код + params.json |
|
|||
|
|
| **Приёмка** | два STEP → % точек в допуске, вердикт |
|
|||
|
|
| **Справка** | как устроен алгоритм |
|
|||
|
|
|
|||
|
|
## Командная строка (без браузера)
|
|||
|
|
```powershell
|
|||
|
|
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, а не готовым.
|