No version for distro humble showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/vortexntnu/vortex-auv.git
VCS Type git
VCS Version main
Last Updated 2026-03-26
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pose filtering and tracking package, with a C++ track manager and ROS 2 interface node.

Maintainers

  • jorgen

Authors

No additional authors.

pose_filtering

ROS 2 package providing pose-based multi-target tracking using an IPDA filter for position together with independent orientation logic.

This package transforms incoming pose-like messages into a common target frame, associates measurements to tracks using spatial and angular gating, maintains an IPDA filter per track for position estimation and existence management, and performs a separate orientation update by averaging measurement quaternions and applying spherical linear interpolation (slerp) to smoothly update the track orientation.

Features

  • Multi-target tracking using an IPDA (Integrated Probabilistic Data Association) filter for 3D position state estimation.
  • Separate orientation handling: angular gating, quaternion averaging and slerp-based smoothing so orientation updates remain numerically stable and physically meaningful.
  • TF2-aware subscriptions (message_filters + tf2 message filter) so incoming messages are automatically dropped until transform to the configured target frame is available.
  • Supports several ROS message inputs (see below) and publishes a geometry_msgs/PoseArray containing the current tracked poses.

Supported input messages

The node accepts the following message types as input measurements:

  • geometry_msgs/msg/PoseStamped
  • geometry_msgs/msg/PoseArray
  • geometry_msgs/msg/PoseWithCovarianceStamped
  • vortex_msgs/msg/LandmarkArray

The code uses a templated message type (PoseMsgT) and checks at compile-time which types are supported. Incoming measurements are transformed to the configured target_frame before being processed.

Outputs

  • geometry_msgs/msg/PoseArray — the current set of tracked poses in the configured target frame. Each Pose contains the track position and a quaternion orientation representing the track’s current orientation.
  • (DEBUG) vortex_msgs/msg/PoseEulerStamped topics with measurement-level and track-state-level pose messages when debug mode is enabled. Only publishes the first element of incoming measurements and stored tracks.

How the filtering works

Position (IPDA):

  • Each track runs a 3D IPDA filter instance (a Gaussian state: mean + covariance) where the motion model is a small constant-dynamics model and the sensor model maps state to direct position measurements.
  • IPDA takes care of measurement association probabilities, gating and existence management (confirmation / deletion thresholds). This provides robust data association for cluttered measurements and handles tracks appearing/disappearing over time.

Orientation (SO(3) PDAF):

Orientation is handled by a dedicated PDAF-style filter operating on the SO(3) manifold. Each track maintains:

  • a quaternion mean q (the track orientation), and
  • a small Gaussian error state in the 3D tangent space (so(3)) around that mean.

The log and exp maps are mathematically defined for all unit quaternions but the Kalman/PDAF linearization on the tangent space assumes small errors. The implementation gates measurements and uses configurable covariances to keep tangent residuals small; if large-angle residuals occur they will either be gated out or yield small β (limited effect).

Library export and usage

The core tracking logic (PoseTrackManager) is built and exported as a shared library by this package so other packages can reuse the track management functionality without pulling in the ROS node.

CMake / ament usage

In a consuming CMake-based package (ament_cmake) you can link against the library like this:

find_package(pose_filtering REQUIRED)

add_executable(my_node src/my_node.cpp)

# Link to the exported library target (the package exports the target
# with the same name as the package: `pose_filtering`)
target_link_libraries(my_node PRIVATE pose_filtering)


The package installs its public headers under include/ so simply

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Package Dependencies

Deps Name
ament_cmake
rclcpp
rclcpp_components
geometry_msgs
tf2
tf2_ros
tf2_geometry_msgs
message_filters
vortex_utils
vortex_utils_ros
vortex_utils_ros_tf
vortex_filtering
vortex_msgs

System Dependencies

No direct system dependencies.

Dependant Packages

Name Deps
landmark_server

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged pose_filtering at Robotics Stack Exchange

No version for distro jazzy showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/vortexntnu/vortex-auv.git
VCS Type git
VCS Version main
Last Updated 2026-03-26
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pose filtering and tracking package, with a C++ track manager and ROS 2 interface node.

Maintainers

  • jorgen

Authors

No additional authors.

pose_filtering

ROS 2 package providing pose-based multi-target tracking using an IPDA filter for position together with independent orientation logic.

