Skip to content

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

Choose a tag to compare

@rsasaki0109 rsasaki0109 released this 09 May 00:34
· 316 commits to main since this release

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.