update to smartFactor
parent
b04d2f1512
commit
22ccd4b4b4
|
|
@ -31,7 +31,7 @@
|
||||||
namespace gtsam {
|
namespace gtsam {
|
||||||
|
|
||||||
// default threshold for selective relinearization
|
// default threshold for selective relinearization
|
||||||
static double defaultLinThreshold = 1e-7; // 0.01
|
static double defaultLinThreshold = 0; // 1e-7; // 0.01
|
||||||
// default threshold for retriangulation
|
// default threshold for retriangulation
|
||||||
static double defaultTriangThreshold = 1e-7;
|
static double defaultTriangThreshold = 1e-7;
|
||||||
|
|
||||||
|
|
@ -72,11 +72,6 @@ namespace gtsam {
|
||||||
std::vector<Vector> gs;
|
std::vector<Vector> gs;
|
||||||
double f;
|
double f;
|
||||||
|
|
||||||
// Jacobian representation (before Schur complement)
|
|
||||||
Matrix Hx;
|
|
||||||
Matrix Hl;
|
|
||||||
Vector b;
|
|
||||||
|
|
||||||
// C = Hl'Hl
|
// C = Hl'Hl
|
||||||
// Cinv = inv(Hl'Hl)
|
// Cinv = inv(Hl'Hl)
|
||||||
// Matrix3 Cinv;
|
// Matrix3 Cinv;
|
||||||
|
|
@ -347,23 +342,26 @@ namespace gtsam {
|
||||||
state_->degenerate = false;
|
state_->degenerate = false;
|
||||||
state_->cheiralityException = false;
|
state_->cheiralityException = false;
|
||||||
} catch( TriangulationUnderconstrainedException& e) {
|
} catch( TriangulationUnderconstrainedException& e) {
|
||||||
// point is triangulated at infinity
|
// point is triangulated at infinity
|
||||||
//std::cout << e.what() << std::end;
|
//std::cout << "Triangulation failed " << e.what() << std::endl;
|
||||||
|
BOOST_FOREACH(gtsam::Matrix& m, Gs) m = zeros(6, 6);
|
||||||
|
BOOST_FOREACH(Vector& v, gs) v = zero(6);
|
||||||
state_->degenerate = true;
|
state_->degenerate = true;
|
||||||
state_->cheiralityException = false;
|
state_->cheiralityException = false;
|
||||||
dim_landmark = 2;
|
dim_landmark = 2;
|
||||||
|
return HessianFactor::shared_ptr(new HessianFactor(keys_, Gs, gs, f)); // TODO: Debug condition, uncomment when fixed
|
||||||
} catch( TriangulationCheiralityException& e) {
|
} catch( TriangulationCheiralityException& e) {
|
||||||
// point is behind one of the cameras, turn factor off by setting everything to 0
|
// point is behind one of the cameras, turn factor off by setting everything to 0
|
||||||
//std::cout << e.what() << std::end;
|
//std::cout << e.what() << std::end;
|
||||||
BOOST_FOREACH(gtsam::Matrix& m, Gs) m = zeros(6, 6);
|
BOOST_FOREACH(gtsam::Matrix& m, Gs) m = zeros(6, 6);
|
||||||
BOOST_FOREACH(Vector& v, gs) v = zero(6);
|
BOOST_FOREACH(Vector& v, gs) v = zero(6);
|
||||||
//state_->cheiralityException = true; // TODO: Debug condition, uncomment when fixed
|
state_->cheiralityException = true; // TODO: Debug condition, uncomment when fixed
|
||||||
//return HessianFactor::shared_ptr(new HessianFactor(keys_, Gs, gs, f)); // TODO: Debug condition, uncomment when fixed
|
return HessianFactor::shared_ptr(new HessianFactor(keys_, Gs, gs, f)); // TODO: Debug condition, uncomment when fixed
|
||||||
// TODO: this is a debug condition, should be removed the comment
|
// TODO: this is a debug condition, should be removed the comment
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
state_->degenerate = true; // TODO: this is a debug condition, should be removed
|
// state_->degenerate = true; // TODO: this is a debug condition, should be removed
|
||||||
dim_landmark = 2; // TODO: this is a debug condition, should be removed the comment
|
// dim_landmark = 2; // TODO: this is a debug condition, should be removed the comment
|
||||||
|
|
||||||
if (!retriangulate && state_->cheiralityException) {
|
if (!retriangulate && state_->cheiralityException) {
|
||||||
BOOST_FOREACH(gtsam::Matrix& m, Gs) m = zeros(6, 6);
|
BOOST_FOREACH(gtsam::Matrix& m, Gs) m = zeros(6, 6);
|
||||||
|
|
@ -486,6 +484,7 @@ namespace gtsam {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
noise_-> WhitenSystem(Hxi, Hli, bi);
|
noise_-> WhitenSystem(Hxi, Hli, bi);
|
||||||
|
f += bi.squaredNorm();
|
||||||
|
|
||||||
Hx2.block( 2*i, 6*i, 2, 6 ) = Hxi;
|
Hx2.block( 2*i, 6*i, 2, 6 ) = Hxi;
|
||||||
Hl2.block( 2*i, 0, 2, 3 ) = Hli;
|
Hl2.block( 2*i, 0, 2, 3 ) = Hli;
|
||||||
|
|
@ -494,10 +493,6 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
state_->Hx = Hx2;
|
|
||||||
state_->Hl = Hl2;
|
|
||||||
state_->b = b2;
|
|
||||||
|
|
||||||
// Shur complement trick
|
// Shur complement trick
|
||||||
Matrix H(6 * numKeys, 6 * numKeys);
|
Matrix H(6 * numKeys, 6 * numKeys);
|
||||||
Matrix C2;
|
Matrix C2;
|
||||||
|
|
@ -522,10 +517,10 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==========================================================================================================
|
// ==========================================================================================================
|
||||||
state_->calculatedHessian = true;
|
// state_->calculatedHessian = true;
|
||||||
state_->Gs = Gs;
|
// state_->Gs = Gs;
|
||||||
state_->gs = gs;
|
// state_->gs = gs;
|
||||||
state_->f = f;
|
// state_->f = f;
|
||||||
|
|
||||||
return HessianFactor::shared_ptr(new HessianFactor(keys_, Gs, gs, f));
|
return HessianFactor::shared_ptr(new HessianFactor(keys_, Gs, gs, f));
|
||||||
}
|
}
|
||||||
|
|
@ -565,8 +560,8 @@ namespace gtsam {
|
||||||
// std::cout << "TriangulationCheiralityException " << std::endl;
|
// std::cout << "TriangulationCheiralityException " << std::endl;
|
||||||
// point is behind one of the cameras, turn factor off by setting everything to 0
|
// point is behind one of the cameras, turn factor off by setting everything to 0
|
||||||
//std::cout << e.what() << std::end;
|
//std::cout << e.what() << std::end;
|
||||||
//state_->cheiralityException = true; // TODO: Debug condition, remove comment
|
state_->cheiralityException = true; // TODO: Debug condition, remove comment
|
||||||
//return 0.0; // TODO: this is a debug condition, should be removed the comment
|
return 0.0; // TODO: this is a debug condition, should be removed the comment
|
||||||
} catch( TriangulationUnderconstrainedException& e) {
|
} catch( TriangulationUnderconstrainedException& e) {
|
||||||
// point is triangulated at infinity
|
// point is triangulated at infinity
|
||||||
//std::cout << e.what() << std::endl;
|
//std::cout << e.what() << std::endl;
|
||||||
|
|
@ -574,7 +569,7 @@ namespace gtsam {
|
||||||
state_->cheiralityException = false;
|
state_->cheiralityException = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
state_->degenerate = true; // TODO: this is a debug condition, should be removed
|
// state_->degenerate = true; // TODO: this is a debug condition, should be removed
|
||||||
|
|
||||||
if (!retriangulate && state_->cheiralityException) {
|
if (!retriangulate && state_->cheiralityException) {
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
@ -588,7 +583,8 @@ namespace gtsam {
|
||||||
state_->point = camera.backprojectPointAtInfinity(measured_.at(i)); // 3D parametrization of point at infinity
|
state_->point = camera.backprojectPointAtInfinity(measured_.at(i)); // 3D parametrization of point at infinity
|
||||||
}
|
}
|
||||||
Point2 reprojectionError(camera.projectPointAtInfinity(state_->point) - measured_.at(i));
|
Point2 reprojectionError(camera.projectPointAtInfinity(state_->point) - measured_.at(i));
|
||||||
overallError += noise_->distance( reprojectionError.vector() );
|
overallError += 0.5 * noise_->distance( reprojectionError.vector() );
|
||||||
|
//overallError += reprojectionError.vector().norm();
|
||||||
}
|
}
|
||||||
return overallError;
|
return overallError;
|
||||||
}
|
}
|
||||||
|
|
@ -599,7 +595,9 @@ namespace gtsam {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Point2 reprojectionError(camera.project(state_->point) - measured_.at(i));
|
Point2 reprojectionError(camera.project(state_->point) - measured_.at(i));
|
||||||
overallError += noise_->distance( reprojectionError.vector() );
|
//std::cout << "Reprojection error: " << reprojectionError << std::endl;
|
||||||
|
overallError += 0.5 * noise_->distance( reprojectionError.vector() );
|
||||||
|
//overallError += reprojectionError.vector().norm();
|
||||||
} catch ( CheiralityException& e) {
|
} catch ( CheiralityException& e) {
|
||||||
std::cout << "Cheirality exception " << state_->ID << std::endl;
|
std::cout << "Cheirality exception " << state_->ID << std::endl;
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue