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

122 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Инструмент реверса 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, а не готовым.