This package transforms incoming pose-like messages into a common target frame, associates measurements to tracks using spatial and angular gating, maintains an IPDA filter per track for position estimation and existence management, and performs a separate orientation update by averaging measurement quaternions and applying spherical linear interpolation (slerp) to smoothly update the track orientation.

Features

  • Multi-target tracking using an IPDA (Integrated Probabilistic Data Association) filter for 3D position state estimation.
  • Separate orientation handling: angular gating, quaternion averaging and slerp-based smoothing so orientation updates remain numerically stable and physically meaningful.
  • TF2-aware subscriptions (message_filters + tf2 message filter) so incoming messages are automatically dropped until transform to the configured target frame is available.
  • Supports several ROS message inputs (see below) and publishes a geometry_msgs/PoseArray containing the current tracked poses.

Supported input messages

The node accepts the following message types as input measurements:

  • geometry_msgs/msg/PoseStamped
  • geometry_msgs/msg/PoseArray
  • geometry_msgs/msg/PoseWithCovarianceStamped
  • vortex_msgs/msg/LandmarkArray

The code uses a templated message type (PoseMsgT) and checks at compile-time which types are supported. Incoming measurements are transformed to the configured target_frame before being processed.

Outputs

  • geometry_msgs/msg/PoseArray — the current set of tracked poses in the configured target frame. Each Pose contains the track position and a quaternion orientation representing the track’s current orientation.
  • (DEBUG) vortex_msgs/msg/PoseEulerStamped topics with measurement-level and track-state-level pose messages when debug mode is enabled. Only publishes the first element of incoming measurements and stored tracks.

How the filtering works

Position (IPDA):

  • Each track runs a 3D IPDA filter instance (a Gaussian state: mean + covariance) where the motion model is a small constant-dynamics model and the sensor model maps state to direct position measurements.
  • IPDA takes care of measurement association probabilities, gating and existence management (confirmation / deletion thresholds). This provides robust data association for cluttered measurements and handles tracks appearing/disappearing over time.

Orientation (SO(3) PDAF):

Orientation is handled by a dedicated PDAF-style filter operating on the SO(3) manifold. Each track maintains:

  • a quaternion mean q (the track orientation), and
  • a small Gaussian error state in the 3D tangent space (so(3)) around that mean.

The log and exp maps are mathematically defined for all unit quaternions but the Kalman/PDAF linearization on the tangent space assumes small errors. The implementation gates measurements and uses configurable covariances to keep tangent residuals small; if large-angle residuals occur they will either be gated out or yield small β (limited effect).

Library export and usage

The core tracking logic (PoseTrackManager) is built and exported as a shared library by this package so other packages can reuse the track management functionality without pulling in the ROS node.

CMake / ament usage

In a consuming CMake-based package (ament_cmake) you can link against the library like this:

find_package(pose_filtering REQUIRED)

add_executable(my_node src/my_node.cpp)

# Link to the exported library target (the package exports the target
# with the same name as the package: `pose_filtering`)
target_link_libraries(my_node PRIVATE pose_filtering)


The package installs its public headers under include/ so simply

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Package Dependencies

Deps Name
ament_cmake
rclcpp
rclcpp_components
geometry_msgs
tf2
tf2_ros
tf2_geometry_msgs
message_filters
vortex_utils
vortex_utils_ros
vortex_utils_ros_tf
vortex_filtering
vortex_msgs

System Dependencies

No direct system dependencies.

Dependant Packages

Name Deps
landmark_server

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged pose_filtering at Robotics Stack Exchange

No version for distro kilted showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/vortexntnu/vortex-auv.git
VCS Type git
VCS Version main
Last Updated 2026-03-26
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pose filtering and tracking package, with a C++ track manager and ROS 2 interface node.

Maintainers

  • jorgen

Authors

No additional authors.

pose_filtering

ROS 2 package providing pose-based multi-target tracking using an IPDA filter for position together with independent orientation logic.

This package transforms incoming pose-like messages into a common target frame, associates measurements to tracks using spatial and angular gating, maintains an IPDA filter per track for position estimation and existence management, and performs a separate orientation update by averaging measurement quaternions and applying spherical linear interpolation (slerp) to smoothly update the track orientation.

Features

  • Multi-target tracking using an IPDA (Integrated Probabilistic Data Association) filter for 3D position state estimation.
  • Separate orientation handling: angular gating, quaternion averaging and slerp-based smoothing so orientation updates remain numerically stable and physically meaningful.
  • TF2-aware subscriptions (message_filters + tf2 message filter) so incoming messages are automatically dropped until transform to the configured target frame is available.
  • Supports several ROS message inputs (see below) and publishes a geometry_msgs/PoseArray containing the current tracked poses.

