Skip to content

Rename OAK-specific post-processing identifiers to generic names - #29

Merged
simheo merged 1 commit into
developfrom
rename-oak-identifiers
Oct 20, 2026
Merged

simheo merged 1 commit into
developfrom
rename-oak-identifiers

Conversation

@simheo

@simheo simheo commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Follow-up to #27: the Orbbec Gemini 305 replaced the OAK-D SR as the default depth camera, and #27 made the prose generic. This renames the OAK-specific identifiers that were held back so in-flight branches wouldn't need painful rebases. dcam (depth camera) is the generic prefix, as for the raw dcam_* files.

Renames (all git mv, so history follows)

Before After
grabette_postprocess/oak_slam.py, run_oak_slam() slam.py, run_slam()
scripts/pipeline/run_oak_slam.py run_slam.py
scripts/pipeline/convert_episode_to_oak.py convert_episode_for_slam.py
docker/oak_vslam/ docker/vslam/
check_oak_imu, load_oak_gyro_norm, oak_left_frame_ts check_dcam_imu, load_dcam_gyro_norm, dcam_left_frame_ts
private helpers / locals (_check_oak_cameras, _load_oak_left_timestamps, _load_oak_imu, oak_dir, oak_ts…) dcam / slam_dir equivalents
per-episode SLAM input dir oak/, log oak_slam_stdout.txt slam_input/, slam_stdout.txt
base image pollenrobotics/oak-vslam pollenrobotics/grabette-vslam

pipeline.py already had its own batch run_slam(), so it now imports the module (from grabette_postprocess import slam, slam.run_slam(...)) instead of the function.

Also in here

  • IMU-less log line: a Gemini run printed no IMU gravity ([Errno 2] No such file or directory: …/oak/imu_acc.csv) for every episode. A missing imu_acc.csv is the normal IMU-less case and now logs no IMU (IMU-less camera): …. Other IMU failures keep the real error. Two tests added (tests/test_slam.py).
  • Leftover OAK wording in dataset.py, slam.py, app.py, pipeline.py.
  • dataset.py: the h264 rationale comment from the monorepo copy, and a needless f-prefix dropped.

Docker image

pollenrobotics/grabette-vslam:2026-07-22 and :latest are the same image as oak-vslam, with the same digest sha256:3fd1c9…. It was re-pushed, not rebuilt. oak-vslam stays as a frozen alias. Both names are public.

Kept on purpose

  • legacy oakd_* / oak_mask.png names in episode_files.py and their tests (old recordings on the Hub)
  • OAK-D-specific notes, and references to grabette's hardware/oakd.py
  • the "oak" camera label inside offline_vslam.cpp
  • the attribution in THIRD_PARTY_NOTICES.md; only its two docker/vslam/ paths changed, since the old ones would point at nothing

git grep -n -i -P '(?<![a-z])oak' -- . ':!*.lock' now shows only these.

Behaviour change

New runs write slam_input/ and slam_stdout.txt. Episodes converted earlier still have oak/. Re-running the pipeline converts them again, but visualize_rgbd_trajectory.py --gravity-align on an old processed episode needs a re-convert first.

Verification

  • pytest: 70 passed (68 + 2 new)
  • --help runs for all 11 scripts (the visualizer with --extra viz)
  • pipeline.py imports; slam.run_slam resolves to the package, run_slam to the batch runner
  • Local SLAM through the renamed scripts (convert_episode_for_slam.py → run_slam.py) with the default grabette-vslam image: OAK-D episode 144/144 tracked, writes slam_input/, slam_stdout.txt, camera_trajectory.csv. A Gemini episode fails with nlohmann type_error … null; that bug already exists on develop: the published image (built 2026-07-22) predates IMU-less support in offline_vslam.cpp (590a794, 2026-08-18). The Space is unaffected because its Dockerfile recompiles the binary. A rebuilt image is a separate follow-up.
  • Test Space: b4fad29 built (FROM grabette-vslam, offline_vslam compiled from docker/vslam/), page shows the branch, API answers. A full conversion of simheo/test_0909_gemini-raw (4 Gemini episodes) logged slam_input/ written and the plain no IMU (IMU-less camera) line, tracked 4/4 at 100% (all GOOD), and pushed the dataset

🤖 Generated with Claude Code

The Orbbec Gemini 305 replaced the OAK-D SR as the default depth camera;
#27 made the prose generic, this renames what was left:

- modules/scripts: oak_slam.py -> slam.py (run_oak_slam -> run_slam),
  run_oak_slam.py -> run_slam.py, convert_episode_to_oak.py ->
  convert_episode_for_slam.py, docker/oak_vslam/ -> docker/vslam/
- checks.sync: check_oak_imu / load_oak_gyro_norm / oak_left_frame_ts ->
  check_dcam_imu / load_dcam_gyro_norm / dcam_left_frame_ts; private helpers
  and locals likewise (oak_dir -> slam_dir, oak_ts -> dcam_ts, ...)
- per-episode SLAM input dir oak/ -> slam_input/, log oak_slam_stdout.txt ->
  slam_stdout.txt
- SLAM base image pollenrobotics/oak-vslam -> pollenrobotics/grabette-vslam
  (same image, retagged; the old name stays as a frozen alias)
- pipeline.py imports the slam module so its own batch run_slam() keeps its name
- leftover OAK wording in dataset.py, slam.py, app.py, pipeline.py
- an IMU-less camera now logs "no IMU (IMU-less camera)" instead of a raw
  FileNotFoundError; other IMU failures keep the error (tests added)
- dataset.py: h264 rationale comment, needless f-string prefix dropped

Kept: legacy oakd_*/oak_mask.png names (old recordings), OAK-D-specific
notes, the "oak" camera label in offline_vslam.cpp. THIRD_PARTY_NOTICES only
gets the moved docker/vslam/ paths.

Assisted-by: Claude:claude-opus-5-5
@simheo
simheo merged commit c6beacb into develop Oct 20, 2026
2 checks passed
@simheo
simheo deleted the rename-oak-identifiers branch October 20, 2026 17:17
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