113 lines
6.5 KiB
Markdown
113 lines
6.5 KiB
Markdown
# DotsToSirface (Qt 5.11)
|
|
|
|
Демонстрационная программа на Qt 5.11 C++, которая:
|
|
- принимает массив 3D-точек `QVector<Point3f>`;
|
|
- выполняет stage-based pipeline (preprocess -> transform -> registration -> reconstruction);
|
|
- визуализирует точки и полученную треугольную поверхность.
|
|
|
|
## Вход/выход API
|
|
|
|
`src/algorithms/reconstruction/surface_reconstruction.h`:
|
|
|
|
- `struct Point3f { float x, y, z; };`
|
|
- `struct Triangle { int i0, i1, i2; };`
|
|
- `QVector<Triangle> buildSurfaceTriangles(const QVector<Point3f>& points);`
|
|
|
|
`Triangle` хранит индексы вершин в исходном массиве `points`.
|
|
|
|
## Как это работает
|
|
|
|
Реализация использует инкрементальный `Convex Hull 3D`:
|
|
- удаление дубликатов точек (epsilon-сравнение);
|
|
- поиск стартового тетраэдра;
|
|
- поочередное добавление точек с пересчетом видимых граней и горизонта;
|
|
- поддержание ориентированных наружу треугольников.
|
|
|
|
## Ограничения
|
|
|
|
Текущая реализация строит **выпуклую оболочку** облака точек.
|
|
Для невыпуклых объектов и детальной реконструкции произвольной поверхности нужны более сложные алгоритмы (например, alpha-shapes, Poisson reconstruction и т.п.).
|
|
|
|
## Архитектурный каркас под robotics pipeline
|
|
|
|
- `core`: контракты (`PointCloudFrame`, `PipelineContext`, `PipelineStats`, stage-интерфейсы, plugin registry).
|
|
- `adapters`: мосты к источникам и внешним транспортам (`FilePointCloudSource`, `Ros2PointCloudSource`, `PointCloud2`/`tf2` adapters).
|
|
- `strategies`: конкретные стадии пайплайна (preprocess, transform, registration, reconstruction).
|
|
- `factories`: сборка `PipelineExecutor` из plugin-id и профиля.
|
|
|
|
## Pipeline Dashboard: UX и анализ цепочки
|
|
|
|
В dashboard реализованы инструменты для пошаговой настройки всей pipeline-цепочки (preprocess + reconstruction):
|
|
|
|
- **Категориальная палитра этапов**: фильтры сгруппированы по логике обработки
|
|
(`Обрезка -> NaN (предочистка) -> Условия/Индексы -> Шум -> Морфология -> Прореживание -> Сглаживание -> Нормали -> Реконструкция`), для каждого фильтра
|
|
доступны краткие подсказки.
|
|
- **Проверка порядка этапов**: при рискованной последовательности (например, когда
|
|
`OutlierRemoval` идет после `VoxelGrid`) показываются предупреждения и рекомендация.
|
|
- **Стартовые пресеты**: доступны шаблоны для типичных источников
|
|
(`LiDAR_scan`, `RGBD_camera`, `Synthetic_clean`) как отправная точка с возможностью
|
|
ручной донастройки.
|
|
- **Метрики между шагами**: показывается вклад каждого preprocess-этапа:
|
|
входные точки, выходные точки, сколько удалено и время шага в миллисекундах.
|
|
- **Единый редактор параметров**: и preprocess-стадии, и реконструкторы поверхности
|
|
настраиваются через одинаковые карточки и один диалог параметров.
|
|
|
|
Пер-шаговые метрики собираются на уровне `core::PipelineExecutor` и возвращаются через
|
|
`PipelineStats::preprocessStepMetrics`, чтобы данные были едиными для GUI и тестов.
|
|
|
|
### Профили выполнения
|
|
|
|
- `desktop_debug`: дефолтный профиль для GUI/отладки.
|
|
- `rpi4_runtime`: профиль для Raspberry Pi 4 (жестче downsampling, лимит точек, reconstruction реже, async-friendly настройки).
|
|
|
|
Выбор профиля:
|
|
- `factories::pipeline::createPipelineExecutorForProfile("desktop_debug")`
|
|
- `factories::pipeline::createPipelineExecutorForProfile("rpi4_runtime")`
|
|
|
|
## Сборка и запуск в WSL
|
|
|
|
Рабочий поток для этого проекта на Windows: собирать и запускать через WSL.
|
|
|
|
```bash
|
|
cd /mnt/d/yakupov/Projects/DotsToSirface/build-wsl
|
|
qmake ../DotsToSirface.pro 'DEFINES+=PCL_ENABLED'
|
|
make -j4
|
|
LIBGL_ALWAYS_SOFTWARE=1 QT_QPA_PLATFORM=xcb ./DotsToSirface
|
|
```
|
|
|
|
Примечания:
|
|
- `DEFINES+=PCL_ENABLED` включает PCL-стадии пайплайна.
|
|
- `LIBGL_ALWAYS_SOFTWARE=1` снижает риски графических артефактов в WSLg.
|
|
- `QT_QPA_PLATFORM=xcb` используется как стабильный backend для Qt в WSL.
|
|
|
|
Перезапуск после правок:
|
|
|
|
```bash
|
|
pkill -f '^./DotsToSirface$' || true
|
|
cd /mnt/d/yakupov/Projects/DotsToSirface/build-wsl
|
|
qmake ../DotsToSirface.pro 'DEFINES+=PCL_ENABLED'
|
|
make -j4
|
|
LIBGL_ALWAYS_SOFTWARE=1 QT_QPA_PLATFORM=xcb ./DotsToSirface
|
|
```
|
|
|
|
## Smoke tests (отдельный runner)
|
|
|
|
Для быстрой проверки пайплайна без GUI добавлен отдельный консольный таргет:
|
|
`DotsToSirfaceTests.pro`.
|
|
|
|
```bash
|
|
qmake DotsToSirfaceTests.pro
|
|
make
|
|
./release/DotsToSirfaceTests.exe
|
|
```
|
|
|
|
При успешном запуске runner печатает `Smoke tests passed.` и завершаетcя с кодом `0`.
|
|
|
|
## Демо
|
|
|
|
При запуске приложение:
|
|
- генерирует тестовое облако точек (приближенная сфера с небольшим шумом);
|
|
- строит триангуляцию;
|
|
- показывает статистику: количество точек, количество треугольников и время построения;
|
|
- отображает сцену в `QOpenGLWidget` (ЛКМ - вращение, колесо - зум).
|