Supported input messages

The node accepts the following message types as input measurements:

  • geometry_msgs/msg/PoseStamped
  • geometry_msgs/msg/PoseArray
  • geometry_msgs/msg/PoseWithCovarianceStamped
  • vortex_msgs/msg/LandmarkArray

The code uses a templated message type (PoseMsgT) and checks at compile-time which types are supported. Incoming measurements are transformed to the configured target_frame before being processed.

Outputs

  • geometry_msgs/msg/PoseArray — the current set of tracked poses in the configured target frame. Each Pose contains the track position and a quaternion orientation representing the track’s current orientation.
  • (DEBUG) vortex_msgs/msg/PoseEulerStamped topics with measurement-level and track-state-level pose messages when debug mode is enabled. Only publishes the first element of incoming measurements and stored tracks.

How the filtering works

Position (IPDA):

  • Each track runs a 3D IPDA filter instance (a Gaussian state: mean + covariance) where the motion model is a small constant-dynamics model and the sensor model maps state to direct position measurements.
  • IPDA takes care of measurement association probabilities, gating and existence management (confirmation / deletion thresholds). This provides robust data association for cluttered measurements and handles tracks appearing/disappearing over time.

Orientation (SO(3) PDAF):

Orientation is handled by a dedicated PDAF-style filter operating on the SO(3) manifold. Each track maintains:

  • a quaternion mean q (the track orientation), and
  • a small Gaussian error state in the 3D tangent space (so(3)) around that mean.

The log and exp maps are mathematically defined for all unit quaternions but the Kalman/PDAF linearization on the tangent space assumes small errors. The implementation gates measurements and uses configurable covariances to keep tangent residuals small; if large-angle residuals occur they will either be gated out or yield small β (limited effect).

Library export and usage

The core tracking logic (PoseTrackManager) is built and exported as a shared library by this package so other packages can reuse the track management functionality without pulling in the ROS node.

CMake / ament usage

In a consuming CMake-based package (ament_cmake) you can link against the library like this:

find_package(pose_filtering REQUIRED)

add_executable(my_node src/my_node.cpp)

# Link to the exported library target (the package exports the target
# with the same name as the package: `pose_filtering`)
target_link_libraries(my_node PRIVATE pose_filtering)


The package installs its public headers under include/ so simply

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Package Dependencies

Deps Name
ament_cmake
rclcpp
rclcpp_components
geometry_msgs
tf2
tf2_ros
tf2_geometry_msgs
message_filters
vortex_utils
vortex_utils_ros
vortex_utils_ros_tf
vortex_filtering
vortex_msgs

System Dependencies

No direct system dependencies.

Dependant Packages

Name Deps
landmark_server

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged pose_filtering at Robotics Stack Exchange

No version for distro rolling showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/vortexntnu/vortex-auv.git
VCS Type git
VCS Version main
Last Updated 2026-03-26
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pose filtering and tracking package, with a C++ track manager and ROS 2 interface node.

Maintainers

  • jorgen

Authors

No additional authors.

pose_filtering

ROS 2 package providing pose-based multi-target tracking using an IPDA filter for position together with independent orientation logic.

This package transforms incoming pose-like messages into a common target frame, associates measurements to tracks using spatial and angular gating, maintains an IPDA filter per track for position estimation and existence management, and performs a separate orientation update by averaging measurement quaternions and applying spherical linear interpolation (slerp) to smoothly update the track orientation.

Features

  • Multi-target tracking using an IPDA (Integrated Probabilistic Data Association) filter for 3D position state estimation.
  • Separate orientation handling: angular gating, quaternion averaging and slerp-based smoothing so orientation updates remain numerically stable and physically meaningful.
  • TF2-aware subscriptions (message_filters + tf2 message filter) so incoming messages are automatically dropped until transform to the configured target frame is available.
  • Supports several ROS message inputs (see below) and publishes a geometry_msgs/PoseArray containing the current tracked poses.

Supported input messages

The node accepts the following message types as input measurements:

  • geometry_msgs/msg/PoseStamped
  • geometry_msgs/msg/PoseArray
  • geometry_msgs/msg/PoseWithCovarianceStamped
  • vortex_msgs/msg/LandmarkArray

