Repository navigation
Releases: rsasaki0109/aqua_localization
Release list
aqua_localization v0.5 — interactive 3DGS sample viewer
This release makes the underwater 3DGS sample track easier to see, share, and inspect from GitHub Pages. The downloadable sample pack remains attached to v0.3.
Highlights
- Simplified the GitHub Pages landing page around the underwater 3DGS sample.
- Reworked the sample pack inspector into a frame + 3D camera-path viewer.
- Added Play, Pause, and Reset controls for the 20-frame Tank sample.
- Refreshed the README/GitHub Pages screenshot to show the interactive viewer.
- Added Open Graph and Twitter card metadata for the 3DGS Pages entry points.
- Updated README entry points to highlight the playable sample viewer.
- Added a 3DGS training readiness checker for nerfstudio-style sample packs.
- Added the v0.3 sample pack readiness result to the static inspector.
- Added a public 3DGS training smoke-test guide.
- Added a 3DGS training smoke-test report template.
Links
- GitHub Pages: https://rsasaki0109.github.io/aqua_localization/
- 3DGS sample viewer: https://rsasaki0109.github.io/aqua_localization/experiments/underwater_3dgs_pack_viewer.html
- v0.3 sample pack artifact: https://github.com/rsasaki0109/aqua_localization/releases/tag/v0.3
aqua_localization v0.4 — 3DGS inspector + Pages workflow cleanup
Highlights
- Adds the static 3DGS sample pack inspector on GitHub Pages.
- Adds the Tank sample contact sheet and compact viewer JSON used by the inspector.
- Adds a README screenshot that links directly to the inspector.
- Updates the GitHub Pages workflow to Node 24-compatible action majors.
Links
- Inspector: https://rsasaki0109.github.io/aqua_localization/experiments/underwater_3dgs_pack_viewer.html
- Inspector screenshot: https://rsasaki0109.github.io/aqua_localization/media/3dgs_pack_inspector.png
- Changelog: https://github.com/rsasaki0109/aqua_localization/blob/main/CHANGELOG.md
- v0.3 sample pack artifact: https://github.com/rsasaki0109/aqua_localization/releases/download/v0.3/tank_short_test_3dgs_pack_20frames.zip
The downloadable 3DGS input pack remains attached to v0.3. This v0.4 release captures the public inspector, README presentation, and Pages workflow cleanup on top of that artifact.
aqua_localization v0.3 — underwater 3DGS sample pack
Highlights
- Publishes the first underwater 3DGS input sample pack artifact.
- Adds manual camera intrinsics support for Tank camera conversions without CameraInfo.
- Documents direct download links from README and GitHub Pages.
Attached artifact
tank_short_test_3dgs_pack_20frames.zip- 20 PNG frames from Tank Dataset
short_test - 20 matched
/apriltag_slam/GTposes - nerfstudio-style
transforms.json - manual Tank stereo intrinsics:
612 512 655 655 306 256 - SHA256:
96c8c63ea1ad07aaba6b3a7369330ab5749ebf6ae24eecc2f2f2484836cfd3d3
This is a reproducible input pack for reconstruction experiments, not a trained Gaussian Splatting result or reconstruction benchmark.
Inspector
aqua_localization v0.2 — pose graph backend + sonar covariance calibration
aqua_localization v0.2 — pose graph backend + sonar covariance calibration
Three-PR slice on top of v0.1, all merged via squash to main:
-
#4 Chi-square calibration of sonar pose covariance.
Newaqua_localization/scripts/calibrate_sonar_covariance.py
offline tool (Umeyama-aligned, reports d^2 distribution and
suggested scale factors). MBES-SLAMbeach_pondcalibrated:
pre-tune position_scale=1.0 produced d^2 mean=1834 vs target 3
(single-fan multibeam is geometrically degenerate, real residuals
~10 m vs floor-clamped sigma 0.10 m^2). Profile now ships
position_floor=25 m^2 / scale=100 / cap=400 m^2 to make the
published uncertainty honest. -
#5 New
aqua_pose_graphament_cmake package: SE(3) keyframe graph
on g2o. Subscribes to upstream odometry, extracts keyframes when
relative motion exceeds configurable thresholds, connects them
with EdgeSE3 constraints whose information matrix is read from
the upstream pose.covariance, runs g2o LM optimization on demand
or every N keyframes, publishes the optimised trajectory as
nav_msgs/Path on/aqua_pose_graph/path. The
add_loop_constraint(...)API is the entry point for a future
place-recognition / submap-matching / visual loop closure front
end. Five gtests cover seed, threshold trigger, chain-noop,
loop-constraint pull-in, reset. -
#6 Wires aqua_pose_graph into the top-level launch (off by default
since loop closures are not yet generated). Smoke-tested on
Tank Dataset short_test: 361 keyframes, populated path.
Build/test status:
- 134 unit + runtime tests on the canonical packages, 0 failures.
- 5 new gtests on aqua_pose_graph, 0 failures.
- All 5 packages (aqua_msgs, aqua_imu_loc, aqua_sonar_loc,
aqua_fusion, aqua_pose_graph, aqua_localization) build clean on
ROS 2 Jazzy with libg2o-dev / Eigen3.
Loop closure detection (place recognition, bathymetric submap matching
or visual BoW) remains the headline next milestone.
aqua_localization v0.1 — MVP snapshot
aqua_localization v0.1 — MVP snapshot
First tagged milestone. The stack runs end-to-end against four public
underwater datasets, all build/test green on ROS 2 Jazzy:
- 134 unit + runtime tests pass on the canonical packages
(aqua_msgs, aqua_imu_loc, aqua_sonar_loc, aqua_fusion,
aqua_localization). - Tank Dataset short_test (Xu et al., IJRR 2025): IMU + pressure +
DVL body-frame velocity fusion vs AprilTag ground truth, 0.43 m
APE RMSE on the 15 s sequence — first public-data demo of the
DVL fusion path. - MBES-SLAM beach_pond (POS group): GICP multibeam registration
with submap front end + IMU motion prior, accumulated
bathymetric scan rendered through rerun.io. - NTNU subset-fjord/fjord_1: dataset SLAM baseline through a 7 m
fjord dive, IMU-only dead reckoning's pressure-anchored z(t)
visible in the rerun export. - AQUALOC harbor_07: LIRMM Dumbo ROV underwater camera + barometer
pressure routed through aqua_imu_loc, qualitative
"look at the sensor stream" demo.
Each demo has:
- A starter profile under /config/.yaml.
- A bring-up doc under datasets/_demo.md.
- A one-shot recorder script
(aqua_localization/scripts/record__demo.sh) that
produces a results-included.mcapbundling source sensors with
aqua_imu_loc/aqua_sonar_loc outputs. - A rerun.io export script
(aqua_localization/scripts/rerun_export[_].py) that
builds a curated 3D + plots blueprint and writes a self-contained
.rrdrecording. - A pre-rendered headless screenshot at docs/media/_rerun.png.
Localization features in the box:
- 15-state additive UKF: position / velocity / RPY / accel-bias /
gyro-bias. - Pressure/depth measurement update with seawater density
conversion. - Tightly-coupled DVL body-frame velocity update (UKF measurement
on R(rpy)^T v_world). - Tightly-coupled sonar 3D position update (closes the
registration → IMU bias loop via sigma-point cross-covariance). - Optional AHRS hooks: yaw observation, gyro_z bias from AHRS yaw
rate, 3-axis gyro bias. - Static-bias initializer with motion-detection abort.
- IMU mount rotation (imu.mount.rotation_rpy_rad) for non-REP-145
sensor mounting. - Surface-vessel pseudo-depth hook for boats without pressure.
- Configurable underwater dynamics: gravity, water-current,
linear drag, buoyancy.
Sonar registration:
- PCL ICP / GICP / NDT backends + noop, factory-dispatched.
- Quality gates: max_fitness_score, max_translation_step_m,
max_rotation_step_rad. - Submap front end (concatenates last K accepted fans) with
constant-velocity prior or external IMU/DVL motion prior on a
nav_msgs/Odometry topic. - Fitness/inliers-derived diagonal pose covariance (off by default
for backward compatibility; on, behind a flag).
Fusion:
- aqua_fusion loosely fuses IMU/depth odometry with sonar
odometry. End-to-end exercised on MBES-SLAM beach_pond.
Web replay paths (no local RViz required):
- rerun.io: headless
.rrdexport plus interactive viewer / web
viewer. - Lichtblick (Apache-2.0 fork of Foxglove Studio): committable
layout JSON plus Playwright headless driver.
Honest limitations recorded in docs/mvp_checklist.md:
- IMU-only dead reckoning drifts ~order of magnitude on bags
without DVL/visual aiding (NTNU fjord_1, AQUALOC harbor_07). - Tightly-coupled sonar feedback narrows MBES-SLAM beach_pond
fusion drift from ±40 m loose-coupling to ~17 m, but the
geometric degeneracy of single-fan multibeam still dominates
accuracy. Submap accumulation with external navigation is the
paper-recommended fix and the next milestone. - Per-platform chi-square calibration of the sonar covariance
scales is future work.
Visual + acoustic aiding (cameras, USBL/SBL) and an ESKF backend
remain on the roadmap.
