Skip to content

Clarification needed. Left box plus used in Right Invariance filter. #11

Description

@slovak194

Dear, @joansola and @artivis

I'm looking into the implementation of the UKF on manifold from this repo.
I've just noticed, that in the case of the Right Invariance sigmas and increments are added to the current state using the left box plus operator. In which frame P (covariance) is expressed then? Local tangent space at X, or global at the group origin?
I expected that with Right Invariance increments and covariance are expressed in the local tangent space at X and thus right box plus operator shall be used.

// sigma points on manifold
State s_j_p, s_j_m;
Eigen::Matrix<Scalar, StateSize, StateSize*2> xis_new;
for (int i = 0; i < StateSize; ++i) {
if constexpr (Iv == Invariance::Right) {
s_j_p = MapTangent(xis.col(i).data()) + x;
s_j_m = Tangent(-xis.col(i)) + x;

At the same time, in the example from manif repo, the description matches the operator used to add sigma increments to the state.

*  The estimation error dx and its covariance P are expressed
*  in the tangent space at X.

https://github.com/artivis/manif/blob/805a0b2adf9435dd658fdad5606c342db4d889e8/examples/se2_localization_ukfm.cpp#L311

        // sigma points on manifold
        for (int i = 0; i < DoF; ++i)
        {
          s_j_p = X + manif::SE2Tangentd( xis.col(i));
          s_j_m = X + manif::SE2Tangentd(-xis.col(i));

          xis_new.col(i) = (X_new.lminus(s_j_p + u_est)).coeffs();
          xis_new.col(i + DoF) = (X_new.lminus(s_j_m + u_est)).coeffs();
        }

Thank you in advance for your answer!

Best regards,
Alex

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions