Skip to content

Releases: rsasaki0109/aqua_localization

aqua_localization v0.5 — interactive 3DGS sample viewer

Choose a tag to compare

@rsasaki0109 rsasaki0109 released this 21 May 21:48

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

aqua_localization v0.4 — 3DGS inspector + Pages workflow cleanup

Choose a tag to compare

@rsasaki0109 rsasaki0109 released this 21 May 13:47

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

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

Choose a tag to compare

@rsasaki0109 rsasaki0109 released this 21 May 07:54

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/GT poses
  • 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

3DGS sample pack inspector

aqua_localization v0.2 — pose graph backend + sonar covariance calibration

Choose a tag to compare

@rsasaki0109 rsasaki0109 released this 09 May 00:34

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.
    New aqua_localization/scripts/calibrate_sonar_covariance.py
    offline tool (Umeyama-aligned, reports d^2 distribution and
    suggested scale factors). MBES-SLAM beach_pond calibrated:
    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_graph ament_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

Choose a tag to compare

@rsasaki0109 rsasaki0109 released this 08 May 22:12

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 .mcap bundling 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
    .rrd recording.
  • 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 .rrd export 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.