Description
Maybe there won't be any people answering this question since OKVIS is old but I am confused about the operation in the OKVIS jacobian recently.
In all of the XXError.cpp
, the OKVIS inheritance the Ceres Solver's Evaluate
function, which is used to provide the error
and jacobian
definition. I use ReprojectionError.hpp
for example. In the code EvaluateWithMinimalJacobians
function, it has
Eigen::Matrix<double, 2, 6, Eigen::RowMajor> J0_minimal;
...
// pseudo inverse of the local parametrization Jacobian:
Eigen::Matrix<double, 6, 7, Eigen::RowMajor> J_lift;
PoseLocalParameterization::liftJacobian(parameters[0], J_lift.data());
// hallucinate Jacobian w.r.t. state
Eigen::Map<Eigen::Matrix<double, 2, 7, Eigen::RowMajor> > J0(
jacobians[0]);
J0 = J0_minimal * J_lift;
...
Let me assume the reprojection error is J0_minimal
definition, it is the jacobian of the error w.r.t the minimal representation, i.e., the jacobian to the Lie Algebra J0_minimal
has 6 DOF which are 3 (translation) + 3 (Lie algebra) shows that. But finally, OKVIS uses J_lift
to move the jacobian from minimal representation to the over-parameterized space, which is 3 (translation) + 4 (quaternion).
I don't understand why OKVIS needs to move the jacobian from the minimal representation to the overparameterized representation. Because by using the Jacobian in minimal representation, we can update the incremental
By using J_lift, then J_0 is back to overparameterized space, then the incremental