Repository navigation
sensing: answer the PC's clock exchange and stamp frames with a documented time - #1437
Closed
gareth-morgan-nv wants to merge 10 commits into
Closed
gareth-morgan-nv wants to merge 10 commits into
gareth-morgan-nv wants to merge 10 commits into
Conversation
Contributor
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the
|
gareth-morgan-nv
had a problem deploying
to
dev
November 5, 2026 22:31 — with
GitHub Actions
Failure
gareth-morgan-nv
force-pushed
the
gmorgan/Argus
branch
from
November 6, 2026 01:42
71b6bbf to
2c38aba
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/TimestampAlignment
branch
from
November 6, 2026 01:42
ba2d1d7 to
b7d8f99
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/Argus
branch
from
November 6, 2026 05:39
2c38aba to
27dad9c
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/TimestampAlignment
branch
from
November 6, 2026 05:39
b7d8f99 to
be24085
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/Argus
branch
from
November 6, 2026 05:42
27dad9c to
2602fd7
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/TimestampAlignment
branch
from
November 6, 2026 05:42
be24085 to
fbdc7e3
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/Argus
branch
from
November 6, 2026 18:04
2602fd7 to
74384ee
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/TimestampAlignment
branch
from
November 6, 2026 18:04
c6f0635 to
d9d408f
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/Argus
branch
from
November 6, 2026 20:31
74384ee to
32272f2
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/TimestampAlignment
branch
from
November 6, 2026 20:31
d9d408f to
0dc1c08
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/Argus
branch
from
November 6, 2026 22:37
32272f2 to
e28d3bc
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/TimestampAlignment
branch
2 times, most recently
from
November 8, 2026 22:37
30c47c3 to
47356b6
Compare
6 of 9 tasks
gareth-morgan-nv
force-pushed
the
gmorgan/TimestampAlignment
branch
6 times, most recently
from
November 8, 2026 23:29
6e2ba3f to
0c5c6e0
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/Argus
branch
from
November 9, 2026 18:51
586e3df to
1353583
Compare
12 of 16 tasks
gareth-morgan-nv
force-pushed
the
gmorgan/TimestampAlignment
branch
from
November 9, 2026 23:26
9c5d6e5 to
4465d5d
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/Argus
branch
from
November 10, 2026 02:17
1353583 to
8094c90
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/TimestampAlignment
branch
from
November 10, 2026 02:17
4465d5d to
85b7158
Compare
The LiveKit session parses four-timestamp requests (topic isaaccapture.clock-sync, 13 bytes) in onUserPacketReceived, stamps t2 first on CLOCK_MONOTONIC, and a small responder thread sends the 29-byte reply to the requester only, unreliable, with t3 written just before the send. The queue is bounded; anything else is ignored. The wire format is in clock_sync.hpp. The frames still declare processing time. Syntax-checked against the pinned SDK v1.12.4 headers here; not built or run on a Jetson. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Gareth Morgan <gmorgan@nvidia.com>
… the Python side Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Gareth Morgan <gmorgan@nvidia.com>
…e the encoder's returned stamps --timestamp-basis=capture_monotonic_us converts the backend's sensor timestamp (SIPL capture counter as generic-counter ticks, Argus sensor timestamp as CLOCK_MONOTONIC_RAW ns) through a low-rate anchor pair and fails the stream on an implausible conversion; the default stays processing time. The units are assumptions checked per frame, not verified on hardware. SENSING_ENCODER_TIMESTAMP_PROBE=1 logs returned unit stamps beside the last submitted one. Host tests cover the mapping. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Gareth Morgan <gmorgan@nvidia.com>
…racking times mean ClockEstimator.mapping(now) grows the uncertainty with the age of the exchange, so the recording budget cannot pass on a figure from before a reply gap. The take's timing evidence names what each tracking source's time is (host poll; controller pose-evaluation time; Manus host time at push) and that physical alignment is unavailable. The native capture_monotonic_us option is described as unverified. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Gareth Morgan <gmorgan@nvidia.com>
… default The native sender publishes its monotonic frame-ready time (monotonic_us) by default; recording accepts that basis alongside the sensor-capture basis, the take's timing evidence names which, and the page computes latency from either. The agent-only plan notes move to the git-ignored agentPlans/ folder. Tests extend the saved-artifact timeline fixture over both bases. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Gareth Morgan <gmorgan@nvidia.com>
… no longer exists FrameMeta lost stamp_us when the application timestamp moved to unix_us; the frame's own timestamp is the unit's. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Gareth Morgan <gmorgan@nvidia.com>
Pacing used the time the polling loop collected a frame, so poll phase jitter could drop a frame that was due. Compute the sensor capture time before the pacing gate when that is the published basis and pace on it; otherwise pace on the backend's hand-over time. A pacing clock that steps back restarts pacing instead of holding every frame until it catches up. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Gareth Morgan <gmorgan@nvidia.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Gareth Morgan <gmorgan@nvidia.com>
gareth-morgan-nv
requested review from
farbod-nv,
jsepulveda-nvidia and
tengw-nv
November 10, 2026 19:54
gareth-morgan-nv
force-pushed
the
gmorgan/TimestampAlignment
branch
from
November 10, 2026 22:02
85b7158 to
f87d010
Compare
gareth-morgan-nv
force-pushed
the
gmorgan/Argus
branch
from
November 10, 2026 22:02
3bd5dc6 to
3054844
Compare
track_in_flight pushed a monotonic stamp this branch's FrameMeta does not carry, and publish_unit used a stamp_us local that the encoder-correlation change had removed. Push the three fields the struct has, and take the transport timestamp from the encoder's own unit stamp again. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Gareth Morgan <gmorgan@nvidia.com>
Contributor
Author
|
Closing as superseded: the camera path is now the camera_streamer architecture (SIPL/Argus sender, AVS1 over TCP, PC receiver and LiveKit bridge; see #1473-#1479). Not merged; the branch and commits are kept. 🤖 Generated with Claude Code |
Contributor
Author
|
This PR is superseded by the camera_streamer PRs:
🤖 Generated with Claude Code |
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
The camera-side half of the timing work: the Sensing producer (
camera_plugin_sensing) answers the PC's clock exchange and stamps each frame with a documented time, so the PC can place camera video on its own clock. The egocap side (recorder, page, emulator) is in the PR stacked on this one.--timestamp-basisselectsmonotonic_us(default; the frame-ready time),capture_monotonic_us(the sensor capture event onCLOCK_MONOTONIC, converted from the SIPL counter or the Argus sensor timestamp through a 1 Hz anchor; the stream fails on an implausible value) orprocessing_unix_us. The encoder unit's own stamp is published, and pacing follows the frame's stamped clock, not the poll time.SENSING_ENCODER_TIMESTAMP_PROBE=1logs the stamps the encoder returns.Limits
Validation
src/plugins/sensing/testsgained clock-sync wire-format and sensor-clock tests; they were not built or run for this split.capture_monotonic_us) is unverified on hardware.Stacked on #1429 (Argus), which stacks on #1428 (RearchBackend) and #1461 (the Orin publisher). The egocap half is #1459.
🤖 Generated with Claude Code