The code uses a templated message type (PoseMsgT) and checks at compile-time which types are supported. Incoming measurements are transformed to the configured target_frame before being processed.

Outputs

  • geometry_msgs/msg/PoseArray — the current set of tracked poses in the configured target frame. Each Pose contains the track position and a quaternion orientation representing the track’s current orientation.
  • (DEBUG) vortex_msgs/msg/PoseEulerStamped topics with measurement-level and track-state-level pose messages when debug mode is enabled. Only publishes the first element of incoming measurements and stored tracks.

How the filtering works

Position (IPDA):

  • Each track runs a 3D IPDA filter instance (a Gaussian state: mean + covariance) where the motion model is a small constant-dynamics model and the sensor model maps state to direct position measurements.
  • IPDA takes care of measurement association probabilities, gating and existence management (confirmation / deletion thresholds). This provides robust data association for cluttered measurements and handles tracks appearing/disappearing over time.

Orientation (SO(3) PDAF):

Orientation is handled by a dedicated PDAF-style filter operating on the SO(3) manifold. Each track maintains:

  • a quaternion mean q (the track orientation), and
  • a small Gaussian error state in the 3D tangent space (so(3)) around that mean.

The log and exp maps are mathematically defined for all unit quaternions but the Kalman/PDAF linearization on the tangent space assumes small errors. The implementation gates measurements and uses configurable covariances to keep tangent residuals small; if large-angle residuals occur they will either be gated out or yield small β (limited effect).

Library export and usage

The core tracking logic (PoseTrackManager) is built and exported as a shared library by this package so other packages can reuse the track management functionality without pulling in the ROS node.

CMake / ament usage

In a consuming CMake-based package (ament_cmake) you can link against the library like this:

find_package(pose_filtering REQUIRED)

add_executable(my_node src/my_node.cpp)

# Link to the exported library target (the package exports the target
# with the same name as the package: `pose_filtering`)
target_link_libraries(my_node PRIVATE pose_filtering)


The package installs its public headers under include/ so simply

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Package Dependencies

Deps Name
ament_cmake
rclcpp
rclcpp_components
geometry_msgs
tf2
tf2_ros
tf2_geometry_msgs
message_filters
vortex_utils
vortex_utils_ros
vortex_utils_ros_tf
vortex_filtering
vortex_msgs

System Dependencies

No direct system dependencies.

Dependant Packages

Name Deps
landmark_server

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged pose_filtering at Robotics Stack Exchange

Package Summary

Version 0.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/vortexntnu/vortex-auv.git
VCS Type git
VCS Version main
Last Updated 2026-03-26
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pose filtering and tracking package, with a C++ track manager and ROS 2 interface node.

Maintainers

  • jorgen

Authors

No additional authors.

pose_filtering

ROS 2 package providing pose-based multi-target tracking using an IPDA filter for position together with independent orientation logic.

This package transforms incoming pose-like messages into a common target frame, associates measurements to tracks using spatial and angular gating, maintains an IPDA filter per track for position estimation and existence management, and performs a separate orientation update by averaging measurement quaternions and applying spherical linear interpolation (slerp) to smoothly update the track orientation.

Features

  • Multi-target tracking using an IPDA (Integrated Probabilistic Data Association) filter for 3D position state estimation.
  • Separate orientation handling: angular gating, quaternion averaging and slerp-based smoothing so orientation updates remain numerically stable and physically meaningful.
  • TF2-aware subscriptions (message_filters + tf2 message filter) so incoming messages are automatically dropped until transform to the configured target frame is available.
  • Supports several ROS message inputs (see below) and publishes a geometry_msgs/PoseArray containing the current tracked poses.

Supported input messages

The node accepts the following message types as input measurements:

  • geometry_msgs/msg/PoseStamped
  • geometry_msgs/msg/PoseArray
  • geometry_msgs/msg/PoseWithCovarianceStamped
  • vortex_msgs/msg/LandmarkArray

The code uses a templated message type (PoseMsgT) and checks at compile-time which types are supported. Incoming measurements are transformed to the configured target_frame before being processed.

Outputs

  • geometry_msgs/msg/PoseArray — the current set of tracked poses in the configured target frame. Each Pose contains the track position and a quaternion orientation representing the track’s current orientation.
  • (DEBUG) vortex_msgs/msg/PoseEulerStamped topics with measurement-level and track-state-level pose messages when debug mode is enabled. Only publishes the first element of incoming measurements and stored tracks.

