Skip to content

Add playback and step selection to the time slider, and extend it to the sky plot and displacement plots. - #441

Merged
adamshapiro0 merged 9 commits into
masterfrom
time-slider
Sep 30, 2026
Merged

adamshapiro0 merged 9 commits into
masterfrom
time-slider

Conversation

@adamshapiro0

Copy link
Copy Markdown
Collaborator

New Features

  • Added time slider support to the GNSS sky plot and top-down displacement/error plots
  • Added time slider playback/step support
  • Drag out a time range anywhere on the slider track and slide it through the log

Changes

  • Distinguish between used and unused satellites on sky plot

Fixes

  • Decimate every satellite in the sky plot onto a shared set of epochs
  • Fixed --plot skyplot not disabling sky plot decimation

@adamshapiro0 adamshapiro0 self-assigned this Sep 29, 2026

@wbrannon wbrannon left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, assuming that the functionality has been tested.

The dispatch checked for a 'plot_skyplot' function, but the sky plot's
function is named 'plot_gnss_skyplot', so the pattern always fell through
to the default (decimated) call. Both 'skyplot' and 'gnss_skyplot' match
the pattern and select it.
Each satellite previously chose its own nearest sample to a 30 second
boundary, so a satellite that reacquired mid-interval landed a few
seconds away from the rest. The sky plot is a snapshot of the sky at a
moment in time, so those samples read as moments of their own holding
one or two satellites, which the time slider would then step to.
A satellite is drawn filled where the navigation engine used at least
one of its signals at that moment and open where it used none, so that
what the solution actually leaned on can be read off the sky directly.

The satellite system and coloring buttons now restyle only the marker
color rather than replacing the marker outright, so that they keep the
shapes instead of dropping them.
A range can now be dragged out anywhere on the track and slid through
the log once selected, double-clicking narrows it to a single step in
time to step between one moment and the next, and ctrl+scroll zooms the
time scale itself so a range can be picked far more precisely than a
whole log's worth of pixels allows.

The control is no longer specific to the map, so it moves to
plotly_time_slider.js and takes the trace attributes it filters, and the
curves it charts, as parameters rather than assuming the map's lat/lon
and speed.
A play button (or the space bar) runs the displayed range forward at a
selectable multiple of real time, so the data can be watched change
rather than stepped through by hand.

Redraws are rate-limited to a share of the main thread and held while
the figure itself is being panned or zoomed, since a figure redrawn
mid-drag loses the gesture. The slider greys out while playback is held
that way, so a clock ticking on against a stationary map reads as the
control waiting rather than as the vehicle having stopped.
The sky plot draws every epoch's satellites on top of one another, so
the slider is the only way to see the constellation at a single moment
or to watch it change. Its background chart counts the satellites drawn
at each epoch and how many of those had a signal in use, and the title
says how coarsely the data is decimated, without which stepping through
a decimated plot looks like it is skipping most of the log.
These plot position against East/North rather than time, so the whole
log is drawn on top of itself with no way to see where the position was
at a given moment. The slider covers all three of them: displacement vs.
median fixed position, error vs. reference, and position vs. base
station.

Their hover customdata moves to one row per point, which is the layout
the slider can slice, so the hover text reads the point's own row rather
than indexing a field-major array.
The background chart ran over the epochs that had a satellite drawn at
them, so an epoch that tracked nothing, or nothing with a known az/el,
left a hole that read as missing data. It now runs over the epochs the
receiver reported, which leaves the chart broken only where the messages
themselves stop.
Dragging an edge in, or dragging out a tiny selection, could leave a
window narrower than the gap between two steps, which lands between them
and displays nothing at all. The arrow keys were no way out either,
moving a tenth of a window that small per press.

A drag asking for less than one step's worth of time now selects the
step under the cursor, the same state a double-click selects, and an
arrow key moves at least one step's spacing however narrow the window.
@adamshapiro0
adamshapiro0 merged commit 3bb0f50 into master Sep 30, 2026
27 checks passed
@adamshapiro0
adamshapiro0 deleted the time-slider branch September 30, 2026 19:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants