se2lam
se2lam copied to clipboard
odometry term using covariance instead of information matrix
In track.cpp, you are defining the odometry constraint's noise,
Matrix3d Ak = Matrix3d::Identity();
Matrix3d Bk = Matrix3d::Identity();
Ak.block<2, 1>(0, 2) = Phi_ik * Vector2d(-odork[1], odork[0]);
Bk.block<2, 2>(0, 0) = Phi_ik;
Eigen::Map<Matrix3d, RowMajor> Sigmak(preSE2.cov);
Matrix3d Sigma_vk = Matrix3d::Identity();
Sigma_vk(0, 0) = (Config::ODO_X_NOISE * Config::ODO_X_NOISE);
Sigma_vk(1, 1) = (Config::ODO_Y_NOISE * Config::ODO_Y_NOISE);
Sigma_vk(2, 2) = (Config::ODO_T_NOISE * Config::ODO_T_NOISE);
Matrix3d Sigma_k_1 = Ak * Sigmak * Ak.transpose() + Bk * Sigma_vk * Bk.transpose();
Sigmak = Sigma_k_1;
and when loading the graph into g2o at map.cpp, you used covariance instead of information matrix
Eigen::Map<Eigen::Matrix3d, RowMajor> info(meas.cov);
addEdgeSE2(optimizer, Vector3D(meas.meas), i, id1, info);
In my opinion, the following changes should be made
Sigmak = Sigma_k_1.inverse();