Hi Sameer,
Thanks for the response.
While I get it in general terms I think I am missing an implementation detail probably, that I hope you can shed some light on.
On the retraction part, I get it, we need to find the
residual = apriori_mean_quat - cur_iter_values
but in tangent space which is fairly easy.
Using the Sophus library it will be something along the lines below, while for ceres it will be a something similar, a combination of conjugate quaternion, ceres::QuaternionProduct followed by ceres::QuaternionToAngleAxis.
Eigen::Map<Sophus::SO3d const> const apriori(
apriori_mean_quat.coeffs().data());
Eigen::Map<Sophus::SO3d> cur_vals(cur_iter_values.coeffs().data());
Sophus::SO3d delta_q =
apriori.inverse() * cur_vals;
Eigen::Vector3d delta_tangent = delta_q.log();
Am I correct in assuming that for the covariance we just need the covariance propagation to the tangent space, as in
Cov_angleAxis = d_AngleAxis / d_quaternion * Cov_quat * (
d_AngleAxis / d_quaternion).transpose()
3x3 3 x 4 4x4 4x3
[
quat.x ]
whre AngleAxis = 2 * atan(n / quat.w) / n * [
quat.y ]
[
quat.z ]
with n = sqrt(
quat.x^2 +
quat.
y^2 +
quat.
z^)
Or is it something else ?
As a simple test I am using a simple 7 DoF transformation between generated points where I create an Euler covariance whereby the rotation of X axis is known, and thus has a sigma of 10e-6 (variance of 1e-12) while the other two are unknown so I just set them to 1 rad so they are free to adjust.
1 is sort of arbitrary, it could as well be 0.5. So yes in this case I don't have any covariances but this test is easier to deal with as a starting point. I expect that the rotation value around X will be minimal after the adjustment (and this is the case with the Euler angles).
In the local parameterization case I convert the Euler covariance to Quaternion and then to Axis angle. Looking at the variances, the Euler one makes sense to me small variance --> large stifness matrix which leads to really small corrections to the known value.
Now looking at the converted covariances (it is a full covariance matrix after conversion) either quaternion or axis angle nothing is really that small to "constrain the adjustment" so even the value for the small sigma is adjusted.
Any thoughts ?