Skip to content

WNOA CT-GP Bindings and Example#2523

Open
holmesco wants to merge 12 commits intoborglab:developfrom
utiasASRL:ct-gp-pr/bind-and-exmpl
Open

WNOA CT-GP Bindings and Example#2523
holmesco wants to merge 12 commits intoborglab:developfrom
utiasASRL:ct-gp-pr/bind-and-exmpl

Conversation

@holmesco
Copy link
Copy Markdown
Contributor

@holmesco holmesco commented May 9, 2026

Changes

  • Adjusts nonlinear.i for the WNOA functionality. Adds new tests for python version of interface.
  • Adds a simple SE3 example as a python notebook and cpp file. Example is based on the simple example from the corresponding paper.
  • Removes assertions on GTSAM_USE_EXPMAP since fix(geometry): implement Cayley chart Jacobians for Rot3 #2511 fixes Cayley Map Jacobians

Tests

  • Tested that new examples perform as expected
  • reran make -j6 check.nonlinear
  • Ran python tests pytest test_WnoaFactors.py

In progress

Still need to add link to arXiv version of paper when it is available (just submitted)

Comments

New python notebook adds dependency on pyvista.

@holmesco holmesco marked this pull request as ready for review May 9, 2026 19:52
Copilot AI review requested due to automatic review settings May 9, 2026 19:52
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds Python-facing support and examples for WNOA continuous-time Gaussian-process interpolation (including covariance output), and removes prior EXPMAP-only gating now that Cayley Jacobians are available.

Changes:

  • Extend nonlinear Python bindings to expose StateData, WNOA motion/interpolation factors, WnoaFactorGraph, and convenience helpers (including a values+covariance return).
  • Add Python unit tests for the new WNOA interfaces and graph/value interpolation utilities.
  • Add an SE(3) WNOA example (C++ example file + Python plotting helpers).

Reviewed changes

Copilot reviewed 11 out of 12 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
python/gtsam/tests/test_WnoaFactors.py New Python tests covering StateData, WNOA motion/interp factors, graph interpolation, and value/covariance updates.
python/gtsam/examples/GaussianProcessWnoaInterpolationSE3Helpers.py New plotting/visualization helper utilities for the SE(3) WNOA interpolation notebook/example.
gtsam/nonlinear/WnoaInterpolator.h Introduces a public covariance-map type alias and updates API to use it.
gtsam/nonlinear/WnoaInterpolator.cpp Updates implementation signatures to match the new covariance-map alias.
gtsam/nonlinear/WnoaInterpFactor.h Removes EXPMAP-only static assertion, allowing Cayley mode usage.
gtsam/nonlinear/WnoaFactorGraph.h Adds Python-friendly helper wrappers and adds an API returning interpolated covariances.
gtsam/nonlinear/WnoaFactorGraph.cpp Enables Pose3 instantiation unconditionally (removes GTSAM_ROT3_EXPMAP guard).
gtsam/nonlinear/values.i Adds Vector6 specializations for Values::{insert,update,insert_or_assign} to support Vector6-valued states in Python.
gtsam/nonlinear/tests/testWnoaInterpFactor.cpp Expands SE(3) coverage without GTSAM_ROT3_EXPMAP gating and adds covariance-map validation tests.
gtsam/nonlinear/nonlinear.i Extends bindings for WNOA types/helpers and adjusts wrapper class hierarchy for WnoaFactorGraph.
examples/GaussianProcessWnoaSE3Example.cpp New C++ SE(3) example demonstrating WNOA priors, wrapping factors, and interpolation with covariances.

Comment on lines +338 to +342
const std::set<StateData>& interp_states, Vector q_psd_diag,
bool fixed_noise = false) {
return interpolateFactorGraph<PoseType, WnoaFactorGraph<PoseType>>(
graph, estimated_states, interp_states, q_psd_diag);
}
Comment on lines +715 to +721
template <POSE = {gtsam::Point1, gtsam::Point2, gtsam::Point3, gtsam::Pose2,
gtsam::Pose3}>
gtsam::WnoaFactorGraph<Pose> interpolateWnoaFactorGraph(
const gtsam::NonlinearFactorGraph& graph,
const std::set<gtsam::StateData>& estimated_states,
const std::set<gtsam::StateData>& interp_states, gtsam::Vector q_psd_diag,
bool fixed_noise = false);
Comment thread python/gtsam/examples/GaussianProcessWnoaInterpolationSE3Helpers.py
Comment on lines +17 to +22
from gtsam.utils.numerical_derivative import (
numericalDerivative41,
numericalDerivative42,
numericalDerivative43,
numericalDerivative44,
)

/**
* @file GaussianProcessWnoaSE3Example.cpp
* @brief Guassian Process interpolation example on SE(3) with WNOA factors.
p3,
_p4,
v0,
new_graph,
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Formatting

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.

3 participants