How the filtering works

Position (IPDA):

  • Each track runs a 3D IPDA filter instance (a Gaussian state: mean + covariance) where the motion model is a small constant-dynamics model and the sensor model maps state to direct position measurements.
  • IPDA takes care of measurement association probabilities, gating and existence management (confirmation / deletion thresholds). This provides robust data association for cluttered measurements and handles tracks appearing/disappearing over time.

Orientation (SO(3) PDAF):

Orientation is handled by a dedicated PDAF-style filter operating on the SO(3) manifold. Each track maintains:

  • a quaternion mean q (the track orientation), and
  • a small Gaussian error state in the 3D tangent space (so(3)) around that mean.

The log and exp maps are mathematically defined for all unit quaternions but the Kalman/PDAF linearization on the tangent space assumes small errors. The implementation gates measurements and uses configurable covariances to keep tangent residuals small; if large-angle residuals occur they will either be gated out or yield small β (limited effect).

Library export and usage

The core tracking logic (PoseTrackManager) is built and exported as a shared library by this package so other packages can reuse the track management functionality without pulling in the ROS node.

CMake / ament usage

In a consuming CMake-based package (ament_cmake) you can link against the library like this:

find_package(pose_filtering REQUIRED)

add_executable(my_node src/my_node.cpp)

# Link to the exported library target (the package exports the target
# with the same name as the package: `pose_filtering`)
target_link_libraries(my_node PRIVATE pose_filtering)


The package installs its public headers under include/ so simply

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Package Dependencies

Deps Name
ament_cmake
rclcpp
rclcpp_components
geometry_msgs
tf2
tf2_ros
tf2_geometry_msgs
message_filters
vortex_utils
vortex_utils_ros
vortex_utils_ros_tf
vortex_filtering
vortex_msgs

System Dependencies

No direct system dependencies.

Dependant Packages

Name Deps
landmark_server

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged pose_filtering at Robotics Stack Exchange

No version for distro galactic showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/vortexntnu/vortex-auv.git
VCS Type git
VCS Version main
Last Updated 2026-03-26
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pose filtering and tracking package, with a C++ track manager and ROS 2 interface node.

Maintainers

  • jorgen

Authors

No additional authors.

pose_filtering

ROS 2 package providing pose-based multi-target tracking using an IPDA filter for position together with independent orientation logic.

This package transforms incoming pose-like messages into a common target frame, associates measurements to tracks using spatial and angular gating, maintains an IPDA filter per track for position estimation and existence management, and performs a separate orientation update by averaging measurement quaternions and applying spherical linear interpolation (slerp) to smoothly update the track orientation.

Features

  • Multi-target tracking using an IPDA (Integrated Probabilistic Data Association) filter for 3D position state estimation.
  • Separate orientation handling: angular gating, quaternion averaging and slerp-based smoothing so orientation updates remain numerically stable and physically meaningful.
  • TF2-aware subscriptions (message_filters + tf2 message filter) so incoming messages are automatically dropped until transform to the configured target frame is available.
  • Supports several ROS message inputs (see below) and publishes a geometry_msgs/PoseArray containing the current tracked poses.

Supported input messages

The node accepts the following message types as input measurements:

  • geometry_msgs/msg/PoseStamped
  • geometry_msgs/msg/PoseArray
  • geometry_msgs/msg/PoseWithCovarianceStamped
  • vortex_msgs/msg/LandmarkArray

The code uses a templated message type (PoseMsgT) and checks at compile-time which types are supported. Incoming measurements are transformed to the configured target_frame before being processed.

Outputs

  • geometry_msgs/msg/PoseArray — the current set of tracked poses in the configured target frame. Each Pose contains the track position and a quaternion orientation representing the track’s current orientation.
  • (DEBUG) vortex_msgs/msg/PoseEulerStamped topics with measurement-level and track-state-level pose messages when debug mode is enabled. Only publishes the first element of incoming measurements and stored tracks.

How the filtering works

Position (IPDA):

  • Each track runs a 3D IPDA filter instance (a Gaussian state: mean + covariance) where the motion model is a small constant-dynamics model and the sensor model maps state to direct position measurements.
  • IPDA takes care of measurement association probabilities, gating and existence management (confirmation / deletion thresholds). This provides robust data association for cluttered measurements and handles tracks appearing/disappearing over time.

Orientation (SO(3) PDAF):

