Closed cy-goh closed 3 months ago
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();
In track.cpp, you are defining the odometry constraint's noise,
and when loading the graph into g2o at map.cpp, you used covariance instead of information matrix
In my opinion, the following changes should be made
Sigmak = Sigma_k_1.inverse();