- add block-averaged PLY grid decimation with validity-aware vertex generation
- validate and load ply_stride and wls_filter from cloud_point configuration
- pass matcher tuning through CloudPointClient and apply both settings in CLI exports
- cover stride averaging, sparse blocks, invalid values, and config parsing
- add configurable median and edge-aware WLS filtering to the CPU SGBM matcher
- preserve SGBM rejection holes when WLS smooths valid disparities
- detect and link OpenCV ximgproc when available, with a graceful fallback otherwise
- forward CPU tuning through the matcher factory and cover validation and hole preservation
- Configure StereoSGBM with P1/P2 penalties, 5x5 block, uniqueness ratio,
speckle filter and left-right check; previously it ran unregularised and
produced a heavy tail of low-disparity outliers reprojecting metres away
(SCARED benchmark MAE3D 44 mm -> 0.8 mm, RMSE 289 mm -> 1.4 mm)
- Pass the requested disparity count to the CUDA SGM matcher (rounded to
64/128/256) instead of a hard-coded 16
- Add optional `cloud_point` config section (algorithm, num_disparities,
depth range) consumed by CLI options 4/5; ship config.scared.yml
- write_ply now emits a binary PLY with a grid-triangulated mesh so web
viewers stop fabricating slivers from consecutive vertices
- Add config, matcher and PLY export tests; document in README
crpc_deinit() called TcpServer::join() without stop(), so with any live
TCP client the accept thread never exited and deinit blocked forever on
the caller's thread (froze the Unity main thread in OnDestroy during
e2e). Call server->stop() first, which clears running_ and unblocks
accept, then join.
Documents the TG-<NUMBER> #<state> commit message trailer convention:
state semantics (new, ready, in-progress, ready-for-test, done), rules
for multi-commit epics, and a helper script for amending tags during
interactive rebase.
- Parse port inside try block for proper error reporting instead of unhandled exception
- Make frame_counter atomic to eliminate data race under TcpServer per-client threads
- Validate num_disparities is positive multiple of 16 in StereoMatcherFactory
- Validate stereo pair dimensions match in ScaredDatasetLoader
- Silence nodiscard warnings via std::ignore in tests
TG-3 #ready-for-test
TG-2 #ready-for-test
- Remove unused stdexec dependency
- Fix dangling cv::Mat references and swapped dimensions in image/matrix factories
- Add CameraCalib, StereoCalibrationRPC, ImagePairRPC DTOs with nlohmann serialization
- Implement get-stereo-calibration and get-image-pair RPC handlers with deterministic mock data
- Extend RpcClient with typed getters and params-bearing call overload
- Restructure API.md with full JSON schemas and conventions
- 13 unit and integration tests for serialization
TG-3 #in-progress
TG-7 #ready-for-test
- add crpc_init_with_address for direct ip/port startup without yaml
- add minimal_client.cpp example using TCPConnector to send a ping
- set install_rpath '$ORIGIN' on shared libs so they find bundled deps
- ignore .worktrees/ for git worktree scratch directories
:Release Notes:
removed unnecessary code duplication for TCP socket read in tcp_server
and tcp_connector. Changed several log lines to appear only in debug
build
Detailed:
As base used jsonrpccxx implementation paired with TCP socket
TCP socket updated to handle dynamic sized buffers
TCP communication protocol changed to serialized packet size after
which json string is presented