removed incorrect prints
This commit is contained in:
parent
5f6bcd1784
commit
9b4bf12846
@ -329,7 +329,6 @@ void Feature::RhoJacobian(const Eigen::Isometry3d& T_c0_ci,
|
|||||||
double& w) const
|
double& w) const
|
||||||
{
|
{
|
||||||
|
|
||||||
// Compute hi1, hi2, and hi3 as Equation (37).
|
|
||||||
const double& rho = x;
|
const double& rho = x;
|
||||||
|
|
||||||
Eigen::Vector3d h = T_c0_ci.linear()*
|
Eigen::Vector3d h = T_c0_ci.linear()*
|
||||||
@ -1138,10 +1137,6 @@ bool Feature::initializePosition(const CamStateServer& cam_states) {
|
|||||||
|
|
||||||
// Organize camera poses and feature observations properly.
|
// Organize camera poses and feature observations properly.
|
||||||
|
|
||||||
|
|
||||||
initializeRho(cam_states);
|
|
||||||
std::cout << "init rho is: " << anchor_rho << std::endl;
|
|
||||||
|
|
||||||
std::vector<Eigen::Isometry3d,
|
std::vector<Eigen::Isometry3d,
|
||||||
Eigen::aligned_allocator<Eigen::Isometry3d> > cam_poses(0);
|
Eigen::aligned_allocator<Eigen::Isometry3d> > cam_poses(0);
|
||||||
std::vector<Eigen::Vector2d,
|
std::vector<Eigen::Vector2d,
|
||||||
|
@ -226,6 +226,8 @@ class MsckfVio {
|
|||||||
void removeLostFeatures();
|
void removeLostFeatures();
|
||||||
void findRedundantCamStates(
|
void findRedundantCamStates(
|
||||||
std::vector<StateIDType>& rm_cam_state_ids);
|
std::vector<StateIDType>& rm_cam_state_ids);
|
||||||
|
|
||||||
|
void pruneLastCamStateBuffer();
|
||||||
void pruneCamStateBuffer();
|
void pruneCamStateBuffer();
|
||||||
// Reset the system online if the uncertainty is too large.
|
// Reset the system online if the uncertainty is too large.
|
||||||
void onlineReset();
|
void onlineReset();
|
||||||
|
@ -475,7 +475,7 @@ void MsckfVio::imageCallback(
|
|||||||
ros::Time::now()-start_time).toSec();
|
ros::Time::now()-start_time).toSec();
|
||||||
|
|
||||||
start_time = ros::Time::now();
|
start_time = ros::Time::now();
|
||||||
pruneCamStateBuffer();
|
pruneLastCamStateBuffer();
|
||||||
double prune_cam_states_time = (
|
double prune_cam_states_time = (
|
||||||
ros::Time::now()-start_time).toSec();
|
ros::Time::now()-start_time).toSec();
|
||||||
|
|
||||||
@ -1360,31 +1360,13 @@ void MsckfVio::PhotometricMeasurementJacobian(
|
|||||||
H_plj = dI_dhj * dh_dXplj; // 1 x 6
|
H_plj = dI_dhj * dh_dXplj; // 1 x 6
|
||||||
H_pAj = dI_dhj * dh_dGpij * dGpj_XpAj; // 1 x 6
|
H_pAj = dI_dhj * dh_dGpij * dGpj_XpAj; // 1 x 6
|
||||||
|
|
||||||
/*
|
|
||||||
cout << endl;
|
|
||||||
std::cout << H_plj << endl;
|
|
||||||
cout << r_photo.segment(count, 1) << endl;
|
|
||||||
std::cout << H_plj.colPivHouseholderQr().solve(r_photo.segment(count, 1)) << std::endl;
|
|
||||||
*/
|
|
||||||
H_rho.block<1, 1>(count, 0) = H_rhoj;
|
H_rho.block<1, 1>(count, 0) = H_rhoj;
|
||||||
H_pl.block<1, 6>(count, 0) = H_plj;
|
H_pl.block<1, 6>(count, 0) = H_plj;
|
||||||
H_pA.block<1, 6>(count, 0) = H_pAj;
|
H_pA.block<1, 6>(count, 0) = H_pAj;
|
||||||
|
|
||||||
//cout << "H_pl\n" << H_plj << endl;
|
|
||||||
|
|
||||||
//cout << "H_pA\n" << H_pAj << endl;
|
|
||||||
|
|
||||||
//cout << "H_rho\n" << H_rhoj << endl;
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
std::cout << "\n\n frame change through patch" << std::endl;
|
|
||||||
std::cout << H_pl << std::endl;
|
|
||||||
std::cout << r_photo << std::endl;
|
|
||||||
std::cout << endl;
|
|
||||||
std::cout << H_pl.colPivHouseholderQr().solve(r_photo) << std::endl;
|
|
||||||
*/
|
|
||||||
|
|
||||||
MatrixXd H_xl = MatrixXd::Zero(N*N, 21+state_server.cam_states.size()*7);
|
MatrixXd H_xl = MatrixXd::Zero(N*N, 21+state_server.cam_states.size()*7);
|
||||||
MatrixXd H_yl = MatrixXd::Zero(N*N, N*N+state_server.cam_states.size()+1);
|
MatrixXd H_yl = MatrixXd::Zero(N*N, N*N+state_server.cam_states.size()+1);
|
||||||
@ -1426,7 +1408,7 @@ void MsckfVio::PhotometricMeasurementJacobian(
|
|||||||
if(PRINTIMAGES)
|
if(PRINTIMAGES)
|
||||||
{
|
{
|
||||||
feature.MarkerGeneration(marker_pub, state_server.cam_states);
|
feature.MarkerGeneration(marker_pub, state_server.cam_states);
|
||||||
//feature.VisualizePatch(cam_state, cam_state_id, cam0, r_photo, ss, gradientVector, residualVector);
|
feature.VisualizePatch(cam_state, cam_state_id, cam0, r_photo, ss, gradientVector, residualVector);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -1531,8 +1513,9 @@ void MsckfVio::PhotometricFeatureJacobian(
|
|||||||
ofstream myfile;
|
ofstream myfile;
|
||||||
myfile.open ("/home/raphael/dev/MSCKF_ws/log.txt");
|
myfile.open ("/home/raphael/dev/MSCKF_ws/log.txt");
|
||||||
myfile << "Hxi\n" << H_xi << "ri\n" << r_i << "Hyi\n" << H_yi << endl;
|
myfile << "Hxi\n" << H_xi << "ri\n" << r_i << "Hyi\n" << H_yi << endl;
|
||||||
myfile << "Hx\n" << H_x << "r\n" << r << "from residual estimated error state: " << H_x.colPivHouseholderQr().solve(r) << endl;
|
myfile << "kernel\n" << A_null_space << endl;
|
||||||
myfile.close();
|
myfile.close();
|
||||||
|
myfile << "Hx\n" << H_x << "r\n" << r << "from residual estimated error state: " << H_x.colPivHouseholderQr().solve(r) << endl;
|
||||||
cout << "---------- LOGGED -------- " << endl;
|
cout << "---------- LOGGED -------- " << endl;
|
||||||
}
|
}
|
||||||
if(PRINTIMAGES)
|
if(PRINTIMAGES)
|
||||||
@ -1860,7 +1843,7 @@ void MsckfVio::removeLostFeatures() {
|
|||||||
invalid_feature_ids.push_back(feature.id);
|
invalid_feature_ids.push_back(feature.id);
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
if(!feature.initializePosition(state_server.cam_states)) {
|
if(!feature.initializeRho(state_server.cam_states)) {
|
||||||
invalid_feature_ids.push_back(feature.id);
|
invalid_feature_ids.push_back(feature.id);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1989,6 +1972,143 @@ void MsckfVio::findRedundantCamStates(vector<StateIDType>& rm_cam_state_ids) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MsckfVio::pruneLastCamStateBuffer()
|
||||||
|
{
|
||||||
|
if (state_server.cam_states.size() < max_cam_state_size)
|
||||||
|
return;
|
||||||
|
|
||||||
|
auto rm_cam_state_id = state_server.cam_states.begin()->first;
|
||||||
|
|
||||||
|
// Set the size of the Jacobian matrix.
|
||||||
|
int jacobian_row_size = 0;
|
||||||
|
int augmentationSize = 6;
|
||||||
|
if(PHOTOMETRIC)
|
||||||
|
augmentationSize = 7;
|
||||||
|
|
||||||
|
//initialize all the features which are going to be removed
|
||||||
|
for (auto& item : map_server) {
|
||||||
|
auto& feature = item.second;
|
||||||
|
|
||||||
|
// check if feature is involved, if not continue
|
||||||
|
if (feature.observations.find(rm_cam_state_id) ==
|
||||||
|
feature.observations.end())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
if (!feature.is_initialized) {
|
||||||
|
|
||||||
|
// Check if the feature can be initialized
|
||||||
|
if (!feature.checkMotion(state_server.cam_states)) {
|
||||||
|
|
||||||
|
// remove any features that can't be initialized
|
||||||
|
feature.observations.erase(rm_cam_state_id);
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
if(!feature.initializeRho(state_server.cam_states)) {
|
||||||
|
feature.observations.erase(rm_cam_state_id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!feature.is_anchored)
|
||||||
|
{
|
||||||
|
if(!feature.initializeAnchor(cam0, N))
|
||||||
|
{
|
||||||
|
feature.observations.erase(rm_cam_state_id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(PHOTOMETRIC)
|
||||||
|
//just use max. size, as gets shrunken down after anyway
|
||||||
|
jacobian_row_size += N*N*feature.observations.size();
|
||||||
|
else
|
||||||
|
jacobian_row_size += 4*feature.observations.size() - 3;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
MatrixXd H_xj;
|
||||||
|
VectorXd r_j;
|
||||||
|
MatrixXd H_x = MatrixXd::Zero(jacobian_row_size, 21+augmentationSize*state_server.cam_states.size());
|
||||||
|
VectorXd r = VectorXd::Zero(jacobian_row_size);
|
||||||
|
int stack_cntr = 0;
|
||||||
|
|
||||||
|
for (auto& item : map_server) {
|
||||||
|
auto& feature = item.second;
|
||||||
|
|
||||||
|
// check if feature is involved, if not continue
|
||||||
|
if (feature.observations.find(rm_cam_state_id) ==
|
||||||
|
feature.observations.end())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
vector<StateIDType> involved_cam_state_ids(0);
|
||||||
|
for (const auto& cam_state : state_server.cam_states)
|
||||||
|
involved_cam_state_ids.push_back(cam_state.first);
|
||||||
|
|
||||||
|
if(PHOTOMETRIC)
|
||||||
|
PhotometricFeatureJacobian(feature.id, involved_cam_state_ids, H_xj, r_j);
|
||||||
|
else
|
||||||
|
featureJacobian(feature.id, involved_cam_state_ids, H_xj, r_j);
|
||||||
|
|
||||||
|
if (gatingTest(H_xj, r_j, r_j.size())) {// involved_cam_state_ids.size())) {
|
||||||
|
H_x.block(stack_cntr, 0, H_xj.rows(), H_xj.cols()) = H_xj;
|
||||||
|
r.segment(stack_cntr, r_j.rows()) = r_j;
|
||||||
|
stack_cntr += H_xj.rows();
|
||||||
|
cout << "passed" << endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cout << "rejected" << endl;
|
||||||
|
}
|
||||||
|
for (const auto& cam_id : involved_cam_state_ids)
|
||||||
|
feature.observations.erase(cam_id);
|
||||||
|
}
|
||||||
|
H_x.conservativeResize(stack_cntr, H_x.cols());
|
||||||
|
r.conservativeResize(stack_cntr);
|
||||||
|
|
||||||
|
// Perform measurement update.
|
||||||
|
measurementUpdate(H_x, r);
|
||||||
|
|
||||||
|
//reduction
|
||||||
|
int cam_sequence = std::distance(state_server.cam_states.begin(),
|
||||||
|
state_server.cam_states.find(rm_cam_state_id));
|
||||||
|
int cam_state_start = 21 + augmentationSize*cam_sequence;
|
||||||
|
int cam_state_end = cam_state_start + augmentationSize;
|
||||||
|
|
||||||
|
|
||||||
|
// Remove the corresponding rows and columns in the state
|
||||||
|
// covariance matrix.
|
||||||
|
if (cam_state_end < state_server.state_cov.rows()) {
|
||||||
|
state_server.state_cov.block(cam_state_start, 0,
|
||||||
|
state_server.state_cov.rows()-cam_state_end,
|
||||||
|
state_server.state_cov.cols()) =
|
||||||
|
state_server.state_cov.block(cam_state_end, 0,
|
||||||
|
state_server.state_cov.rows()-cam_state_end,
|
||||||
|
state_server.state_cov.cols());
|
||||||
|
|
||||||
|
state_server.state_cov.block(0, cam_state_start,
|
||||||
|
state_server.state_cov.rows(),
|
||||||
|
state_server.state_cov.cols()-cam_state_end) =
|
||||||
|
state_server.state_cov.block(0, cam_state_end,
|
||||||
|
state_server.state_cov.rows(),
|
||||||
|
state_server.state_cov.cols()-cam_state_end);
|
||||||
|
|
||||||
|
state_server.state_cov.conservativeResize(
|
||||||
|
state_server.state_cov.rows()-augmentationSize, state_server.state_cov.cols()-augmentationSize);
|
||||||
|
} else {
|
||||||
|
state_server.state_cov.conservativeResize(
|
||||||
|
state_server.state_cov.rows()-augmentationSize, state_server.state_cov.cols()-augmentationSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove this camera state in the state vector.
|
||||||
|
state_server.cam_states.erase(rm_cam_state_id);
|
||||||
|
cam0.moving_window.erase(rm_cam_state_id);
|
||||||
|
cam1.moving_window.erase(rm_cam_state_id);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
void MsckfVio::pruneCamStateBuffer() {
|
void MsckfVio::pruneCamStateBuffer() {
|
||||||
|
|
||||||
if (state_server.cam_states.size() < max_cam_state_size)
|
if (state_server.cam_states.size() < max_cam_state_size)
|
||||||
@ -2030,7 +2150,7 @@ void MsckfVio::pruneCamStateBuffer() {
|
|||||||
feature.observations.erase(cam_id);
|
feature.observations.erase(cam_id);
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
if(!feature.initializePosition(state_server.cam_states)) {
|
if(!feature.initializeRho(state_server.cam_states)) {
|
||||||
for (const auto& cam_id : involved_cam_state_ids)
|
for (const auto& cam_id : involved_cam_state_ids)
|
||||||
feature.observations.erase(cam_id);
|
feature.observations.erase(cam_id);
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
Reference in New Issue
Block a user