Orientation is handled by a dedicated PDAF-style filter operating on the SO(3) manifold. Each track maintains:

  • a quaternion mean q (the track orientation), and
  • a small Gaussian error state in the 3D tangent space (so(3)) around that mean.

The log and exp maps are mathematically defined for all unit quaternions but the Kalman/PDAF linearization on the tangent space assumes small errors. The implementation gates measurements and uses configurable covariances to keep tangent residuals small; if large-angle residuals occur they will either be gated out or yield small β (limited effect).

Library export and usage

The core tracking logic (PoseTrackManager) is built and exported as a shared library by this package so other packages can reuse the track management functionality without pulling in the ROS node.

CMake / ament usage

In a consuming CMake-based package (ament_cmake) you can link against the library like this:

find_package(pose_filtering REQUIRED)

add_executable(my_node src/my_node.cpp)

# Link to the exported library target (the package exports the target
# with the same name as the package: `pose_filtering`)
target_link_libraries(my_node PRIVATE pose_filtering)


The package installs its public headers under include/ so simply

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Package Dependencies

Deps Name
ament_cmake
rclcpp
rclcpp_components
geometry_msgs
tf2
tf2_ros
tf2_geometry_msgs
message_filters
vortex_utils
vortex_utils_ros
vortex_utils_ros_tf
vortex_filtering
vortex_msgs

System Dependencies

No direct system dependencies.

Dependant Packages

Name Deps
landmark_server

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged pose_filtering at Robotics Stack Exchange

No version for distro iron showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/vortexntnu/vortex-auv.git
VCS Type git
VCS Version main
Last Updated 2026-03-26
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pose filtering and tracking package, with a C++ track manager and ROS 2 interface node.

Maintainers

  • jorgen

Authors

No additional authors.

pose_filtering

ROS 2 package providing pose-based multi-target tracking using an IPDA filter for position together with independent orientation logic.

This package transforms incoming pose-like messages into a common target frame, associates measurements to tracks using spatial and angular gating, maintains an IPDA filter per track for position estimation and existence management, and performs a separate orientation update by averaging measurement quaternions and applying spherical linear interpolation (slerp) to smoothly update the track orientation.

Features

  • Multi-target tracking using an IPDA (Integrated Probabilistic Data Association) filter for 3D position state estimation.
  • Separate orientation handling: angular gating, quaternion averaging and slerp-based smoothing so orientation updates remain numerically stable and physically meaningful.
  • TF2-aware subscriptions (message_filters + tf2 message filter) so incoming messages are automatically dropped until transform to the configured target frame is available.
  • Supports several ROS message inputs (see below) and publishes a geometry_msgs/PoseArray containing the current tracked poses.

Supported input messages

The node accepts the following message types as input measurements:

  • geometry_msgs/msg/PoseStamped
  • geometry_msgs/msg/PoseArray
  • geometry_msgs/msg/PoseWithCovarianceStamped
  • vortex_msgs/msg/LandmarkArray

The code uses a templated message type (PoseMsgT) and checks at compile-time which types are supported. Incoming measurements are transformed to the configured target_frame before being processed.

Outputs

  • geometry_msgs/msg/PoseArray — the current set of tracked poses in the configured target frame. Each Pose contains the track position and a quaternion orientation representing the track’s current orientation.
  • (DEBUG) vortex_msgs/msg/PoseEulerStamped topics with measurement-level and track-state-level pose messages when debug mode is enabled. Only publishes the first element of incoming measurements and stored tracks.

How the filtering works

Position (IPDA):

  • Each track runs a 3D IPDA filter instance (a Gaussian state: mean + covariance) where the motion model is a small constant-dynamics model and the sensor model maps state to direct position measurements.
  • IPDA takes care of measurement association probabilities, gating and existence management (confirmation / deletion thresholds). This provides robust data association for cluttered measurements and handles tracks appearing/disappearing over time.

Orientation (SO(3) PDAF):

Orientation is handled by a dedicated PDAF-style filter operating on the SO(3) manifold. Each track maintains:

  • a quaternion mean q (the track orientation), and
  • a small Gaussian error state in the 3D tangent space (so(3)) around that mean.

The log and exp maps are mathematically defined for all unit quaternions but the Kalman/PDAF linearization on the tangent space assumes small errors. The implementation gates measurements and uses configurable covariances to keep tangent residuals small; if large-angle residuals occur they will either be gated out or yield small β (limited effect).

