Trajectory viewer: flyover playback, LiDAR range filter and local-depth coloring - #543
Open
michalpelka wants to merge 8 commits into
Open
michalpelka wants to merge 8 commits into
michalpelka wants to merge 8 commits into
Conversation
View > Flyover moves the camera along the LiDAR trajectory, with a bottom timeline to scrub, a real-time speed control, and an option to keep the selected camera image in sync with the playhead. Trajectory::nearest now returns an optional reference instead of a raw pointer. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Each LIO chunk is now its own GPU part in chunk-local coordinates, placed by its MRP pose at draw time. The vertex shrinks from 28 to 24 bytes: intensity as uint16, per-point LiDAR range as int16 cm, camera id as int32 (-2 marks points the ROI/mask rejected, replacing the separate in-ROI float). The range drives new Min/Max range filters and a Local depth color mode. Co-Authored-By: Claude Opus 5.5 <[email protected]>
The flyover camera now sits on a Hann-weighted average of the trajectory poses within +/- a window of the playhead (default 1 s), which removes the walking sway and hand shake without lag, and optionally drops roll to keep the horizon level. Both are controls in the flyover bar. The averaging (Trajectory::smoothedPose, Trajectory::timeAt) and calib::levelHorizon live in calib_core, with tests. Co-Authored-By: Claude Opus 5.5 <[email protected]>
A jet bar from 0 m to Depth color max, with five labels, in the 3D view's top-right corner while the Local depth color mode is active. Co-Authored-By: Claude Opus 5.5 <[email protected]>
The key and the View menu item share one toggle, and the shortcut is listed in the help table. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Space plays/pauses while the flyover bar is open, sharing one function with the bar's Play/Pause button, and is listed in the help table. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Loads the image mask at startup through the same path as File > Open Image Mask, before the session and calibration so their status line stays last. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Export points carry the same int16 cm range the shader filters on, and one passesRangeFilter() mirrors kVS's cull, so the LAZ holds what is on screen. The status line reports how many points were filtered out. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Flyover (View → Flyover, Shift+F)
OrbitCamera::setViewPose()places the camera at a LiDAR-axes pose. Mouse orbit/pan/zoom don't apply while the flyover bar is open.Point rendering
uint16int16cm (up to 327.67 m)int32, where-2= rejected by ROI/mask; this replaces the separate in-ROI floatcalib_core
Trajectory::nearestreturnsstd::optional<std::reference_wrapper<const TrajPose>>instead of a raw pointer, with a newnearest(float)overload.Trajectory::timeAt,Trajectory::smoothedPoseandcalib::levelHorizon, with tests.Notes
Test plan
camera_lidar_trajectory_viewer,camera_lidar_calibrationandcore_raylibbuild, with no new warnings inTrajectoryViewer.cpp.calib_core_tests: 51/51 pass, including new smoothing and level-horizon tests.apps/files.🤖 Generated with Claude Code