Skip to content

Add queued execution speed and explicit pause/resume - #45

Draft
Jepson2k wants to merge 8 commits into
feat/named-device-signalsfrom
feat/execution-speed-override
Draft

Add queued execution speed and explicit pause/resume#45
Jepson2k wants to merge 8 commits into
feat/named-device-signalsfrom
feat/execution-speed-override

Conversation

@Jepson2k

@Jepson2k Jepson2k commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

Make queued execution speed a controller capability. set_execution_speed(0.1..1.0) retimes the existing planned joint path; pause() decelerates to a hold with the queue retained, and resume() uses the selected positive speed. Changing speed while paused keeps the hold. Fresh readback reports selected, requested, and applied speed separately.

The player interpolates the original joint path before step quantization. Rate changes are checked against acceleration derived from the emitted positions, with preallocated buffers in the control loop. Queued dwell time pauses; positive overrides leave dwell and independent actuator timing unchanged. Jog and servo-stream timing remains separate. Override transitions have their own rate and acceleration bounds; nominal motion-profile jerk ceilings are not guaranteed during a transition.

Standalone completion waits retain wall-clock deadlines. Unconfirmed blocking motion completion raises TimeoutError; the queued motion remains until completed or stopped. Preview retimes trajectory durations and reports paused operations as unresolved.

Depends on #44 and waldoctl #32. Coordinated branches use feat/execution-speed-override.

Validation: 25 motion-pipeline, hostile-wire-input, and simulated client tests passed; preview checks and lint/type/format checks passed. The acceleration regression reproduced a 20% excess under a fast transition before the emitted-position check fixed it. Validation used simulated execution; physical transition tuning remains unverified.

Companion PRs: waldoctl #32, PAR6 #75, Commander #58.

Jepson2k and others added 6 commits September 11, 2026 05:20
execution_paused was only ever cleared by an explicit resume, so a pause
followed by a program stop left every later queued command silently held
by the segment player with no error and an empty-looking pipeline.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…cution-speed-override

# Conflicts:
#	parol6/server/controller.py
…nfirmed as 0

A queued delay counted nominal control ticks, so on a loaded controller --
where periods routinely exceed the nominal one -- every delay stretched by
the loop's cumulative overrun: five seconds became six at 20% overrun. It
measures real time now, with each tick's contribution capped, because the
player stops ticking a paused delay altogether and that gap arrives as one
enormous tick.

The trajectory hot path ran the per-joint acceleration-window search and the
admissibility bisection on every tick of every playback, including the
common case where nobody has overridden the speed and the rate they compute
is forced to zero. They run when the scale is actually changing.

pause(), resume() and set_execution_speed() document 0 as "unconfirmed", but
a readback whose reply was lost inside the confirmation window raised
ConnectionError -- telling the caller the controller was unreachable when it
had acked the command moments earlier.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…cution-speed-override

# Conflicts:
#	parol6/client/dry_run_client.py
#	parol6/commands/utility_commands.py
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.

1 participant