Library export and usage

The core tracking logic (PoseTrackManager) is built and exported as a shared library by this package so other packages can reuse the track management functionality without pulling in the ROS node.

CMake / ament usage

In a consuming CMake-based package (ament_cmake) you can link against the library like this:

find_package(pose_filtering REQUIRED)

add_executable(my_node src/my_node.cpp)

# Link to the exported library target (the package exports the target
# with the same name as the package: `pose_filtering`)
target_link_libraries(my_node PRIVATE pose_filtering)


The package installs its public headers under include/ so simply

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Package Dependencies

Deps Name
ament_cmake
rclcpp
rclcpp_components
geometry_msgs
tf2
tf2_ros
tf2_geometry_msgs
message_filters
vortex_utils
vortex_utils_ros
vortex_utils_ros_tf
vortex_filtering
vortex_msgs

System Dependencies

No direct system dependencies.

Dependant Packages

Name Deps
landmark_server

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged pose_filtering at Robotics Stack Exchange

No version for distro melodic showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/vortexntnu/vortex-auv.git
VCS Type git
VCS Version main
Last Updated 2026-03-26
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pose filtering and tracking package, with a C++ track manager and ROS 2 interface node.

Maintainers

  • jorgen

Authors

No additional authors.

pose_filtering

ROS 2 package providing pose-based multi-target tracking using an IPDA filter for position together with independent orientation logic.

This package transforms incoming pose-like messages into a common target frame, associates measurements to tracks using spatial and angular gating, maintains an IPDA filter per track for position estimation and existence management, and performs a separate orientation update by averaging measurement quaternions and applying spherical linear interpolation (slerp) to smoothly update the track orientation.

Features

  • Multi-target tracking using an IPDA (Integrated Probabilistic Data Association) filter for 3D position state estimation.
  • Separate orientation handling: angular gating, quaternion averaging and slerp-based smoothing so orientation updates remain numerically stable and physically meaningful.
  • TF2-aware subscriptions (message_filters + tf2 message filter) so incoming messages are automatically dropped until transform to the configured target frame is available.
  • Supports several ROS message inputs (see below) and publishes a geometry_msgs/PoseArray containing the current tracked poses.

Supported input messages

The node accepts the following message types as input measurements:

  • geometry_msgs/msg/PoseStamped
  • geometry_msgs/msg/PoseArray
  • geometry_msgs/msg/PoseWithCovarianceStamped
  • vortex_msgs/msg/LandmarkArray

The code uses a templated message type (PoseMsgT) and checks at compile-time which types are supported. Incoming measurements are transformed to the configured target_frame before being processed.

Outputs

  • geometry_msgs/msg/PoseArray — the current set of tracked poses in the configured target frame. Each Pose contains the track position and a quaternion orientation representing the track’s current orientation.
  • (DEBUG) vortex_msgs/msg/PoseEulerStamped topics with measurement-level and track-state-level pose messages when debug mode is enabled. Only publishes the first element of incoming measurements and stored tracks.

How the filtering works

Position (IPDA):

  • Each track runs a 3D IPDA filter instance (a Gaussian state: mean + covariance) where the motion model is a small constant-dynamics model and the sensor model maps state to direct position measurements.
  • IPDA takes care of measurement association probabilities, gating and existence management (confirmation / deletion thresholds). This provides robust data association for cluttered measurements and handles tracks appearing/disappearing over time.

Orientation (SO(3) PDAF):

Orientation is handled by a dedicated PDAF-style filter operating on the SO(3) manifold. Each track maintains:

  • a quaternion mean q (the track orientation), and
  • a small Gaussian error state in the 3D tangent space (so(3)) around that mean.

The log and exp maps are mathematically defined for all unit quaternions but the Kalman/PDAF linearization on the tangent space assumes small errors. The implementation gates measurements and uses configurable covariances to keep tangent residuals small; if large-angle residuals occur they will either be gated out or yield small β (limited effect).

Library export and usage

The core tracking logic (PoseTrackManager) is built and exported as a shared library by this package so other packages can reuse the track management functionality without pulling in the ROS node.

CMake / ament usage

In a consuming CMake-based package (ament_cmake) you can link against the library like this:

find_package(pose_filtering REQUIRED)

add_executable(my_node src/my_node.cpp)

# Link to the exported library target (the package exports the target
# with the same name as the package: `pose_filtering`)
target_link_libraries(my_node PRIVATE pose_filtering)


