ov_init::State_JPLQuatLocal class

JPL quaternion CERES state parameterization.

Contents

Public functions

auto Plus(const double* x, const double* delta, double* x_plus_delta) const -> bool override
State update function for a JPL quaternion representation.
auto ComputeJacobian(const double* x, double* jacobian) const -> bool override
Computes the jacobian in respect to the local parameterization.

Function documentation

bool ov_init::State_JPLQuatLocal::Plus(const double* x, const double* delta, double* x_plus_delta) const override

State update function for a JPL quaternion representation.

Implements update operation by left-multiplying the current quaternion with a quaternion built from a small axis-angle perturbation.

\[ \bar{q}=norm\Big(\begin{bmatrix} 0.5*\mathbf{\theta_{dx}} \\ 1 \end{bmatrix}\Big) \hat{\bar{q}} \]

bool ov_init::State_JPLQuatLocal::ComputeJacobian(const double* x, double* jacobian) const override

Computes the jacobian in respect to the local parameterization.

This essentially "tricks" ceres. Instead of doing what ceres wants: dr/dlocal= dr/dglobal * dglobal/dlocal

We instead directly do: dr/dlocal= [ dr/dlocal, 0] * [I; 0]= dr/dlocal. Therefore we here define dglobal/dlocal= [I; 0]