Skip to content

data: sf_office_stairs D455 stereo recording - #3349

Merged
jeff-hykin merged 6 commits into
mainfrom
jeff/feat/d455_rec
Aug 5, 2026
Merged

data: sf_office_stairs D455 stereo recording#3349
jeff-hykin merged 6 commits into
mainfrom
jeff/feat/d455_rec

Conversation

@jeff-hykin

@jeff-hykin jeff-hykin commented Aug 4, 2026

Copy link
Copy Markdown
Member

mid360 pointlio + d455, two floors, start and stop same location. use as a smoke test. One revisited April tag, one not-revisited April tag

Other (non-smoke test) stereo datasets here (bigger than 5Gb compressed)

Top Down Pointlio preview

IMG_20260804_144409_682
stream                                count      dur      hz     p99         gap  payload
-----------------------------------------------------------------------------------------
pointlio_lidar                          938    1m50s     8.5   343ms  480ms 4.1x  PointCloud2.PointCloud2
pointlio_odometry                      1678    1m50s    15.3   257ms  479ms 7.3x  Odometry.Odometry
realsense_color_image                  3272    1m50s    29.8    34ms 582ms 17.4x  Image.Image
realsense_color_image_camera_info       109    1m48s     1.0   1.00s  1.00s 1.0x  CameraInfo.CameraInfo
realsense_depth_image                  3242    1m50s    29.6    34ms 582ms 17.2x  Image.Image
realsense_depth_image_camera_info       109    1m48s     1.0   1.00s  1.00s 1.0x  CameraInfo.CameraInfo
realsense_imu                         43953    1m50s   400.8     3ms    3ms 1.1x  Imu.Imu
realsense_infra_left                   3242    1m50s    29.6    34ms 582ms 17.2x  Image.Image
realsense_infra_left_camera_info        109    1m48s     1.0   1.00s  1.00s 1.0x  CameraInfo.CameraInfo
realsense_infra_right                  3241    1m50s    29.6    34ms 582ms 17.2x  Image.Image
realsense_infra_right_camera_info       109    1m48s     1.0   1.00s  1.00s 1.0x  CameraInfo.CameraInfo
tf                                    26919    1m50s   245.6    33ms  71ms 17.4x  TFMessage.TFMessage
-----------------------------------------------------------------------------------------
12 streams (12 non-empty), 86921 total messages

tf frames  (tf, first 10s, 2442 msgs)
world
└── mid360_link
    ├── base_link
    │   └── d455_link
    │       ├── d455_accel_frame
    │       │   └── d455_accel_optical_frame
    │       ├── d455_color_frame
    │       │   └── d455_color_optical_frame
    │       ├── d455_depth_frame
    │       │   └── d455_depth_optical_frame
    │       ├── d455_gyro_frame
    │       │   └── d455_gyro_optical_frame
    │       ├── d455_infra1_frame
    │       │   └── d455_infra1_optical_frame
    │       └── d455_infra2_frame
    │           └── d455_infra2_optical_frame
    └── mid360_imu_frame

Google Drive Ones

sf_office1
photo_2026-08-04 23 47 09

small_loop_left
photo_2026-08-04 23 48 31

sf_office1_2
photo_2026-08-04 23 48 06

hotel (pointlio drifts in this)
photo_2026-08-04 23 49 19

small loop but at night
photo_2026-08-04 23 53 43

@codecov

codecov Bot commented Aug 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

@@            Coverage Diff             @@
##             main    #3349      +/-   ##
==========================================
- Coverage   75.80%   75.80%   -0.01%     
==========================================
  Files        1172     1172              
  Lines      113568   113568              
  Branches    10258    10295      +37     
==========================================
- Hits        86090    86085       -5     
- Misses      24492    24493       +1     
- Partials     2986     2990       +4     
Flag Coverage Δ
OS-ubuntu-24.04-arm 69.92% <ø> (-0.01%) ⬇️
OS-ubuntu-latest 71.93% <ø> (-0.01%) ⬇️
Py-3.10 71.92% <ø> (-0.01%) ⬇️
Py-3.11 71.93% <ø> (-0.01%) ⬇️
Py-3.12 71.92% <ø> (-0.01%) ⬇️
Py-3.13 71.92% <ø> (-0.01%) ⬇️
Py-3.14 71.92% <ø> (-0.01%) ⬇️
Py-3.14t 71.92% <ø> (-0.01%) ⬇️
SelfHosted-Large 29.60% <ø> (ø)
SelfHosted-Linux 35.74% <ø> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 5 files with indirect coverage changes

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

… truth

1m50s of IR stereo + colour + depth + four camera_infos + 400 Hz IMU + Mid-360
lidar and Point-LIO odometry, lossless, with no gap over 0.3 s after the
camera's first frame.

Point-LIO drops roughly half its output here -- 15 Hz against a 28.5 Hz
nominal, worst gap ~520 ms. The trajectory is smooth enough to interpolate, but
anyone scoring per-frame ATE against it should know.

A top-down render is derivable with `heatmap <recording.db>` and is deliberately
not committed. The other recordings from this session are held back: their
tarballs are over 5 GB, which the LFS backend cannot accept because giftless's
S3 storage does not implement multipart upload, so an object has to fit in a
single presigned PUT.
The tf frames were named after no particular device -- camera_link, imu_frame --
which says nothing about which of the rig's two sensors they belong to. They now
carry the model: camera_* -> d455_*, and the Livox's own IMU becomes
mid360_imu_frame. base_link stays unprefixed; it is the rig's ground contact, not
a sensor. The color stream is renamed to realsense_color_image to match its
siblings.

Frame names live in the message payloads as well as in tf, so all 57k stamped
frame_ids were rewritten alongside the tree; renaming only tf would leave a
recording that loads fine and resolves nothing.
The RealSense pipeline hands wait_for_frames() the latest frame of each stream,
and under load the streams desync. The recorder stamped all of them from one
frameset clock and published all of them every iteration, so a stream that had
not advanced was stored again -- byte-identical image, repeated timestamp -- and
a stream that had advanced got a stale time.

Removed 30 identical repeats each from depth, infra1 and infra2; those rows
carried nothing the row before them did not, and the three streams stereo
methods actually consume are now strictly monotonic. The 30 colour frames that
advanced under a stale stamp are kept and tagged ts_suspect: the image is real,
only its time is wrong, and the frame's own hardware timestamp was never
recorded so it cannot be recovered. Inventing one would be indistinguishable
downstream from a measurement.
@jeff-hykin
jeff-hykin marked this pull request as ready for review August 5, 2026 02:11
@jeff-hykin
jeff-hykin enabled auto-merge August 5, 2026 02:25
realsense_camera_info and realsense_depth_camera_info were the only two that did
not, which made the pairing something you had to know rather than read:

  realsense_camera_info        -> realsense_color_image_camera_info
  realsense_depth_camera_info  -> realsense_depth_image_camera_info

Every camera_info is now <stream>_camera_info and sorts next to its images.
@github-actions github-actions Bot added the ready-to-merge Required CI checks have passed on this PR label Aug 5, 2026
@jeff-hykin
jeff-hykin added this pull request to the merge queue Aug 5, 2026
Merged via the queue into main with commit e8a985d Aug 5, 2026
38 checks passed
@jeff-hykin
jeff-hykin deleted the jeff/feat/d455_rec branch August 5, 2026 18:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

PlzReview ready-to-merge Required CI checks have passed on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants