Skip to content

data: sf_office_stairs D455 stereo recording - #3349

Open
jeff-hykin wants to merge 6 commits into
mainfrom
jeff/feat/d455_rec
Open

data: sf_office_stairs D455 stereo recording#3349
jeff-hykin wants to merge 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
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.

1 participant