Skip to content

Add independent gripper filtering and an interpolated simulated receiver - #9

Open
PCrnjak wants to merge 4 commits into
mainfrom
codex/interpolated-receiver
Open

PCrnjak wants to merge 4 commits into
mainfrom
codex/interpolated-receiver

Conversation

@PCrnjak

@PCrnjak PCrnjak commented Nov 6, 2026 •

Copy link
Copy Markdown
Collaborator

Gripper filtering previously shared pose smoothing/cadence, and the simulator applied targets immediately. Add optional independent gripper smoothing/rate settings and an interpolating simulated receiver whose own worker expires commands if the sender stops.

Behavior:

  • Omitted gripper settings preserve existing behavior. Explicit time constants/rate caps affect gripper updates without slowing pose output; elapsed-time speed limits and clutch/reference resets remain enforced.
  • CartesianReceiver keeps one plan per channel, enforces its own workspace/linear/angular/gripper limits, and uses its monotonic receipt clock for expiry. Duplicate, out-of-order, wrong-session, and invalid packets do not refresh deadlines. Late ticks freeze at the expiry instant; pose-only packets do not extend old gripper/rotation deadlines.
  • Explicit arm and fresh clutch re-anchoring handshake with session ID and the sender's last produced sequence. That watermark rejects even unseen packets delayed from before clutching. Expiry requires a new session; construction/import is idle, and close joins the simulated worker even after errors.
  • source-leap teleop --demo --interpolate uses the existing packaged browser lab. Omitting the flag keeps immediate feedback. Add callback support, receiver telemetry, a deterministic expiry example, and a focused guide. No robot SDK, physical transport, or additional dependency is introduced.

Validation:

  • The installed candidate passed 233 tests on each Windows CPython 3.10.11, 3.11.9, 3.12.10, 3.13.17, 3.14.10, and 3.15.2. Every venv received 30 live sequential and 30 latest-mode frames, replayed the 1,047-frame recording with 50 complete hand samples, ran the interpolated demo, and passed pip check.
  • Combined recorded-hand receiver replay produced 18 pose commands and 9 independent gripper updates, respected all receiver motion bounds, completed clutch/resume, and sent zero commands after latched tracking loss.
  • A 60-second synthetic soak processed 3,457 control steps and 3,440 simulated targets. Five deliberate sender pauses expired on the receiver worker and required explicit recalibration; reader/receiver threads closed cleanly.
  • Wheel-from-sdist build, strict Twine metadata, Ruff, JavaScript syntax, archive-content checks, and 139 internal links passed. A fresh Python 3.10 venv installed the exact final wheel, ran 30 interpolated frames with independent TOML settings, served packaged viewer assets, and passed pip check. Final code/assets match the installed-matrix wheel byte for byte. The runtime pin and base dependencies are unchanged.

Platform CI runs on code commit 693c666192ba9846ccbc09ebc8e913f9670a59d1; subsequent changes are documentation only. See docs/B4_VALIDATION.md and the linked CI checks. Hosted CI verifies software behavior, not Linux/macOS USB/controller support.

Source version is 0.1.0b4. PyPI still provides b3; this PR does not publish a package. No physical robot command, service-state change, or driver installation occurred. UltraGrasp is credited as design inspiration; no external source is bundled by this implementation.

This branch has not been deployed

No deployments
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