Skip to content

Feature/eskf landmark valve#666

Closed
AntTra wants to merge 54 commits into
mainfrom
feature/eskf-landmark-valve
Closed

Feature/eskf landmark valve#666
AntTra wants to merge 54 commits into
mainfrom
feature/eskf-landmark-valve

Conversation

@AntTra

@AntTra AntTra commented Feb 11, 2026

Copy link
Copy Markdown

Visual egomotion feature in ESKF

The current ESKF struggles with drift over time during the mission, especially when the DVL loses bottom lock when the AUV is pitched to look at the bottom valve with the front camera. This project aims to use landmark-based visual odometry as an additional measurement to be fused to the ESKF as 6-dof pose and derived velocity measurements alongside the IMU and DVL.

It works by placing an anchor on the first valid landmark detection and calculates the relative positioning, computing a transform from the VO frame to the navigation frame. All subsequent marker measurements are mapped through this anchor to produce position and orientation in the navigation frame. Velocity is derived from consecutive position measurements. NIS gating on both pose and velocity updates are based on chi-squared thresholds.

Features:

  • Optional sliding window module for robust quaternion averaging using log/exp maps, Huber weighting for linear downweighting less likely measurements, and angular gating to reject outliers before they reach the filter
  • Smart anchor reset which automatically re-anchors after a set amout of configurable consecutive NIS rejections or dropout

For testing:

colcon build --symlink-install --packages-select eskf aruco_detector
source install/setup.bash

In one terminal run

ros2 launch eskf eskf.launch.py

and in another

ros2 launch aruco_detector aruco_detector.launch.py

together with the simulator and direct the AUV towards an ArUco-marker.
Test anchor reset on marker dropout, when the marker ID gets switched, and the performance during movement.

Note: Another important test would be to test the performance of the sliding window as the ESKF already acts as a filter for outliers

Talhanc and others added 30 commits February 9, 2025 19:47
…ses msg imu/data_raw and /orca/pose as the dvl info
Talhanc and others added 22 commits October 7, 2025 22:06
Signed-off-by: Christopher Strøm <detoxte@gmail.com>
…, added local visual egomotion anchoring, reset VO anchor on measurement gaps, fuse VO as relative pose measurement'
… from YAML. ESKF changes: anchor transform, velocity update from consecutive VO measurements, smart anchor reset, NIS rejections for VO, quaternion error using log map, measurement noise floors, tuned values
…truct, builds VoConf struct from params, vo_update to landmark_update, renamed several other variable names, fixed landmark callback to use LandmarkArray, removed unused params
…xplanatory, adjusted huber and gate weights for sliding window under movement
@AntTra AntTra requested review from jorgenfj and kluge7 February 11, 2026 16:58

@vortexuser vortexuser left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You messed up your commits so now it looks like you did everything baka

Comment on lines +24 to +26
pos_floor: 0.05
att_floor: 0.02
vel_floor: 0.2

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: Update aruco-detector to not only give out identity-matrix https://github.com/vortexntnu/vortex-aruco-detection/tree/main

Comment on lines +31 to +36
# Sliding-window smoother
use_sw: true
window_size: 20
max_age: 15.0
huber_deg: 20.0
gate_deg: 60.0

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: Needs tuning way too high boss

auto it = std::min_element(markers.begin(), markers.end(),
[](const auto* a, const auto* b) { return a->subtype < b->subtype; });
const auto* chosen = *it;
uint16_t chosen_id = chosen->subtype;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why no const

Comment thread navigation/eskf/CMakeLists.txt Outdated

ament_export_targets(export_${LIB_NAME})

# --- THE FIX: INSTALL THE EXECUTABLE ---

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Chat comment??

@vortexuser vortexuser linked an issue Feb 11, 2026 that may be closed by this pull request
Removed commented section about installing the executable.
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.

5 participants