The package installs its public headers under include/ so simply

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Package Dependencies

Deps Name
ament_cmake
rclcpp
rclcpp_components
geometry_msgs
tf2
tf2_ros
tf2_geometry_msgs
message_filters
vortex_utils
vortex_utils_ros
vortex_utils_ros_tf
vortex_filtering
vortex_msgs

System Dependencies

No direct system dependencies.

Dependant Packages

Name Deps
landmark_server

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged pose_filtering at Robotics Stack Exchange

No version for distro noetic showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/vortexntnu/vortex-auv.git
VCS Type git
VCS Version main
Last Updated 2026-03-26
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pose filtering and tracking package, with a C++ track manager and ROS 2 interface node.

Maintainers

  • jorgen

Authors

No additional authors.

pose_filtering

ROS 2 package providing pose-based multi-target tracking using an IPDA filter for position together with independent orientation logic.

This package transforms incoming pose-like messages into a common target frame, associates measurements to tracks using spatial and angular gating, maintains an IPDA filter per track for position estimation and existence management, and performs a separate orientation update by averaging measurement quaternions and applying spherical linear interpolation (slerp) to smoothly update the track orientation.

Features

  • Multi-target tracking using an IPDA (Integrated Probabilistic Data Association) filter for 3D position state estimation.
  • Separate orientation handling: angular gating, quaternion averaging and slerp-based smoothing so orientation updates remain numerically stable and physically meaningful.
  • TF2-aware subscriptions (message_filters + tf2 message filter) so incoming messages are automatically dropped until transform to the configured target frame is available.
  • Supports several ROS message inputs (see below) and publishes a geometry_msgs/PoseArray containing the current tracked poses.

Supported input messages

The node accepts the following message types as input measurements:

  • geometry_msgs/msg/PoseStamped
  • geometry_msgs/msg/PoseArray
  • geometry_msgs/msg/PoseWithCovarianceStamped
  • vortex_msgs/msg/LandmarkArray

The code uses a templated message type (PoseMsgT) and checks at compile-time which types are supported. Incoming measurements are transformed to the configured target_frame before being processed.

Outputs

  • geometry_msgs/msg/PoseArray — the current set of tracked poses in the configured target frame. Each Pose contains the track position and a quaternion orientation representing the track’s current orientation.
  • (DEBUG) vortex_msgs/msg/PoseEulerStamped topics with measurement-level and track-state-level pose messages when debug mode is enabled. Only publishes the first element of incoming measurements and stored tracks.

How the filtering works

Position (IPDA):

  • Each track runs a 3D IPDA filter instance (a Gaussian state: mean + covariance) where the motion model is a small constant-dynamics model and the sensor model maps state to direct position measurements.
  • IPDA takes care of measurement association probabilities, gating and existence management (confirmation / deletion thresholds). This provides robust data association for cluttered measurements and handles tracks appearing/disappearing over time.

Orientation (SO(3) PDAF):

Orientation is handled by a dedicated PDAF-style filter operating on the SO(3) manifold. Each track maintains:

  • a quaternion mean q (the track orientation), and
  • a small Gaussian error state in the 3D tangent space (so(3)) around that mean.

The log and exp maps are mathematically defined for all unit quaternions but the Kalman/PDAF linearization on the tangent space assumes small errors. The implementation gates measurements and uses configurable covariances to keep tangent residuals small; if large-angle residuals occur they will either be gated out or yield small β (limited effect).

Library export and usage

The core tracking logic (PoseTrackManager) is built and exported as a shared library by this package so other packages can reuse the track management functionality without pulling in the ROS node.

CMake / ament usage

In a consuming CMake-based package (ament_cmake) you can link against the library like this:

find_package(pose_filtering REQUIRED)

add_executable(my_node src/my_node.cpp)

# Link to the exported library target (the package exports the target
# with the same name as the package: `pose_filtering`)
target_link_libraries(my_node PRIVATE pose_filtering)


The package installs its public headers under include/ so simply

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Package Dependencies

Deps Name
ament_cmake
rclcpp
rclcpp_components
geometry_msgs
tf2
tf2_ros
tf2_geometry_msgs
message_filters
vortex_utils
vortex_utils_ros
vortex_utils_ros_tf
vortex_filtering
vortex_msgs

System Dependencies

No direct system dependencies.

Dependant Packages

Name Deps
landmark_server

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged pose_filtering at Robotics Stack Exchange