Continuous-Time Gaussian Process Factors (Factors and Interpolation)#2411
Continuous-Time Gaussian Process Factors (Factors and Interpolation)#2411dellaert merged 32 commits intoborglab:developfrom
Conversation
…d header to StateData header file.
There was a problem hiding this comment.
Pull request overview
This PR introduces a comprehensive continuous-time Gaussian Process (GP) framework for GTSAM, focusing on White-Noise-on-Acceleration (WNOA) motion priors. The implementation enables GP-based estimation with interpolation support for both vector spaces (Point1/2/3) and Lie groups (Pose2/3).
Changes:
- Introduces Point1 geometry type for 1D testing and examples
- Implements WNOA motion prior factors for continuous-time state estimation
- Adds interpolation infrastructure (Interpolator class) with mean and covariance propagation
- Provides wrapper factors (WNOAInterpFactor) to interpolate measurements at non-estimated states
- Includes comprehensive unit tests covering vector spaces and Lie groups
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 13 comments.
Show a summary per file
| File | Description |
|---|---|
| gtsam/nonlinear/WNOAStateData.h | Lightweight struct for timestamped pose/velocity state identifiers |
| gtsam/nonlinear/WNOAInterpolator.h/.cpp | Core interpolation engine implementing WNOA-based pose/velocity interpolation |
| gtsam/nonlinear/WNOAFactor.h | WNOA motion prior factor connecting successive states |
| gtsam/nonlinear/WNOAInterpFactor.h | Wrapper factor for measurement interpolation with graph conversion utilities |
| gtsam/geometry/Point1.h/.cpp | Simple 1D point type for testing and examples |
| gtsam/nonlinear/tests/testWNOAFactor.cpp | Unit tests for WNOA motion factors |
| gtsam/nonlinear/tests/testWNOAInterpFactor.cpp | Unit tests for interpolation wrapper factors |
| gtsam/nonlinear/tests/testWNOAInterpolator.cpp | Unit tests for interpolator functionality |
| gtsam/geometry/tests/testPoint1.cpp | Unit tests for Point1 geometry |
|
Awesome! Copilot had some good comments, and I started the CI. I will look at this when both of these things are green :-). I might get to this during the week, otherwise during the weekend. I have a lot of teaching stuff. |
… when looking through keys (to log(N))
…rdered map to store values for robust and deterministic accessing
|
I see CI fails. Please note that your code should only use boost for serialization, and this use should be guarded. Please inspect other headers for how to do this. For everything else we switch to c++17 std::shared etc. |
|
Same question: ready for my detailed review? |
|
Seems CI fails on an unused variable. We run with no warnings :-) Do a |
|
I don't think |
|
Fixed naming conventions in files. @dellaert, should be ready for your review! |
dellaert
left a comment
There was a problem hiding this comment.
Awesome!
First batch of comments. Many comments apply to all new factors, so do one more round then re-request?
|
@dellaert, it seems like our tests are failing when the Cayley map is used for rotations. Specifically, when we define a between factor, the I can work around this in our tests, but it seems like a fundamental issue. Are there other error functions or factors that do not support Jacobians? |
This is probably because you are calling Retract somewhere? You could explicitly call expmap or Expmap. If that’s not possible, tell me where to look :-) |
|
Would love to move this along- as we are preparing to release 4.3. Was my last comment informative? |
|
@holmesco I checked out your branch and made a PR against it on your fork. It was mainly naming conventions and some tightening of the APIs, especially when many arguments were passed. So I created this new struct, StateJacobians that makes that a little bit cleaner and eliminates a lot of boilerplate code. Let me know what you think. |
WNOA interpolator cleanup: 5 review commits
|
@holmesco I added one more PR on your fork, eliminating some code duplication. There is two more issues to take care of on your end:
|
|
Almost there :-) |
…ests [skip ci] WNOAInterpFactor helper cleanup and overload coverage
…ow explicitly fetching signatures from base class.
…he heap to avoid problematic copy constructor call.
dellaert
left a comment
There was a problem hiding this comment.
Awesome. If CI passes I’ll merge.
|
Very weird that tests fail on windows. |
…using issues when building in Windows environment. [skip ci]
|
Test failure was due to global variable definitions in the test files (bad practice, I know). Added test fixtures and proper scoping. Windows tests are now passing locally. |
|
@holmesco I noticed you skipped C.I. Could you add a dummy commits to re-run the CI? Maybe format a file with clang-format Google's style. If that is not the case yet for that test file ;-) If you have not formatted with Clang format in general, reformat all the change files in this PR :-). |
Woops, should run now. Also we have been formatting with google's style. |
|
Looks like the windows CI had a network issue when downloading boost. Can we retrigger the CI? |
|
Done and merged! |
Summary
This PR introduces the core factors that can be used for continuous-time, Gaussian-process estimation in GTSAM. Note that we restrict our focus to White-Noise-on-Acceleration (WNOA) motion priors, though we have kept the framework as general as possible for expansion to other motion priors in the future.
In particular, this PR introduces the following main features:
Point1(used for simplified problems and testing).Review
Below is a brief file description. The ordering of files also represents our suggested ordering for file review.
Testing
Introduced functionality has been extensively unit tested. Our unit tests were restricted to Vector space and Lie Group variables (
Point1,Point2,Point3,Pose2,Pose3)Context
This PR is the first (and largest) of two PRs that merge continuous-time gaussian process factors into GTSAM: